изменение маршрутизации для определенного трафика (iptables iproute2 mark)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

pelmen
Сообщения: 1268
ОС: debian

изменение маршрутизации для определенного трафика

Сообщение pelmen »

Привет всем.
Есть почтовый сервер (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) ?
Спасибо сказали: