Ситуация следующая: есть 2 канала к разным провайдерам, есть маршрутизатор с eth0 (192.168.20.1) и eth1 (192.168.7.5). Задача: пустить исходящий почтовый трафик по eth1, а остальной - по обоим каналам.
Делаю так:
ip route add default scope global nexthop via 192.168.7.1 dev eth1 weight 1 nexthop via 192.168.20.6 dev eth0 weight 2
192.168.7.1 и 192.168.20.6 - gateways по пути к провайдерам.
+ создаю дополнительные таблицы маршрутизации для каждого провайдера. Трафик бегает то по одному каналу, то по другому, т.е. все работает, как предполагалось, остается только разобраться с почтой.
Для этого делаю
iptables -t mangle -A OUTPUT -d ! 192.168.0.0/16 -p tcp --dport 25 -j MARK --set-mark 25
ip rule add fwmark 25 pref 100 table prov1
ip route list table prov1
192.168.7.1 dev eth1 scope link src 192.168.7.5
default via 192.168.7.1 dev eth1 src 192.168.7.5
Для теста выбираю какой-нибудь внешний почтовик с адресом, про который "ip route get x.x.x.x" говорит, что пакеты будут уходить с eth0 (via 192.168.20.6). Делаю "telnet x.x.x.x 25" и tcpdump-ом вижу, что пакеты идут все таки по eth1, но исходящий адрес у них от eth0 (192.168.20.1). Почему так ? Ведь в маршруте явно указано src !
Попробовал также сделать SNAT этим пакетам:
iptables -t nat -A POSTROUTING -o eth1 -m mark --mark 25 -j SNAT --to-source 192.168.7.5
tcpdump уже показывает правильный адрес, но соединение все равно не устанавливается. В /proc/net/ip_conntrack вижу такое:
tcp 6 13 SYN_RECV src=192.168.20.1 dst=67.28.113.11 sport=37167 dport=25 src=67.28.113.11 dst=192.168.7.5 sport=25 dport=37167 use=1 mark=0
В tcpdump постоянно повторяющиеся строки:
13:09:12.233756 IP 192.168.7.5.37167 > 67.28.113.11.smtp: S 755710919:755710919(0) win 5840 <mss 1460,sackOK,timestamp 776528421 0,nop,wscale 0>
13:09:12.518436 IP 67.28.113.11.smtp > 192.168.7.5.37167: S 282450457:282450457(0) ack 755710920 win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp 185470331 776528421>
Чего ему не хватает ? :-) Может кто-нибудь объяснить ?
Не знает кто-нибудь какую-то доку, где подробно описано как ядро осуществляет маршрутизацию (когда какие таблицы просматривает, когда просматривает правила ip rules) ?
Потому как нашел пару схем движения пакетов, но по-моему они обе не подтверждаются практикой:
http://mailman.ds9a.nl/pipermail/lartc/2002q2/004245.html
(или http://www.docum.org/docum.org/kptd/)
и
http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH03.web.html (про ядра 2.4)
P.S. Ядро 2.4.27.
Ответ на:
комментарий
от fagot
Ответ на:
комментарий
от spirit
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Отсутствие маршрута в ip_conntrack и в cache (2014)
- Форум Странности маршрутизации (2006)
- Форум Два интернет канала (2009)
- Форум ip_conntrack чего-то не отслеживает соединения (2014)
- Форум tcpdump && TCP connection establishment && SYN_RECV state (2008)
- Форум DNAT и Iptables (2011)
- Форум Sendmail не принимает почту (2005)
- Форум проблеммы с сетью... (2007)
- Форум Проблемы с двумя аплинками и НАТом (2009)
- Форум Маршрутизация... опять (2009)