Сетевые пространства имен 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
Удачи!