CHR v7.16.1 Hyper-V - No DHCP/broken connectivity on 3rd ethernet interface

Hi Everyone!

I first noticed this issue in 7.15.3. The issue that I am conscistently having is that a third ethernet interface does not operate properly on CHR. I have tried it on 2 different machines, one Windows 10 and another Windows Server 2019, using both an externally and internally connected virtual switch; same issue.

I have created a step-by-step screen recording that you can view here: https://youtu.be/jkLe6CNA9Do

The steps to reproduce:

  1. Use a fresh CHR VHDX
  2. Create a new virtual machine in Hyper-V connecting to the default virtual switch
  3. Create a new virtual switch
  4. change the settings of the VM to add 2 network adapters so there are now 3 adapters
  5. Connect the second adapter to the virtual switch and leave the 3rd disconnected
  6. Save and boot the VM
  7. Connect via winbox and use quick setup with the following
  • Router mode with automatic IP from WAN (first ethernet interface)
  • Add static IP to bridge (any, but I chose 10.100.0.1)
  • Bridge all ports
  • Apply DHCP (this seems buggy as you can see in the video, but this it not the issue)
  • Apply NAT
  • Add identification
  1. Relad the host network adapter and the network connects and the computer receives an IP address
  2. Open the VM settings and disconnect network atapter 2 from the virtual switch
  3. Connect the virtual switch to adapter 3
  4. Reload the host network adapter and it will never receive an IP address
  5. The log will show ‘dhcp1 offering lease x.x.x.x for XX:XX:XX:XX:XX:XX without success’
  6. You can see DHCP debug info in my video above
  7. Reverse the connection back to VM adapter 2 and we have an IP address again

I have also attached the config export in case there is something in there I am missing.

I really hope someone can help - thanks in advance!!
mybackup.rsc (1.15 KB)

Each Hyper-V Virtual Switch can only be mapped to one external (physical) NIC at a time. So, if you’ve got multiple physical adapters, you’ll need to assign a new virtual switch for each one.

Each virtual switch can host unlimited virtual adapters for the guest OS.

I think that’s because a hypervisor (not only Hyper-V but others too) doesn’t allow VM to advertise MAC address, that is different from assigned to a specific adapter. But RouterOS chooses one MAC for a bridge and announces it to all bridge ports. MAC is chosen from one of bridge ports, so it was chosen from ether2, that’s why it works on ether2 and doesn’t work on ether3 (bridge MAC is different from ether3 on host).

You should either:

  1. Stop doing weird stuff: you bridge two interfaces that are already a switch on host, which will result in a loop when both enabled. Why would you want a bridge for that?
  2. If you have an answer for question 1, you can enable MAC Spoofing in each adapter in VM configuration in Hyper-V manager, which will let hypervisor to pass traffic through without MAC filtering.