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