众所周知,如果你在 Hyper-V GUI 里面去掉 VLAN tagging 选项,那么你会获得一个 untagged access 接口,也就是说所有带着 VLAN tag 的帧就进不来了。但是其实 Hyper-V 是支持把一个接口作为真正的 VLAN Trunk 接口的。
PS C:\> Get-VMNetworkAdapterVlan -VmName *
VMName VMNetworkAdapterName Mode VlanList
------ -------------------- ---- --------
Game 网络适配器 Untagged
Docker 网络适配器 Trunk 0,1-4094
然后把需要修改的虚拟机网口设置为 Trunk 接口:
PS C:\Windows\system32> Set-VmNetworkAdapterVlan -VmName "Docker" -VmNetworkAdapterName "网络适配器" -Trunk -NativeVlanId 0 -AllowedVlanIdList "1-4094"
最后验证配置:
PS C:\> Get-VMNetworkAdapterVlan -VmName "Docker"
VMName VMNetworkAdapterName Mode VlanList
------ -------------------- ---- --------
Docker 网络适配器 Trunk 0,1-4094
如果之后要改回来,直接在 GUI 上改可能会报错。要先用 PowerShell 把接口设成 Untagged 再设置 Access:
Set-VmNetworkAdapterVlan -VmName "Docker" -VmNetworkAdapterName "网络适配器" -Untagged
Set-VmNetworkAdapterVlan -VmName "Docker" -VmNetworkAdapterName "网络适配器" -Access -VlanId 1

