如何与 Libvirt/KVM/QEMU 和 OVS 配置 VLAN?

如何与 Libvirt/KVM/QEMU 和 OVS 配置 VLAN?

我正在使用 Debian 9 机器作为具有两个接口的路由器:

eth0 for WAN
eth1 for LAN

eth1 具有多个 VLAN 的子接口(eth1.10;eth1.20;eth1.30),并具有到受管交换机的中继连接。各种设备都连接到交换机接入端口并可以访问互联网。非常标准的设置,一切都按预期运行。

现在,我想做的是使用 libvirt/KVM/Qemu 在 Debian 路由器内部创建几个虚拟机,并使用 OVS 桥将它们连接到现有 VLAN。类似于重新创建与我上面描述的相同的物理配置,但进行了虚拟化。

我尝试创建 ovsbr0,将 eth1 端口添加到桥接,然后为我希望虚拟机连接到的特定 VLAN 添加标记端口,如下所示:

# ovs-vsctl add-br ovsbr0
# ovs-vsctl add-port ovsbr0 eth1
# ovs-vsctl add-port ovsbr0 vnet1 tag=10
# ovs-vsctl add-port ovsbr0 vnet2 tag=20
# ovs-vsctl add-port ovsbr0 vnet3 tag=30

当我运行实际的虚拟机时,桥接器看起来像这样:

# ovs-vsctl show
   Bridge ovsbr0
       Port ovsbr0
           Interface ovsbr0
               type: internal
       Port "eth1"
           Interface "eth1"
       Port "vnet1"
           tag: 10
           Interface "vnet1"
       Port "vnet2"
           tag: 20
           Interface "vnet2"
       Port "vnet3"
           tag: 30
           Interface "vnet3"

令我惊讶的是,虚拟机 vnet 接口没有连接。从 eth1 上的 tcpdump,我可以看到来自虚拟机的 ARP 帧被正确标记并到达 eth1 接口,但由于某种原因没有转发到子接口。我以前从未使用过 OVS,所以我显然错过了一些重要的东西,但无法弄清楚它是什么。

有人能给我指出正确的方向吗?

答案1

OVS 网桥只会将流量转发到实际配置网桥的端口。尽管 eth1 已正确添加到网桥作为中继接口,但子接口 (eth1.10;eht1.20;eth1.30) 不是网桥的一部分,永远不会看到流量。解决方案很简单 - 只需将提到的 VLAN 子接口添加到网桥即可。

相关内容