Я новичок в сетевых технологиях Linux и не смог найти ответ на похожие вопросы.
Попытка создать 2 пространства имен и пинговать между ними
ip netns add red;
ip netns add blue;
ip link add dev v-red type veth peer name v-blue;
ip link set dev v-red netns red;
ip link set dev v-blue netns blue;
ip netns exec red ip addr add 192.168.15.1 dev v-red;
ip netns exec blue ip addr add 192.168.15.2 dev v-blue;
ip netns exec red ip link set dev v-red up;
ip netns exec blue ip link set dev v-blue up;
ip netns exec red ping 192.168.15.2;
-> ping: connect: Network is unreachable
На что я обращал внимание при отладке
ip netns exec blue ifconfig
v-blue: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.15.2 netmask 255.255.255.255 broadcast 0.0.0.0
ip netns exec red ifconfig
v-red: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.15.1 netmask 255.255.255.255 broadcast 0.0.0.0
решение1
Два устройства находятся в двух разных логических сетях /32, и нет маршрута или таблицы маршрутизации, указывающих на способ связи с каждым хостом.
Если вы выполните # ip netns exec red ip route get 192.168.15.2
его, то ответ будет RTNETLINK answers: Network is unreachable
. Поскольку в таблице маршрутизации нет ответа на вопрос, как отправить пакет в сеть 192.168.15.2/32.
Однако если вы добавите маршруты в обоих направлениях, это должно послужить намеком на то, что два хоста являются соседями (технически они больше похожи на напрямую подключенные одноранговые узлы) и пакеты должны отправляться.
ip netns exec red ip route add 192.168.15.2/32 dev v-red
ip netns exec blue ip route add 192.168.15.1/32 dev v-blue
Затем вы можете распечатать таблицу маршрутизации и увидеть, как теперь прокладывается маршрут.
ip netns exec blue ip route list
192.168.15.1 dev v-blue scope link
Имейте в виду, что здесь вполне допустимо использовать маршрут по умолчанию ( ip netns exec red ip route add default dev v-red
), поскольку он охватывает все хосты, а не только тот, о существовании которого вы знаете на другой стороне, но для понимания того, в чем здесь проблема, я добавил конкретные хосты, с которыми вы пытались связаться.
На этом этапе (при условии, что межсетевые экраны это разрешают) пингование должно работать так, как и ожидалось.
решение2
Все было объяснено в ответе выше. Я пытаюсь объяснить подробнее, набросав вашу настройку. Вам не хватает маршрутизации в каждом пространстве имен, просто помните, что пространство имен — это полный экземпляр стека маршрутизации TCP/IP (ARP, интерфейсы, маршрутизация, правила брандмауэра и т. д.).
Надеюсь это поможет.
решение3
Если вы намеревались создать пространства имен red и blue в одной сети, вы можете использовать следующий код, который исключает маршрутизатор.
ip netns exec red ip route add 192.168.15.2/24 dev v-red
ip netns exec blue ip route add 192.168.15.1/24 dev v-blue