Linux ping между двумя сетевыми пространствами имен

Linux ping между двумя сетевыми пространствами имен

Я новичок в сетевых технологиях 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

Связанный контент