我在运行 Hyper-V 的 Windows Server 2012 R2 计算机上有客户虚拟机。目前,客户机正在使用本机 VLAN(VLAN ID 1)。我可以从主机和网络与客户机通信。但是,客户机是 Zebra/Motorola VX9000 WLAN 控制器,它还需要处理 VLAN ID 10 和 15 上的流量。主机使用的交换机端口在 VLAN 1 上未标记,我已更新端口以在 VLAN 10 和 15 上也标记。我还通过 powershell 发出以下命令:
Set-VMNetworkAdapterVlan -VMName MyGuest -Trunk -AllowedVlanIdList "10,15" -NativeVlanId 1
不幸的是,执行此命令后,我失去了与客户机通信的能力。如果我为客户机打开 Hyper-V 控制台,它没有任何网络访问权限。尝试从主机或网络上的其他位置 ping 客户机会导致出现一条Destination host unreachable
消息。
我可以通过将适配器返回到未标记模式来“修复”它:
Set-VMNetworkAdapterVlan -VMName MyGuest -Untagged
现在我可以再次与访客通信,但这实际上并没有解决任何问题。我仍然需要这个访客能够处理 VLAN 10 和 15 上的流量。
我不明白为什么会发生这种情况。在切换到中继模式之前,未标记的数据包的 VLAN ID 为 1。现在不应该还是那样吗?我如何才能让这个客户机在我需要的所有 VLAN 上进行通信?
我在 ping 时看到的错误消息与没有路由时看到的类似。将端口设置为中继后(可能在主机上),我是否需要发出单独的命令来为这些网络创建路由?
答案1
我只有几个虚拟机以这种方式设置,它们也没有在本机 VLAN 上通信。我们解决这个问题的方法是将本机 VLAN 设置为网络上未使用的 VLAN,将要使用的 VLAN 放入允许的 VLAN,然后切换虚拟机内的所有 NIC 以标记其流量。
答案2
我找到解决办法了!
alejanp 在此链接让我尝试使用 vlan 0,以下命令似乎有效:
Set-VMNetworkAdapterVlan -VMName MyGuest -Trunk -AllowedVlanList "1,10,15" -NativeVlanId 0
简而言之,我将本机 vlan 设置为 0,并将我的真实本机 vlan 纳入允许列表中。
当然,这只有在客户机所需的未标记 VLAN 与主机/交换机端口的未标记 VLAN 匹配时才有效。幸运的是,今天的情况就是这样。