Я только начал изучать сетевые пространства имен. Я пытаюсь реализовать следующую простую настройку, следуя статье в http://www.opencloudblog.com/?p=42
+--------+ +-----------+ +--------+ | |------+ +------+ |------+ +------| | |nstest2 |veth-2++------++veth-b| Default |veth-a++------++veth-1| nstest1| | |------+ +------+ namespace |------+ +------| | +--------+ +-----------+ +--------+
Выполняю следующие команды:
#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 из пространства имен по умолчанию или наоборот, все эхо-запросы проходят успешно. Когда я пытаюсь выполнить ping nstest2 из пространства имен по умолчанию или наоборот, все ping терпят неудачу. Я не могу понять, почему это происходит и как это можно исправить. Должен ли я вручную добавлять маршруты из / в пространство имен по умолчанию в nstest2? Если да, то почему мне не нужно делать это для nstest1? Любая помощь с объяснением будет принята с благодарностью! Я использую Ubuntu 12.10.
РЕДАКТИРОВАТЬ:
Таблицы маршрутов для каждого пространства имен следующие:
Пространство имен по умолчанию
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use 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
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 veth-1
nstest2
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use 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
необходимо перед назначением этих адресов.
Во-первых, у вас есть две «логически» отдельные виртуальные сети 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
Удачи!