Little bit Background (Why I want to do this)
My Local Cable Operator (LCO) provides last mile infrastructure for 2 different ISPs. Let's say, ISP-1 and ISP-2. Customers can pay for any preferred ISP and use that ISP (physical fiber line is the same from the LCO switch to customer home for both ISPs. Users don't need to change physical connection if they change ISP). I have paid for both ISP and got connection details from both of the ISPs. I can specify any ISP IP/subnet on my Ethernet interface and my data will go through that ISP. Now, I don't have the LCO's original topology but here is a possible simplified one:
Now, My computer (OS-Windows) has only one ethernet NIC but I want to use both of the ISPs and I want to implement automatic failover in case one ISP is down. The basic procedure I thought is:
I could assign both IP/subnet to my single ethernet interface and I could specify static routes. This works but it is not an elegant solution for detecting which ISP is up/down.
If I had two different network interfaces (one physical and one virtual), I could use
ping -S <interfaceIP> 8.8.8.8for both ISPs and detect UP/DOWN status.
This is why I need to create a virtual interface on the physical NIC.
What I have done so far
I tried to use TAP virtual adapter as suggested here but it is showing 'Network Cable Unplugged'. I tried to bridge it to the physical interface but it didn't work. I could specify only one IP to the bridge and both IPs of the interfaces (physical and virtual) disappeared.
I followed this answer and tried to use Hyper-V external virtual switch. I entered the 2nd ISP IP/subnet on the virtual switch->Properties->IPV4. And entered the 1st ISP IP/subnet on the physical main ethernet interface (I had to enable IPV4 on this interface though because the virtual switch disabled them. Don't know why). Now, it works like a charm.
What I need help with
I am a little bit confused because I have never used Hyper-V virtual switch before.
Why does a switch have an IP address? The switch is an L2 device and it is called the virtual switch.
Why does the virtual switch disable the IPV4, client for Microsoft networks etc. on the original physical interface after creating it? I manually re-enabled them again from properties and this setup worked too without creating a 2nd virtual interface.
On the above mentioned answer (from where I got the solution), the person commented: "you can create two virtual interface under that same virtual switch". How can I do that?
Is there any way to make the virtual TAP adapter use the same physical ethernet NIC?
Is there any easier way to achieve what I am trying to do?
Currently, the accepted answer explains the question 1 and 3. Any help with my other queries is welcome.






ncpa.cplis a virtual interface connected to the virtual switch. So, it can have an IP address. This answers my question 1. -----But do you have any reason why I shouldn't specify the IP address to the real NIC? I added an IP (ISP 1) on the real NIC and another on (ISP 2) the vNIC and it works perfectly. This can also save me the hassle to add another one from PowerShell. – Sourav Ghosh Jan 22 '19 at 07:39Add-VMNetworkAdapter -ManagementOS -Name ISP2and it worked. – Sourav Ghosh Jan 24 '19 at 20:01-Switchoption with that command with your own vritual switch name otherwise that vNIC will not be connected to that virtual switch. – Biswapriyo Jan 24 '19 at 20:07HyperV extensible virtual switchoption enabled and it just worked. Maybe it can create some problem in VM networking but in my case, from the host OS, it didn't make any noticeable difference. Even on the technet article picture, the physical NIC and the vNIC both interfaces are connected to the virtual switch. So, specifying an IP on that interface should work. – Sourav Ghosh Jan 24 '19 at 20:09