Linux-Networking

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

  • March 20, 2020

我正在使用 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 子介面添加到網橋即可。

引用自:https://serverfault.com/questions/1005939