URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 92593
[ Назад ]

Исходное сообщение
"Проблемы с маршрутизацией почты"

Отправлено dnick , 14-Ноя-11 15:57 
Приветсвую господа! Изложу свою проблему. Нашей организации выделили 2ой канал связи. Настроил балансировку каналов. Пробросил соединение бухгалтерских компов на "старый" внешний интерфейс с помощью маркировки пакетов. Но вот как добится чтобы почтовый сервер sendmail отсылал данные через "старый" интерфейс, я чегото непойму. Помоготи кто знает!!! Полностью скрипт маршрутизации приводить наверно не стоит, вот конечный кусок

IP_INET1="192.168.1.2"
IP_INET2="192.168.2.2"
IP_LOCAL="10.64.3.250"
IF_LOCAL="eth1"
IF_INET1="eth0"
IF_INET2="eth2"
......
/sbin/ip route change default scope global nexthop via $IP_INET1 dev $IF_INET1 weight 2 nexthop via $IP_INET2 dev $IF_INET2 weight 3
/sbin/ip rule delete table T1
/sbin/ip rule delete table T1
/sbin/ip rule delete table T2
/sbin/ip rule delete table T2
/sbin/ip rule add from $IP_INET1 table T1
/sbin/ip rule add from $IP_INET2 table T2
/sbin/ip rule add fwmark 10 table T1
/sbin/ip rule add fwmark 11 table T2
/sbin/ip route flush cache

Далее скрипт настройки брандмауэра

IPT="/sbin/iptables"
NET_SUB1="10.64.3.10/32"
NET_SUB2="10.64.3.8/32"
NET_LOCAL="10.64.3.0/24"
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t mangle -A PREROUTING -s $NET_SUB1 -d ! $NET_LOCAL -j MARK --set-mark 10
$IPT -t mangle -A PREROUTING -s $NET_SUB2 -d ! $NET_LOCAL -j MARK --set-mark 10
##### Далее (4 строки) идут мои извраты в попытке добиться чтобы почта тоже шла через eth0, методом маркировки пакетов, но пока ничего невыходит
$IPT -t mangle -A PREROUTING -s ! $NET_LOCAL -d ! $NET_LOCAL -p tcp --dport 25 -j MARK --set-mark 10
$IPT -t mangle -A PREROUTING -s ! $NET_LOCAL -d ! $NET_LOCAL -p udp --dport 25 -j MARK --set-mark 10
$IPT -t mangle -A PREROUTING -s 127.0.0.1/32 -d ! $NET_LOCAL -p tcp --dport 25 -j MARK --set-mark 10
$IPT -t mangle -A PREROUTING -s 127.0.0.1/32 -d ! $NET_LOCAL -p udp --dport 25 -j MARK --set-mark 10

$IPT -t nat -A PREROUTING -i eth0 -d 192.168.1.2 -s 95.107.63.10 -j DNAT --to-destination 10.64.3.10
$IPT -t nat -A POSTROUTING -m mark --mark 10 -j MASQUERADE


Содержание

Сообщения в этом обсуждении
"Проблемы с маршрутизацией почты"
Отправлено reader , 14-Ноя-11 16:47 
>[оверквотинг удален]
> ##### Далее (4 строки) идут мои извраты в попытке добиться чтобы почта
> тоже шла через eth0, методом маркировки пакетов, но пока ничего невыходит
> $IPT -t mangle -A PREROUTING -s ! $NET_LOCAL -d ! $NET_LOCAL -p
> tcp --dport 25 -j MARK --set-mark 10
> $IPT -t mangle -A PREROUTING -s ! $NET_LOCAL -d ! $NET_LOCAL -p
> udp --dport 25 -j MARK --set-mark 10
> $IPT -t mangle -A PREROUTING -s 127.0.0.1/32 -d ! $NET_LOCAL -p tcp
> --dport 25 -j MARK --set-mark 10
> $IPT -t mangle -A PREROUTING -s 127.0.0.1/32 -d ! $NET_LOCAL -p udp
> --dport 25 -j MARK --set-mark 10

пакеты от локальных программ PREROUTING не проходят, в OUTPUT

> $IPT -t nat -A PREROUTING -i eth0 -d 192.168.1.2 -s 95.107.63.10 -j
> DNAT --to-destination 10.64.3.10
> $IPT -t nat -A POSTROUTING -m mark --mark 10 -j MASQUERADE


"Проблемы с маршрутизацией почты"
Отправлено Andrey Mitrofanov , 15-Ноя-11 09:38 
> пакеты от локальных программ PREROUTING не проходят, в OUTPUT

+1 "Это должен знать(*) каждый!
          (*)как найти! G://прохождение пакетов iptables mangle"тм

https://www.opennet.ru/openforum/vsluhforumID10/3437.html#3
https://www.opennet.ru/docs/RUS/iptables/#TRAVERSINGOFTABLES


"Проблемы с маршрутизацией почты"
Отправлено dnick , 15-Ноя-11 14:12 
>> пакеты от локальных программ PREROUTING не проходят, в OUTPUT
> +1 "Это должен знать(*) каждый!
>           (*)как найти!
> G://прохождение пакетов iptables mangle"тм
> https://www.opennet.ru/openforum/vsluhforumID10/3437.html#3
> https://www.opennet.ru/docs/RUS/iptables/#TRAVERSINGOFTABLES

Спасибо большое за ссылки но вопрос заключается не в том где почитать а в том как это выглядит на практике. Замена правил на
$IPT -t mangle -A OUTPUT -s 127.0.0.1/32 -d ! $NET_LOCAL -p tcp --dport 25 -j MARK --set-mark 10
$IPT -t mangle -A OUTPUT -s 127.0.0.1/32 -d ! $NET_LOCAL -p udp --dport 25 -j MARK --set-mark 10

к положительным результатам не приводит. Т.е. часть почты идет нормально, а часть отбраковывается удаленными почтовиками, т.к. они приходят с IP-адреса заблокированого за спам.

P.S. Из этого следует что правила не срабатывают, т.е. пакеты похоже выгледят не так. Большая просьба кто знает подскажите как отлавливать пакеты сендмейла и маркировать их(интересуют именно исходящие пакеты). Т.к. входящие идут туда куда надо, что и неудевительно, т.к. DNS у провайдер заполнен вроде правильно!!!


"Проблемы с маршрутизацией почты"
Отправлено Andrey Mitrofanov , 15-Ноя-11 14:45 
>  но вопрос заключается не в том где
>а в том как это выглядит на практике.

Ну, примерно так и выглядит.... Наверное.

> $IPT -t mangle -A OUTPUT -s 127.0.0.1/32 -d ! $NET_LOCAL -p tcp
> --dport 25 -j MARK --set-mark 10

"-s 127.0.0.1/32" убери.

> $IPT -t mangle -A OUTPUT -s 127.0.0.1/32 -d ! $NET_LOCAL -p udp
> --dport 25 -j MARK --set-mark 10

Это правило убери.


"Проблемы с маршрутизацией почты"
Отправлено dnick , 15-Ноя-11 14:57 
>>  но вопрос заключается не в том где
>>а в том как это выглядит на практике.
> Ну, примерно так и выглядит.... Наверное.
>> $IPT -t mangle -A OUTPUT -s 127.0.0.1/32 -d ! $NET_LOCAL -p tcp
>> --dport 25 -j MARK --set-mark 10
> "-s 127.0.0.1/32" убери.
>> $IPT -t mangle -A OUTPUT -s 127.0.0.1/32 -d ! $NET_LOCAL -p udp
>> --dport 25 -j MARK --set-mark 10
> Это правило убери.

ВО!! Спасибо большое! Заработало!!


"Бонус... +=ebtables"
Отправлено Andrey Mitrofanov , 15-Ноя-11 12:45 
> пакеты от локальных программ PREROUTING не проходят, в OUTPUT

<<В действительности всё не как на самом деле.>>
http://ebtables.sourceforge.net/br_fw_ia/PacketFlow.png/
http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html
<<Но и тогда сомнения не покидают меня.>>

Вот пытался про броутеры читать... А ещё, слышал, есть %-O heavy voodo у VPS-ников.


"Проблемы с маршрутизацией почты"
Отправлено YuryD , 15-Ноя-11 11:58 
> Приветсвую господа! Изложу свою проблему. Нашей организации выделили 2ой канал связи. Настроил
> балансировку каналов. Пробросил соединение бухгалтерских компов на "старый" внешний интерфейс
> с помощью маркировки пакетов. Но вот как добится чтобы почтовый сервер
> sendmail отсылал данные через "старый" интерфейс, я чегото непойму. Помоготи кто

Если sendmail на этой-же машине, раскомментарьте в sendmail.cf

#O ClientPortOptions=Family=inet, Address=0.0.0.0

И пропишите нужный ip. Если нужно чтоб он слушал на определенном ip есть еще и

#O DaemonPortOptions=Name=IPv4, Family=inet, Address=0.0.0.0


"Проблемы с маршрутизацией почты"
Отправлено dnick , 15-Ноя-11 14:03 
>> Приветсвую господа! Изложу свою проблему. Нашей организации выделили 2ой канал связи. Настроил
>> балансировку каналов. Пробросил соединение бухгалтерских компов на "старый" внешний интерфейс
>> с помощью маркировки пакетов. Но вот как добится чтобы почтовый сервер
>> sendmail отсылал данные через "старый" интерфейс, я чегото непойму. Помоготи кто
>  Если sendmail на этой-же машине, раскомментарьте в sendmail.cf
> #O ClientPortOptions=Family=inet, Address=0.0.0.0

Раскоментировал

O ClientPortOptions=Family=inet, Address=192.168.1.2
192.168.1.2 - это адрес того интерфейса через который мне надо отправлять почту(правда этот интерфейс смотрит на роутер который соответсвенно пробрасывает на реальные внешний IP)

Но вылезли еще более кривые грабли, теперь вообще ничего не уходит наружу.

в maillog вижу теперь следующее
Nov 15 13:54:46 localhost sendmail[11093]: pAFAsjkJ011091: to=<ххххх@yandex.ru>, ctladdr=<admin@ххххххх.orel.ru> (500/500), delay=00:00:00, xdela
y=00:00:00, mailer=esmtp, pri=120459, relay=mx.yandex.ru. [77.88.21.89], dsn=4.0.0, stat=Deferred: Transport endpoint is not connected


"Проблемы с маршрутизацией почты"
Отправлено YuryD , 17-Ноя-11 07:42 
> Но вылезли еще более кривые грабли, теперь вообще ничего не уходит наружу.
> y=00:00:00, mailer=esmtp, pri=120459, relay=mx.yandex.ru. [77.88.21.89], dsn=4.0.0,
> stat=Deferred: Transport endpoint is not connected

Это уже в iptables и маршрутизации. Если вы задали clientportoptions, то исходящие соединения пойдут с этого ip, и соотв обратно на этот ip должны идти. Если все в старом варианте работало, то при задании clientportoptions вообще ничего не надо было делать ни с iptables ни с маршрутизацией.