是否可以使用 Hyper-V 2012R2 构建 Hyper-V 内部的虚拟交换机(不需要或不期望外部连接),其中一个交换机参与者(下图中的 VM 0)具有中继接口,其余虚拟机(下图中的 VM 1 ... VM n)每个都有使用特定 VLAN ID 标记的虚拟交换机的访问端口。
_______________________________________________________
| Hyper-V host |
| |
| _____ _____ ______ ______ |
| | VM0 | | VM1 | | VM 2 | ... | VM n | |
| | | | | | | | | |
| |_____| |_____| |______| |______| |
| |:| eth0 | eth0 | eth0 | eth0 |
| |:| trunk | vlan 1 | vlan 2 | vlan 3 |
| |:| | | | |
| ================================================= |
| Virtual Switch |
|_______________________________________________________|
例如,离开eth0
VM2 接口的未标记数据包在传递到虚拟交换机时将被标记 VLAN 标记 2。然后,它们将通过中继端口传出到 VM0,在那里它们将通过eth0
该 VM 到达 VM,并且(如果这是 Linux VM)在 上是可读的eth0.2
,即 VLAN 标记对 VM0 是显而易见的。同样,带有 VLAN 标记 2 的 VM0 的出站流量eth0
将带着该标记进入虚拟交换机,并且在将其发送到 VM2 之前将删除该标记,在那里它将以eth0
未标记的形式出现在 VM 的接口上。
如果是这样,那么如何实现这种标记?我不是 Hyper-V 专家,我能找到的唯一文档谈到整个交换机处于中继模式或访问模式。显然,交换机需要携带 VLAN 标记,但我需要将不同的端口置于中继或访问模式。如果没有外部接口,这是否可行?我也既不想也不需要连接到 Hyper-V 父分区。
常问问题:
我意识到在上述配置中每个 VLAN 可以有一个虚拟交换机,但我不想这样做,因为 VM0 必须具有大量网络接口,而这将使用许多虚拟交换机。
此配置在 VMware 和 Linux 上运行良好,并不像您想象的那么奇怪。
线条画得很糟糕,抱歉。
如果有必要的话,我准备通过编程而不是通过 GUI 来执行此操作。
答案1
您可以创建到 VM 的中继链接。
https://technet.microsoft.com/en-us/library/hh848475.aspx
通常你的命令将是这样的:
Set-VMNetworkAdapterVlan -VMname $VMName -VMNetworkAdapterName $VMNetworkAdapterName -Trunk -AllowedVlanIdList "vlan number" -NativeVlanId "vlan ID"
据我了解,您需要让所有虚拟机都具有中继 NIC。
Hyper-V 中的本机 Vlan 用于标记所有传出流量,因此如果您拥有带有本机 Vlan 50 的 VM0 NIC 中继,并且允许所有其他 Vlan,并且 VM1 NIC 访问 Vlan 1。那么 VM1 -> VM0 成功,但 VM0 -> VM1 失败。(在 -> 下,我的意思是发送数据包,如果它们被传送到目的地,则不必保证反向流成功)
因此,您的 VM0 应该具有一些所有机器通用的 VLAN X 作为本机 VLAN,并且允许 VLAN 列表中所有其他 VM 所需的所有 VLAN。任何其他 VM 都应将其唯一的 VLAN 作为本机 VLAN,并将 VLAN X 置于允许状态。
例如:
VM Name | Native Vlan | Allowed Vlan
VM1 | 1 | 1,50
VM2 | 2 | 2,50
VMn | n | n,50
VM0 | 50 | 1,2,n,50
这里 VM0 -> Any VM = 成功,Any VM -> VM0 = 成功,并且 VMn -> VMm(如果“n”和“m”不为 0)= 失败。
希望它有所帮助,对于任何语法错误深表歉意。