命名空间之间的OpenVSwitch

我试图在Linux上的两个TAP接口之间configuration一个桥梁,每个TAP接口都在自己的networking名称空间内创build。 我正在使用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%的数据包丢失。

我希望能够从它自己的命名空间(例如,来自test_ns1的testif1)ping接口。 我可以用Quantum界面来做到这一点,但是不能用我的,为什么?

然后,我很确定OpenVSwitch安装正确,因为我运行的是Ubuntu版本,而且我在同一台机器上运行OpenStack Quantum。

OpenStack不会创build带有ip tuntap add tap设备。 相反,它使用ovs-vsctl add-port命令在openvswitch桥上创build内部端口。 由于openvswitch将内部端口实现为tap设备,因此OpenStack将这些端口标记为“tapXXXX”。

要在openvswitch桥上创build一个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