LINUX.ORG.RU
ФорумAdmin

настройка маршрутизации пакетов

 , , ,


0

1

есть узел R1 с ip 17.12.1.1; он соединен с узлом R2 через интерфейс с ip 17.12.1.2; узел R2 соединяется с узлами R3 (ip 17.12.2.2) и R4 (17.12.3.2) через интерфейсы с ip 17.12.2.1 и 17.12.3.1 соответственно. У узла R3 есть выход в другую сеть, интерфейс этого выхода имеет ip 17.12.4.1; Аналогичный интерфейс есть и у R4, его ip 17.12.5.1; Как мне подсказали, описанная выше топология похожа на топологию сети с двумя провайдерами. Необходимо на 1 узле пинговать 17.12.5.1 (это 4 узел), до 4 узла request должен дойти, а вот reply должен вернуться в 3 узел. Причем первый узел от 3 (от ip 17.12.2.2) должен получить ttl exceeded. Уже третий день не могу настроить перенаправление пакетов согласно требованиям. в R2 добавлял:

ip ro add default via 17.12.2.2 table 103

ip rule add from 17.12.5.1 table 103

по идее все пакеты, приходящие с IP 17.12.5.1 должны идти по этому правилу на 3 узел. Но почему-то они вообще не доходят до 4 узла. После 2 узла их не видно в tcpdump. если же делать перенаправление на 2 узле всех пакетов которые идут на 17.12.1.1:

ip ro add 17.12.1.1 via 17.12.2.2

то тогда с 3 узла не смогу передать ttl exceeded на 1 узел. пробовал с iptables на 2 узле (через enp0s8 соединяется 2 узел с 3):

iptables -t nat -A PREROUTING -s 17.12.5.1 -d 17.12.1.1 -j DNAT —to-destination 17.12.2.2

iptables -A FORWARD -i enp0s8 -j ACCEPT

Ничего не помогает. Возможно, здесь можно обойтись и без iptables, но идей, как это сделать, больше нет.

В iptables нужно разрешить прохождение пакетов (и ответных пакетов) в FORWARD (если там политика DROP) и больше ничего не трогать.

На всех узлах проипсывать все маршруты (без default). Например, на узле R2 должны быть маршруты до 17.12.[123].0/24 на интерфейсах и маршруты до 17.12.4.0/24 и 17.12.5.0/24 через R3 и R4 соответственно. А на R3, помимо маршрутов на интерфейсах, должен быть маршрут до R1 через R2.

DNAT тут точно не нужен.

mky ★★★★★
()
Ответ на: комментарий от mky

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

sysctl -w net.ipv4.ip_forward=1

artbaby
() автор топика
Ответ на: комментарий от artbaby

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

Только узел 3, получив пакет от узла 4 к узлу 1, захочет его маршрутизировать к узлу 1 через узел 2. И так и сделает или дропнет (если forward'инд выключен).

mky ★★★★★
()

1. Нарисуйте схему
2. Маски сетей отсутствуют (мы догадаться должны?)
Вобщем телепаты в отпуске

anc ★★★★★
()
Ответ на: комментарий от artbaby

Ещё раз перечитал:

Причем первый узел от 3 (от ip 17.12.2.2) должен получить ttl exceeded.

Это уже какой-то бред. Узел 3 получит пакет от узла 4 к узлу 1, типа ″echo reply″. Если он и будет генерить icmp type 11, то это будет пакет для узла 4 о том, что кончился TTL у пакета ″icmp echo reply src=узел_4 dst=узел_1″. Маршрутизация этого пакета на узел 1 вобще не имеет смысла, он ведь не оправлял ″icmp echo replay″. Это что, лабораторная работа, что-ли?

mky ★★★★★
()
Ответ на: комментарий от mky

спасибо за отклик! проблему решил. да, это лабораторка :)

artbaby
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.