Linux-Networking
命名空間之間的 OpenVSwitch
我正在嘗試在 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