Linux-Networking
如何配置 VLAN 以及 Libvirt/KVM/QEMU 和 OVS?
我正在使用 Debian 9 機器作為具有兩個介面的路由器:
eth0 for WAN eth1 for LAN
eth1 具有用於多個 VLAN(eth1.10;eth1.20;eth1.30)的子介面,並具有與託管交換機的中繼連接。各種設備連接到交換機訪問埠並可以訪問 Internet。相當標準的設置,一切都按預期工作。
現在我要做的是使用 libvirt/KVM/Qemu 在 Debian 路由器內創建一些虛擬機,並使用 OVS 網橋將它們連接到現有的 VLAN。類似於重新創建與我上面描述的相同的物理配置,但已虛擬化。
我嘗試創建 ovsbr0,將 eth1 埠添加到橋接,然後為我希望 VM 連接到的特定 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,我可以看到來自 VM 的 ARP 幀被正確標記並到達 eth1 介面,但由於某種原因沒有轉發到子介面。我以前從未使用過 OVS,所以我顯然遺漏了一些重要的東西,但無法弄清楚它是什麼。
有人可以指出我正確的方向嗎?
OVS 網橋只會將流量轉發到實際配置的網橋中的埠。儘管 eth1 作為中繼介面正確添加到網橋,但子介面(eth1.10;eht1.20;eth1.30)不是網橋的一部分,永遠不會看到流量。解決方案很簡單 - 只需將提到的 VLAN 子介面添加到網橋即可。