Пишу шпаргалку для себя, чтобы не забыть
Недавно я писал о том, как я хитрил с трафиком и добился того, что трафик ICQ шёл через один канал, а остальной трафик - через другой. Тогда удалось выкрутиться довольно просто. Заранее был известен диапазон IP-адресов, который должен был пойти через альтернативный маршрут.
Теперь задача изменилась.
Теперь задача встала по-другому. Нужно было весь исходящий трафик SMTP пулять не в дефолтный канал. И теперь причина была не в надёжности канала, а в том, что на дефолтном канале у нас был динамический IP, который не нравился почтовикам.
А вот на хорошем канале всё было хорошо и даже для нас было зарегистрировано нормальное доменное имя.
Вот только теперь назначением пакетов может быть не заранее известный пул адресов - а практически вес интернет. Поэтому старые методы не помогают.
Проблема решается в два этапа - сначала iptables в таблице mangle маркирует пакеты:
PHP:
[root@caesar log]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.0 on Wed Feb 24 11:27:17 2010
*mangle
:PREROUTING ACCEPT [42490:6051887]
:INPUT ACCEPT [42470:6044225]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [66561:77530427]
:POSTROUTING ACCEPT [66561:77530427]
[0:0] -A OUTPUT -p tcp -m tcp --dport 25 -j CONNMARK --set-mark 0x2
[0:0] -A OUTPUT -m connmark --mark 0x2 -j MARK --set-mark 0x2
.............
font>
Затем заранее маркированные пакеты рулим куда надо.
Сначала добавить строчку в нужный файл
PHP:
[root@caesar log]# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
.......
<b>112 smtpalt</b>
font>
Потом добавить правило
PHP:
[root@caesar log]#/sbin/ip rule add fwmark 0x2 lookup smtpalt
font>
И наконец маршрут
PHP:
[root@caesar log]#/sbin/ip route add src 192.168.1.2 default dev eth0 via 192.168.1.1 table smtpalt
font>
И да - пришлось у postfix в конфиге явно прописывать исходящий IP
smtp_bind_address=192.168.1.2
Макс. Я ничего не забыл?