我有一个 CentOS 6 Box(内核 2.6.32-642.6.1.el6.x86_64),其中正在运行 2 个 KVM 实例。
我从数据中心获取了两个 VLAN。遗憾的是,他们不会将两个 VLAN 合并为一个 VLAN。我需要在同一个 KVM 客户端上同时使用这两个 VLAN。
默认 VLAN 未标记,第二个 VLAN 在 ID 471 上被标记。
目前,我是这样做的:
bridge name bridge id STP enabled interfaces
br0 8000.0cc47a7fed0a no eth1
kvm1100.0
br1 8000.0cc47a7fed0a no eth1.471
kvm1101.0
一切按预期运行。我可以在 KVM 实例 1100 上使用未标记的 VLAN,在 KVM 实例 1101 上使用 VLAN 471。
现在我希望 KVM 1101 可以使用未标记的 VLAN 和 VLAN 471 的 IP 地址。
因此我将 eth1.471 添加到 br0,然后将 kvm1101.0 添加到 br0。
bridge name bridge id STP enabled interfaces
br0 8000.0cc47a7fed0a no eth1
eth1.471
kvm1100.0
kvm1101.0
一切正常,我可以在两个实例上访问两个 VLAN。一切按我的意愿运行。
但是当 eth1.471 添加到 br0 时,我发现整个网络都出现了数据包丢失。不仅在这台服务器上,它还影响到所有服务器。当我从 br0 中删除 eth.471 时,数据包丢失停止了。
看来这不是正确的方法。我尝试过各种方法,但结果总是一样。
我遗漏了什么?如上所述,数据中心不愿意将两个 VLAN 合并为一个。
将 VLAN 传递到 KVM 实例并在那里配置 VLAN + IP 地址不是一个选项。KVM 实例应该能够使用这两个 VLAN,而无需额外配置。
答案1
当您将 eth1 与 eth1.174 桥接时,您实际上在接口上的数据中心网络中创建了拓扑循环,从而导致数据包丢失和其他问题。
解决您的问题的可能方法是引入 kvm1101 的第二个接口并添加那KVM 接口到 br0,将 br0 和 br1 作为单独的桥接器绑定到物理适配器上各自的 VLAN。
答案2
如果您想在虚拟机中使用不同 IP 子网中的两个不同 IP 地址,则需要在虚拟机中设置两个不同的接口。没有其他办法,因为这就是 IP 的工作方式。规则是,您不能在同一个 L2 广播域中配置两个不同的 IP 子网。这也是数据中心拒绝将它们合并为一个的原因。
因此,您需要为您的虚拟机分配两个虚拟网络适配器(kvm1100.0
和kvm1101.0
)。
但是,如果您的虚拟机需要监听标记 VLAN 中 IP 地址的某些特定端口,则可以使用 NAT:
主机操作系统已在标记的 vlan 中配置了一个地址(br1
或者eth1.471
,这里实际上不需要网桥)。然后,主机操作系统已配置端口转发,以便任何传入到eth1.471
接口 IP 地址端口 X 的连接都将转发到网络中的客户虚拟机 IP 地址eth1
。
如果您希望某些目的地使用eth1.471
作为传出接口,您还可以使用 NAT 来处理来自客户虚拟机的传出流量。