Перейти к содержимому
Калькуляторы

вопрос по iproute2. Странность.

Возникло у меня недопонимание процессов происходящих в ядре и связанных с маршрутизацией. Опишу ситуацию:

Есть роутер.

На eth1.104 влане ip адрес 10.255.19.254/24

На eth1.101 влане ip адрес 10.255.1.6/24

Дальше есть таблица роутинга rt1:

ip ro add default via 10.255.1.1 t rt1

и правило

ip ru add from 10.255.19.0/24 t rt1

...

как бы к транзитному трафику через этот роутер вопросов нет. Все что от сети 10.255.19.0/24 пришло роутер исправно перенаправляет на роутер 10.255.1.1.

Но! Если попытаться с этого роутера(10.255.19.254) сделать telnet 10.255.19.222 но ничего не выходит.

А tcpdump показывает что пакеты на соединение идут но не через eth1.104 как им положено а через eth1.101.

То есть роутер пытается посединиться с 10.255.19.222 используя шлюз 10.255.1.1(через интерфейс eth1.101).

Это то понятно. Так как срабатывает правило:

ip ru add from 10.255.19.0/24 t rt1

Но! Внимани вопрос ! Если пустить пинги с этого роутера на 10.255.19.222 то они проходят!

Как? Почему на пинги этот рул никак не действует?

Я не спрашиваю как сделать чтобы с роутера работал telnet на 10.255.19.222. Это то как раз понятно:

ip ro add 10.255.19.0/24 dev eth1.104 t rt1 и все работает.

Мне просто интересно почему пинги ходят а telnet нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

icmp != tcp

 

Такая картина на всем кроме icmp.

udp аналогично себя ведет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возникло у меня недопонимание процессов происходящих в ядре и связанных с маршрутизацией. Опишу ситуацию:

Есть роутер.

На eth1.104 влане ip адрес 10.255.19.254/24

На eth1.101 влане ip адрес 10.255.1.6/24

Дальше есть таблица роутинга rt1:

ip ro add default via 10.255.1.1 t rt1

и правило

ip ru add from 10.255.19.0/24 t rt1

...

как бы к транзитному трафику через этот роутер вопросов нет. Все что от сети 10.255.19.0/24 пришло роутер исправно перенаправляет на роутер 10.255.1.1.

Но! Если попытаться с этого роутера(10.255.19.254) сделать telnet 10.255.19.222 но ничего не выходит.

А tcpdump показывает что пакеты на соединение идут но не через eth1.104 как им положено а через eth1.101.

То есть роутер пытается посединиться с 10.255.19.222 используя шлюз 10.255.1.1(через интерфейс eth1.101).

Это то понятно. Так как срабатывает правило:

ip ru add from 10.255.19.0/24 t rt1

Но! Внимани вопрос ! Если пустить пинги с этого роутера на 10.255.19.222 то они проходят!

Как? Почему на пинги этот рул никак не действует?

Я не спрашиваю как сделать чтобы с роутера работал telnet на 10.255.19.222. Это то как раз понятно:

ip ro add 10.255.19.0/24 dev eth1.104 t rt1 и все работает.

Мне просто интересно почему пинги ходят а telnet нет?

Пинги raw socket, tcp/udp обычные, возможно с этим связано.

Обычно в raw socket выбор интерфейса может идти по другому. Попробуйте биндиться на конкретный интерфейс через -I, правда не факт, что поможет.

Ну и конечно важно, чтоб не было никакого nat или правил в tc filter

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возникло у меня недопонимание процессов происходящих в ядре и связанных с маршрутизацией. Опишу ситуацию:

Есть роутер.

На eth1.104 влане ip адрес 10.255.19.254/24

На eth1.101 влане ip адрес 10.255.1.6/24

Дальше есть таблица роутинга rt1:

ip ro add default via 10.255.1.1 t rt1

и правило

ip ru add from 10.255.19.0/24 t rt1

...

как бы к транзитному трафику через этот роутер вопросов нет. Все что от сети 10.255.19.0/24 пришло роутер исправно перенаправляет на роутер 10.255.1.1.

Но! Если попытаться с этого роутера(10.255.19.254) сделать telnet 10.255.19.222 но ничего не выходит.

А tcpdump показывает что пакеты на соединение идут но не через eth1.104 как им положено а через eth1.101.

То есть роутер пытается посединиться с 10.255.19.222 используя шлюз 10.255.1.1(через интерфейс eth1.101).

Это то понятно. Так как срабатывает правило:

ip ru add from 10.255.19.0/24 t rt1

Но! Внимани вопрос ! Если пустить пинги с этого роутера на 10.255.19.222 то они проходят!

Как? Почему на пинги этот рул никак не действует?

Я не спрашиваю как сделать чтобы с роутера работал telnet на 10.255.19.222. Это то как раз понятно:

ip ro add 10.255.19.0/24 dev eth1.104 t rt1 и все работает.

Мне просто интересно почему пинги ходят а telnet нет?

Пинги raw socket, tcp/udp обычные, возможно с этим связано.

Обычно в raw socket выбор интерфейса может идти по другому. Попробуйте биндиться на конкретный интерфейс через -I, правда не факт, что поможет.

Ну и конечно важно, чтоб не было никакого nat или правил в tc filter

 

Да похоже вы правы.

Скорей всего для raw сокетов(и вообще сокетов у которых бинд не сделан к конкретному адресу) происходит следующее:

Сокет оставляет на усмотрение ядра выбор src ip. Дальше ядро создает skb и начинает искать для него skb->dst. При этом ip_hdr(skb)->saddr пока еще не заполнен(==0). Ясное дело что рулы не срабатывают и поиск маршрута идет в таблице main.

А уже после того как маршрут найден что то в ядре заполняет ip.

 

И испытание с пингами это подтверждает:

~# ping 10.255.19.222
PING 10.255.19.222 (10.255.19.222) 56(84) bytes of data.
64 bytes from 10.255.19.222: icmp_req=1 ttl=64 time=10.5 ms
^C
--- 10.255.19.222 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 10.545/10.545/10.545/0.000 ms
~# ping 10.255.19.222 -I 10.255.19.254
PING 10.255.19.222 (10.255.19.222) from 10.255.19.254 : 56(84) bytes of data.
^C
--- 10.255.19.222 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.