Сетевые пространства имен Linux - ping не работает на конкретном вете

Я только начал изучать сетевые пространства имен. Я пытаюсь реализовать следующую простую настройку, следуя статье в http://www.opencloudblog.com/?p=42

   + -------- + + ----------- + + -------- +
   | | ------ + + ------ + | ------ + + ------ | |
   | nstest2 | veth-2 ++ ------ ++ veth-b | По умолчанию |veth-a++------++veth-1| nstest1|
   |        |------+        +------+ пространство имен |------+        +------|        |
   +--------+                      +-----------+                      +--------+

Я выполняю следующие команды:

#setup namespace nstest1
sudo ip netns add nstest1
sudo ip netns exec nstest1 ip link set dev lo up
sudo ip link add veth-a type veth peer name veth-1
sudo ip link set veth-1 netns nstest1
sudo ip netns exec nstest1 ip addr add 10.0.1.1/24 dev veth-1
sudo ip netns exec nstest1 ip link set dev veth-1 up

# setup namespace nstest2
sudo ip netns add nstest2
sudo ip netns exec nstest2 ip link set dev lo up
sudo ip link add veth-b type veth peer name veth-2
sudo ip link set veth-2 netns nstest2
sudo ip netns exec nstest2 ip addr add 10.0.2.1/24 dev veth-2
sudo ip netns exec nstest2 ip link set dev veth-2 up

# setup default namespace
sudo ip addr add 10.0.1.2/24 dev veth-a
sudo ip link set dev veth-a up
sudo ip addr add 10.0.2.2/24 dev veth-b
sudo ip link set dev veth-b up

Когда я пингую nstest1 из пространства имен по умолчанию или наоборот, все эхо-запросы успешны. Когда я пытаюсь пропинговать nstest2 из пространства имен по умолчанию или наоборот, все эхо-запросы не выполняются. Я не могу понять, почему это происходит и как это можно исправить. Должен ли я вручную добавить маршруты из / в пространство имен по умолчанию в nstest2? Если да, почему я не должен делать это для nstest1? Любая помощь с объяснением будет принята с благодарностью! Я использую Ubuntu 12.10.

РЕДАКТИРОВАТЬ:
Таблицы маршрутов являются следующими для каждого пространства имен:


Пространство имен по умолчанию

Таблица маршрутизации IP ядра
Шлюз назначения Genmask Флаги Метрика Ссылка Использовать Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 veth-a
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 veth-b
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1


nstest1

Таблица маршрутизации IP ядра
Шлюз назначения Genmask Флаги Метрика Ссылка Использовать Iface
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 veth-1



nstest2

Таблица маршрутизации IP ядра
Шлюз назначения Genmask Флаги Метрика Ссылка Использовать Iface
10.0.2.0 0.0.0.0 255.255.255.0 U 0      0        0 veth-2

РЕДАКТИРОВАТЬ 2
Получается, что 10.0.2.2 назначено на eth0, поэтому возникает коллизия при назначении одной и той же подсети veth-b и veth-2. Когда я изменил его на 10.0.3.1/24 и 10.0.3.2/24, ping работал как для nstest1, так и для nstest2. Делать ifconfig -a необходимо перед назначением этих адресов.

1 ответ

Решение

Ну, во-первых, у вас есть две "логически" отдельные виртуальные сети Ethernet.

на veth-b используйте 10.0.2.1/24 и 10.0.2.4/24 на veth-2

на veth-a используйте 10.0.1.1/24 и используйте 10.0.1.3/24 на veth-1

veth-b и veth-2 - это сети, отличные от veth-a и veth-1, поэтому вы должны указать им отдельные IP-подсети.

Вы по-прежнему не сможете пинговать с 10.0.1.3 до 10.0.2.4, если не выполните:

   $ echo 1 > /proc/sys/net/ipv4/ip_forward
   $ sudo ip netns exec nstest2 ip route add default via 10.0.2.1
   $ sudo ip netns exec nstest1 ip route add default via 10.0.1.1

Удачи!

Другие вопросы по тегам