Я узнаю о сетевых пространствах имен. Я создал два сетевых пространства имен - красное и синее - в моей системе и подключил пару веток для соединения между ними - красный и синий. Я назначаю IP-адреса каждому из этих интерфейсов - 192.168.1.1 и 192.168.1.2. Затем я поднимаю интерфейсы. Однако они не могут пропинговать друг друга, пока я не укажу шлюз по умолчанию. Я думаю, что вам нужно только указать шлюз по умолчанию, если они находятся в разных сетях. Код здесь:

# Create network namespaces
ip netns add red
ip netns add blue

# Create veth pair
ip link add veth-red type veth peer name veth-blue

# Add veth to respective namespaces
ip link set veth-red netns red
ip link set veth-blue netns blue

# Set IP Addresses
ip -n red addr add 192.168.1.1 dev veth-red
ip -n blue addr add 192.168.1.2 dev veth-blue


# Bring up interfaces
ip -n red link set veth-red up
ip -n blue link set veth-blue up

# Bring up Loopback interfaces 
ip -n red link set lo up
ip -n blue link set lo up

Я тогда пытаюсь пинговать синий от красного

# Ping test
ip netns exec red ping 192.168.1.2

Но это не с ошибкой:

connect: Network is unreachable

Затем я добавляю шлюз по умолчанию для обоих пространств имен:

# Add default gateway
ip netns exec red ip route add default via 192.168.1.1 dev veth-red
ip netns exec blue ip route add default via 192.168.1.2 dev veth-blue

Пинг тогда работает.

Мой вопрос: почему я должен добавить шлюз по умолчанию, если они находятся в одной сети?

1 ответ1

0

Я понял это. Глупая ошибка. Когда я добавил IP-адрес, я не указал маску подсети. Так что предполагалось, что это будет 255.255.255.255. Я изменил это на это, и это работает.

# Set IP Addresses
ip -n red addr add 192.168.1.1/24 dev veth-red
ip -n blue addr add 192.168.1.2/24 dev veth-blue

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .