Wow - sometimes you don’t know how easy you’ve got it until you step off the cliff! That cliff for me was attempting to replace VMware Workstation with Windows 8 Hyper-V. Hey Microsoft, you really should do something about this since I see it cited ad nauseam as the reason many IT Pros revert their attempt to adopt Win 8 Hyper-V and go back to VMware. But in the meantime, I have some steps to make this as easy as possible.
So what did I lose, that I would like back when using Hyper-V networking? Here’s the list:
Dynamic NAT for all VMs to connect to the Internet, no matter how my laptop happens to be connected at the moment. This becomes manual fussing around in Hyper-V everytime you use a different network.
- Easy connections from my VMs to my laptop.
- Easy connections from my Laptop to my VMs.
- Automatic name resolution for VM to laptop and laptop to VMs connections.
- So the first bullet is adequately answered by the blog post of Thomas Vochten (and others). Essentially you disable Hyper-V with a boot configuration, install vmware player and then re-enable hyper-v. Then you configure a Hyper-V switch to connect to Vmnet8 - which is a NAT / DHCP segment that gives your VMs seamless access to the internet, no matter what the host configuration is. So that solves #1 nicely! The article is here: http://thomasvochten.com/archive/2014/01/hyper-v-nat/ and includes simple commands to temporarily disable Hyper-V.
Configuring a Hyper-V switch against a physical adapter on your system causes Hyper-V to own that adapter. By using a virtual adapter installed by VMWare there are no changes made to your real adapters and therefore fewer edge cases where it causes disruptions to other networking activities on your Win 8.1 Hyper-V host.
By the way, if you are hoping to use ping to verify your connections, you will need to enable ICMP echo firewall rules on any of the real or virtual machines you wish to respond to ping. They are under “Inbound Rules” and called “File and Printer Sharing (Echo Request - ICMPv4-In)”
It was an unpleasant surprise to discover that 2-4 did not seem to be handled by the above changes.
Jump to “UPDATE” below for new information.
I followed some other advice to install a second network adapter on each VM and a second switch set to “Internal” in Hyper-V. But alas - no DHCP so a bunch of manual IP address management to get that working.
Then it hit me - why not repeat the same procedure for the VMWare “Internal” network and then I should get DHCP for that segment as well.
This is how to do that:
- Be sure to follow the above blog article to install VMWare workstation so it’s network segments are available on your real machine.
- In Hyper-V console create a new (second one if you did the above earlier) EXTERNAL Switch. It has to be EXTERNAL from the Hyper-V prospective to connect it to the VMware “Internal” network.
- Connect the new switch to VMware’s “VMnet1”
- Add a second NIC card to each VM and attach it to this Hyper-V switch. To keep it easy I named my hyper-V network for this “Internal” and named the one I built for internet access “NAT”. This solved #2 and #3 on my original list. Also half of #4 was handled immediately and the other half after reboots all around.
The other half was name resolution of VM guests from my host laptop running hyper-V.
As far as i can tell this is the minimum steps required to get the majority of VMWare networking benefits in Win8 Hype r-V. If you know how to trim it down more - please give me a shout.
Microsoft - if the above (or a slight variation) is just about the simpliest way to do this - Hyper-V for Win 8 / workstations needs a nice new feature to make this much less painful. If it’s already there and I’m missing it - I would love to hear about it.
UPDATE - SIMPLIFIED: I figured out that the setting up the second virtual switch and host adapters is not necessary. However, if you find yourself reading this article you have probably made several changes before searching how to do it. The layering of these changes can easily get your setup in a twist where it won’t work correctly. If you combine that with ARP caching and it can get confusing. So this procedure is not simplier - but the resultant configuration is. The procedure helps you get reset.
FYI - I also tried to see if a simplier approach was possible with VirtualBox since it only installs a single adapter and does not require Hyper-V disablement to install. However, the out of the box NAT configuration requires manual DHCP setup and the VirtualBox NAT also seems to not configure VirtualBox’s adapter as well. VirtualBox also had the concept of NAT and NAT Network and it was not clear which to configure or exactly how. I believe VMWare’s NAT is equivalent to VirtualBox NAT Network.
Here is a way to reset and get started from a clean working state.
- I have successfully configured this while VirtualBox is installed, but if this Hyper-V workaround is the only reason you have it installed, it might be helpful to uninstall it as it seems to have caused challenges for others.
- Delete any Virtual Switches you have already created with Hyper-V.
- Ensure your real hardware adapters are the ONLY ones with the VMWare Bridge Protocol checked. (and “Virtual Box Bridged Networking Adapter” if you have it)
- Restore your VMWare adapters to their pristine state - essentially all protocols should be checked on them except “VMWare Bridge Protocol” (and “Virtual Box Bridged Networking Adapter” if you have it)
- Ensure there are no custom settings under the “Advanced” tab for the TCP/IPv4 and TCP/IPv6 (FYI in a default setup, netbios over TCP/IP will end up enabled since the VMWare DHCP server does not change the the defaults - can be verified via “ipconfig /all”)
- Disable the VMWare virtual adapter “VMware Network Adapter VMnet1” so that it does not confuse you later. (assuming you don’t use VMWare with an alternate boot setup.)
- Reboot your host to ensure all adapters take on default values and all ARP caches, routing tables, etc are reset to their default state.
- With no Hyper-V guests running, add a Hyper-V virtual Switch and point it at “VMware Network Adapter VMnet8” (VMWare’s NAT adapter) I called mine “VMWare NAT” so it is very easy to setup new machines.
- Ensure “Allow management operating system to share this adapter” is checked.
- On the host OS run “ipconfig /release” followed by “ipconfig /renew”.
- Remove and re-add any guest network cards to point to the new Hyper-V switch.
- NOTE: Using ping requires that you enable “Inbound Rules” Windows Firewall rules called “File and Printer Sharing (Echo Request - ICMPv4-In)”
- NOTE: If you run third party firewalls they may also need to allow ping. Many internet “safety suites” contain a firewall even if they don’t call it a firewall.
- NOTE: If any of the following tests fail, reboot all guests and the host before attempting to make any settings changes. This will reset routing tables and ARP caches.
- Test guest connectivity by opening a website on a guest OS and ping the Hyper-V host (using host name) from the guest. Also test Hyper-V Host connectivity to Hyper-V guests by pinging the Hyper-V guest (using host name) from the Hyper-V host OS.
- If it still does not work, avoid the temptation to throw your laptop off a balcony - you could hurt someone below. Instead you might consider going to bed as it’s probably late now - or if it’s daytime - go for a walk.