![如何与 Libvirt/KVM/QEMU 和 OVS 配置 VLAN?](https://linux22.com/image/749332/%E5%A6%82%E4%BD%95%E4%B8%8E%20Libvirt%2FKVM%2FQEMU%20%E5%92%8C%20OVS%20%E9%85%8D%E7%BD%AE%20VLAN%EF%BC%9F.png)
我正在使用 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 子接口添加到网桥即可。