Hyper-V 建立 VLAN Trunk 接口

众所周知,如果你在 Hyper-V GUI 里面去掉 VLAN tagging 选项,那么你会获得一个 untagged access 接口,也就是说所有带着 VLAN tag 的帧就进不来了。但是其实 Hyper-V 是支持把一个接口作为真正的 VLAN trunk 接口的。

首先我们需要获得接口的名字:

PS C:\Windows\system32> Get-VMNetworkAdapterVlan -VmName "Linux"

VMName   VMNetworkAdapterName Mode     VlanList
------   -------------------- ----     --------
Linux    Network Adapter      Untagged

然后设置这个接口为 trunk 接口:

PS C:\Windows\system32> Set-VmNetworkAdapterVlan -VmName "Linux" -VmNetworkAdapterName "Network Adapter" -Trunk -NativeVlanId 0 -AllowedVlanIdList "1-4094"

最后验证配置:

PS C:\Windows\system32> Get-VMNetworkAdapterVlan -VmName "Linux"

VMName   VMNetworkAdapterName Mode  VlanList
------   -------------------- ----  --------
Linux    Network Adapter      Trunk 0,1-4094

如果之后要改回来,直接在 GUI 上改可能会报错。要先用 PowerShell 把接口设成 Untagged 再设置 Access:

Set-VmNetworkAdapterVlan -VmName "Linux" -VmNetworkAdapterName "Network Adapter" -Untagged
Set-VmNetworkAdapterVlan -VmName "Linux" -VmNetworkAdapterName "Network Adapter" -Access -VlanId 100

注:Cisco CSR1000v 和这个功能一起用会有一些鬼故事,不建议这么配置。