Создание сети Ethernet-петли — как настроить маршруты

Создание сети Ethernet-петли — как настроить маршруты

У меня есть сеть, которую нужно настроить как петлю. Она состоит из 3 узлов, каждый из которых имеет два интерфейса. Диаграмма ниже объясняет это.

+--->(eth0) Node 1 (eth1)--->(eth0) Node 2 (eth1)--->(eth0) Node 3 (eth1)--->+
|    10.0.3.1     10.0.1.1  10.0.1.2     10.0.2.2  10.0.2.3      10.0.3.3    |
+--<----------------------------<--------------------------------------------+

Я хочу сделать пинг с узла 1 на узел 3, чтобы запрос прошел через узел 2, а ответ пошел напрямую на узел 1 с узла 3.

node1$ ping 10.0.2.3

Я настроил узлы следующим образом:

node1# route add -net 10.0.2.0/24 gw 10.0.1.2

node2# route add -net 10.0.3.0/24 gw 10.0.2.3

node3# route add -net 10.0.1.0/24 gw 10.0.3.1

При запуске ping запрос от узла 1 поступает на узел 3. Однако узел 3 не отвечает, он даже не генерирует ответ (по крайней мере, тот, который я могу перехватить с помощью Wireshark).

Не могли бы вы дать мне подсказку?

ТА

решение1

Когда узел выбираетисточникЕсли нет иных ограничений, то для пакета, который он отправляет, обычно выбирается IP-адрес, «ближайший» к следующему узлу на маршруте к месту назначения пакета.

С точки зрения узла 1, следующим шагом к узлу 3 является 10.0.1.2. Ближайший к узлу IP-адрес 10.0.1.210.0.1.1, а не 10.0.3.1. (IP-адрес в той же подсети, что и пункт назначения, считается «ближе» к пункту назначения, чем IP-адрес, не в той же подсети.)

Проверьте исходный IP-адрес пинга. Скорее всего, это 10.0.1.1, а не 10.0.3.1. Если у узла 3 нет маршрута к 10.0.1.1, он не может ответить.

решение2

Узлы правильно не повторяются, чтобы предотвратить неконтролируемое вещание моста. Я рекомендую вам запустить протокол Spanning Tree. Это позволит вам разместить полностью функционирующие маршруты между всеми узлами. Я не могу придумать другого способа сделать это, если только вы не хотите ограничить связь между определенными ссылками на уровне 2 или уровне 3.

решение3

( /sbin/routeустарело, используйте ip routeвместо него).

Если вы хотите, чтобы ваши пакеты передавались только в одном направлении, это означает, что каждый узел должен использовать следующий узел в качестве своего шлюза, независимо от пункта назначения.

node1# ip route add 10.0.0.0/22 via 10.0.1.2
node2# ip route add 10.0.0.0/22 via 10.0.2.3
node3# ip route add 10.0.0.0/22 via 10.0.3.1

Однако в большинстве дистрибутивов фильтрация обратного пути часто включена по умолчанию. Фильтрация обратного пути — это фильтр для входящих пакетов, который пытается проверить, что ответ на этот пакет будет отправлен на тот же интерфейс, на который получен пакет. Это хорошая вещь в обычной сети, где маршрутизация симметрична, но в вашем случае вам нужна асимметричная маршрутизация, поэтому вы можете просто отключить фильтрацию обратного пути на интерфейсе, на котором вы получаете пакеты, или, по крайней мере, уменьшить ее, чтобы она просто проверяла, маршрутизируется ли исходный IP:

node1# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node2# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node3# sysctl -w net.ipv4.conf.eth0.rp_filter=2

Документация о фильтрации обратного пути и других настройках доступна в документации ядра по адресу Documentation/networking/ip-sysctl.txt. Где ее найти, зависит от вашего дистрибутива (или просто поищите в Интернете ip-sysctl.txt).

Приятного вам прохождения!

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