>Точно не работает, т.к. решение о маршрутизации пакетов от локальных серверов принимается
>сразу же, как появился соответствующий пакет, и повлиять на это сложно
>(т.к. непонятно с какого интерфейса он идет и с какого адреса).
>См. таблицу, которую я привел выше. Использовал различные вариации на тему
>
>
>iptable -t mangle -A OUTPUT -p tcp -d ! $LOCALNET --dport 25
>-j MARK --set-mark 0x64
>ip rule add fwmark 0x64 table expensive
>ip route add default via expesive_gate_ip dev ppp0 table expensive
>ip route flush cache
>
>Пакеты идут по маршруту по умолчанию и действительно маркируются в цепочке output,
>но никуда не перенаправляются, и с этой меткой покидают интерфейс по
>умолчанию (метка уничтожается). Вот так-то (((.
>Временно проблему решил так: указал smtp серверу смартрелей на сервер провайдера, добавил
> source route
>ip rule add from expensive_inteface_ip table expensive
>ip rule add to prov_smart_relay_ip table expensive
>ip route add default via expesive_gate_ip dev ppp0 table expensive
>ip route flush cache Посмотрел ближе:
Да в моем случае есть одно НО:
они уходят таки с сорцами из таблицы main.
Что у меня не вызвало проблем т.к. живу на своих адресах. :)
т.о.
Пакет таки обрабатывается соответствующей таблицей и запихиватется в правильный интерфейс но с неожиданным адресом srс который он действительно берет из главной таблицы. :(
Специально перестроил маршруты и протестил полный вариант.
Полечилось с добавлением:
iptables -t nat -I POSTROUTING -p tcp -d ! 192.168.0.0/16 --dport 25 -j SNAT --to-source $SOURCE_MAIL_TABLE
Стало уходить с правильным адресом источника и соответственно возвращаться через заявленный интерфейс.
Проверено!
В таком случае полный вид выглядет так:
iptables -t nat -I POSTROUTING -p tcp --dport 25 -j SNAT --to-source $SOURCE_MAIL_TABLE
iptables -t mangle -I OUTPUT -p tcp --dport 25 -j MARK --set-mark 0x64
ip rule add fwmark 0x64 lookup mailtable
tcpdump -vi $INTERFACE
показал правильные tcp сессии на нужном интерфейсе.
PS: Вообще странно, что при обработке другой таблицей, подставляется не тот src адрес.
Хотя возможно так и должно быть.
Почитаю мануал - тогда напишу. Видимо это надо еще задать где-то.
PPS: Хотя если уже смотреть в манипуляцию адресом источника - можно всего этого и не делать.
1. Иметь правильную таблицу для почтового линка.
2. Иметь правильные правила для адреса т.е.
ip rule add to $SOURCE_MAIL_TABLE lookup mailtable
ip rule add from $SOURCE_MAIL_TABLE lookup mailtable
3. Одну строчку с
iptables -t nat -I POSTROUTING -p tcp --dport 25 -j SNAT --to-source $SOURCE_MAIL_TABLE
И в маркировке надобность отпадает т.к. пакеты поймаются по адресу источника....
Не пробовал но скорее всего такой вариант имеет право на жизнь.