CentOS、KVM、VLAN 和桥接

CentOS、KVM、VLAN 和桥接

我需要帮助使用 KVM 设计虚拟化客户端的网络。我的机器运行的是 CentOS 7,有 2 个 NIC。我想实现以下目标

  • 一个物理接口 (em1) 仅用于主机访问。主机将具有非常正常的配置,包括未标记的流量和静态 IP 地址。
  • 另一个物理接口(em2)接收不同 VLAN 的标记流量。
  • 虚拟机只能看到其特定 VLAN 的流量。客户机之间的通信无需在 KVM 内进行。
  • 我希望虚拟 NIC 上的流量不带标记,以确保客户机不会更改其内部 NIC 配置来欺骗其他网络。

概念图链接

我是 libvirt 的新手,也不习惯使用网络管理器。我搜索了文档,但发现了相互矛盾的信息,首先是问题是否可以通过网络管理器配置此桥接。我还阅读了有关让 KVM 进行切换的可能性。

我将非常感激直接的配置帮助或指向最新文档的指针,该文档不使用(在 CentOS 7 上)已弃用的工具或在此期间删除的问题的解决方法。

提前致谢。

答案1

你想要的东西虽然有用,但做起来却不太简单。基本上,你有 3 种可能性:

  1. 使用 Open vSwitch 堆栈虚拟化网桥/交换机
  2. 为每个 VLAN 使用专用的软件桥接器
  3. 在较新的内核中,可以使用“桥接 VLAN 过滤器”拥有一个“智能”桥梁来统治它们

解决方案 1(可能)是最完整的,但也是最难设置的。

解决方案 2是我在实验室测试中采用的。例如,对于 VLAN 10 和 20,您必须创建类似的设置:

eth0(物理接口)-> eth0.10(VLAN 标记)-> br10(与 eth0.10 和相对虚拟 qemu/kvm 接口桥接)
eth0(物理接口)-> eth0.20(VLAN 标记)-> br20(与 eth0.20 和相对虚拟 qemu/kvm 接口桥接)

请注意,如果您需要在标记桥上也有未标记的流量,您必须发出以下 ebtables 规则: ebtables -t broute -A BROUTING -i eth0 -p 802.1Q -j DROP 由于 Linux 网络堆栈管理传入数据包的方式,因此需要此规则。有关更多信息,请参阅这里这里这里

解决方案 3应该是个聪明的选择,但你需要内核支持它(还有 libvirt)。CentOS7 应该有一个足够新的内核,但我不知道所有其他软件是否都准备好了。

解决方案 4(额外奖励):如果您不需要客户机/主机通信,请查看 macvtap 驱动程序。虽然我不使用它,但您应该能够设置类似的解决方案:

eth0(物理接口)-> eth0.10(VLAN 标记)-> eth0.10 上的 MAC vtap
eth0(物理接口)-> eth0.20(VLAN 标记)-> eth0.20 上的 MAC vtap

对我来说,无法与客人/主人进行沟通是一个太大的限制,但您的要求可能有所不同。

最后,看看这里,值得一读。

相关内容