Есть почтовый сервер (debian, postfix, dovecot). К серверу подсоеденен кабель, идущий в коммутатор, в который вставлены 2 провайдера. На интерфейсе сервера соответственно два ip адреса. Маршрут по умолчанию идёт через провайдера $prov1. Хочу, чтобы вся почта (исходящие соединения tcp 25) уходила через второго провайдера ($prov2).
создаю таблицу
echo "150 prov2" >> /etc/iproute2/rt_tables
прописываю маршрут по умолчанию для этой таблицы через шлюз второго провайдера
ip ro ad default via $gw2 table prov2
прописываю правило маршрутизации, что меченные пакеты идут через эту таблицу
ip ru a fwmark 0x25 table prov2
а дальше мне надо метить пакеты, которые будут уходить с сервера. Так? :
iptables -t mangle -A PREROUTING -p tcp --dport 25 -j MARK --set-mark 0x25
Подозреваю, что надо это делать в POSTROUTING, но ведь согласно схеме после postrouting уже не будет приниматься решение о маршрутизации... Не? Или вообще не туда копаю?
Согласно таблице понимаю, что вроде в mangle OUTPUT надо метить пакеты, но есть сомнения.
Код: Выделить всё
Таблица 3-3.
От локальных процессов
Шаг Таблица Цепочка Примечание
1 Локальный процесс (т.е., программа-сервер или программа-клиент).
2 Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше -- на какой адрес, через какой сетевой интерфейс и пр.
3 mangle OUTPUT Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия.
...искал решение тут, тут, тут и здесь. Самое похожее нашел в этом сообщении. Но что-то не разобрал, как решил автор проблему
Быть может достаточно вообще простого правила
iptables -t nat -A POSTROUTING -p tcp --dport 25 -j SNAT --to-source $ip_prov2
Но не будет ли в этом случае отправляться пакет с адресом отправителя $ip_prov2 на шлюз default gw ($prov1) ?