adron2 Опубликовано 1 мая, 2014 · Жалоба Возникло у меня недопонимание процессов происходящих в ядре и связанных с маршрутизацией. Опишу ситуацию: Есть роутер. На 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 нет? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bondales Опубликовано 2 мая, 2014 · Жалоба icmp != tcp Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 2 мая, 2014 · Жалоба icmp != tcp Такая картина на всем кроме icmp. udp аналогично себя ведет. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 2 мая, 2014 · Жалоба Возникло у меня недопонимание процессов происходящих в ядре и связанных с маршрутизацией. Опишу ситуацию: Есть роутер. На 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 2 мая, 2014 · Жалоба Возникло у меня недопонимание процессов происходящих в ядре и связанных с маршрутизацией. Опишу ситуацию: Есть роутер. На 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...