Linux-Networking

命名空間之間的 OpenVSwitch

  • March 1, 2022

我正在嘗試在 Linux 上配置兩個 TAP 介面之間的橋接,每個介面都在自己的網路命名空間內創建。我使用 OpenVSwitch 作為軟體橋。

這些是我認為應該有效的步驟:

ip netns add test_ns1
ip netns exec test_ns1 ip tuntap add mode tap testif1
ip netns exec test_ns1 ip addr add 192.168.1.1/24 dev testif1
ip netns exec test_ns1 ip link set testif1 up

ip netns add test_ns2
ip netns exec test_ns2 ip tuntap add mode tap testif2
ip netns exec test_ns2 ip addr add 192.168.1.2/24 dev testif2
ip netns exec test_ns2 ip link set testif2 up

ovs-vsctl add-br test_br
ip netns exec test_ns1 ovs-vsctl add-port test_br testif1
ip netns exec test_ns2 ovs-vsctl add-port test_br testif2

ip netns exec test_ns1 ping -c 2 192.168.1.1
ip netns exec test_ns2 ping -c 2 192.168.1.2
ip netns exec test_ns1 ping -c 2 192.168.1.2
ip netns exec test_ns2 ping -c 2 192.168.1.1

所有四個 ping 命令都將不起作用並報告 100% 封包遺失。

我希望能夠從其自己的命名空間內 ping 介面(例如,來自 test_ns1 的 testif1)。我可以用 Quantum 介面做到這一點,但不能用我的介面,為什麼?

然後,我很確定 OpenVSwitch 安裝正確,因為我執行的是 Ubuntu 版本,並且我在同一台機器上執行了 OpenStack Quantum。

OpenStack 不會使用ip tuntap add. ovs-vsctl add-port相反,它使用命令在 openvswitch 網橋上創建內部埠。因為 openvswitch 將內部埠實現為 tap 設備,所以 OpenStack 將這些埠標記為“tapXXXX”。

要在 openvswitch 網橋上創建 testif1 介面並將其放在 test_ns1 命名空間中,請嘗試執行以下操作:

ovs-vsctl add-port test_br testif1 -- set interface testif1 type=internal
ip link set testif1 netns test_ns1
ip netns exec test_ns1 ip addr add 192.168.1.1/24 dev testif1
ip netns exec test_ns1 ip link set testif1 up

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