2

У меня есть сеть, которая должна быть настроена как петля. Он состоит из 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

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

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

Т.А.

3 ответа3

2

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

С точки зрения Узла 1, следующий переход к Узлу 3 - 10.0.1.2 . IP-адрес узла 1, ближайший к 10.0.1.2 это 10.0.1.1 , а не 10.0.3.1 . (IP-адрес в той же подсети, что и пункт назначения, считается "ближе" к месту назначения, чем IP-адрес не в той же подсети.)

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

1

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

0

(/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).

Счастливого цикла!

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