Назад | Перейти на главную страницу

OpenVSwitch между пространствами имен

Я пытаюсь настроить мост между двумя интерфейсами TAP, каждый из которых создан в своем собственном сетевом пространстве имен в Linux. Я использую 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% потере пакетов.

Я бы ожидал, что смогу проверить связь с интерфейсом изнутри его собственного пространства имен (например, testif1 из test_ns1). Я могу сделать это с интерфейсами Quantum, но не со своим, почему?

Тогда я совершенно уверен, что OpenVSwitch установлен правильно, потому что я использую стандартную версию Ubuntu, и у меня на том же компьютере работает OpenStack Quantum.

OpenStack не создает тап-устройства с ip tuntap add. Вместо этого он создает внутренние порты на мосту openvswitch, используя ovs-vsctl add-port команда. Поскольку openvswitch реализует внутренние порты как устройства с ответвлением, OpenStack помечает эти порты как «tapXXXX».

Чтобы создать интерфейс testif1 на мосту openvswitch и поместить его в пространство имен 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