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

Исходное сообщение
"Почтовик, default gw и два провайдера"

Отправлено zabudkin , 26-Мрт-08 07:00 
Коллеги, прошу помощи! Имеем локальную сеть (eth0) и двух провайдеров (eth1, eth1:1).
PS: адреса ip естественно изменены.

---------------------------------------------------------------------
#!/bin/sh
IF0=eth0   #локалка
IF1=eth1   #будет именем первого интерфейса
IF2=eth1:1 #-- именем второго.
IP0=192.168.4.31 #локальный IP
IP1=8.2.5.11     #будет IP адресом $IF1
IP2=9.16.1       #-- IP адресом $IF2
P0=192.168.4.10  #шлюз локалки
P1=8.2.5.9       #это IP-адрес шлюза провайдера 1
P2=9.16.1.190    #-- IP адрес шлюза провайдера 2
P0_NET=192.168.0.0/16 #сеть локалки
P1_NET=8.2.5.0/29     #это IP сеть, к которой принадлежит $P1
P2_NET=9.16.1.0/30    #-- сеть, к которой принадлежит $P2 .

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2

ip route add $P0_NET     dev $IF0 table T1
ip route add $P1_NET     dev $IF1 src $IP1
ip route add $P2_NET     dev $IF2 table T1
ip route add 127.0.0.0/8 dev lo   table T1
ip route add $P0_NET     dev $IF0 table T2
ip route add $P1_NET     dev $IF1 table T2
ip route add $P2_NET     dev $IF2 src $IP2
ip route add 127.0.0.0/8 dev lo   table T2

ip route add default via $P2

ip rule add from $IP1 table T1
ip rule add from $IP2 table T2

route add default gw 9.16.1.190
route add -net 8.2.5.0/29 gw 8.2.5.9
iptables -t nat -A POSTROUTING -p tcp -s 192.168.4.31 -o eth1 -j SNAT --to-source 8.2.5.11
iptables -t nat -A POSTROUTING -p tcp -s 127.0.0.1 -o eth1 -j SNAT --to-source 8.2.5.11
iptables -t nat -A POSTROUTING -s 127.0.0.1 -j RETURN
iptables -t nat -A POSTROUTING -s 192.168.4.31 -j RETURN
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1 -j SNAT --to-source 9.16.1.189
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1:1 -j SNAT --to-source 9.16.1.189
ip rule add fwmark 2 table T1

---------------------------------------------------------------------

Почему-то почтовик всё равно отсылает через дефолтовый шлюз 9.16.1.190 с адреса 9.16.1.189, а не с адреса 8.2.5.11 через шлюз 8.2.5.9.

Уже все мозги выел, ну не понимаю почему не работает.


Содержание

Сообщения в этом обсуждении
"Почтовик, default gw и два провайдера"
Отправлено stas , 26-Мрт-08 09:41 
>[оверквотинг удален]
>iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1:1 -j SNAT --to-source
>9.16.1.189
>ip rule add fwmark 2 table T1
>
>---------------------------------------------------------------------
>
>Почему-то почтовик всё равно отсылает через дефолтовый шлюз 9.16.1.190 с адреса 9.16.1.189,
>а не с адреса 8.2.5.11 через шлюз 8.2.5.9.
>
>Уже все мозги выел, ну не понимаю почему не работает.

Попробуйте:
ip rule add from 192.168.4.31 table T1


"Почтовик, default gw и два провайдера"
Отправлено psj , 26-Мрт-08 16:32 
>Почему-то почтовик всё равно отсылает через дефолтовый шлюз 9.16.1.190 с адреса 9.16.1.189,
>а не с адреса 8.2.5.11 через шлюз 8.2.5.9.
>
>Уже все мозги выел, ну не понимаю почему не работает.

Неделю с этим боролся - сегодня победил!
Пришлось мозги править заново, т.к. тоже кипели не по детски.
Единственное НО: я делал на FreeBSD и pf.
В pf.conf добавил такое:
#
#Блокируем все исходящие smtp-запросы которые к левым серверам
#
block in log quick on $int_if proto { tcp, udp } from $net to !<my_smtp> port { $tcp_block_int }
# Пускаем почту на почтовый сервер
#
pass out quick on $ext_if_b reply-to ($ext_if_a $ext_gw_a) proto {tcp, udp} from any port { $tcp_mail } to any port { $tcp_mail }
pass out quick on $ext_if_b route-to ($ext_if_a $ext_gw_a) proto {tcp, udp} from any port { $tcp_mail } to any port { $tcp_mail }
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto {tcp, udp} to $mail_server port { $tcp_mail } flags S/SA keep state

Почта стала ходить только через $ext_gw_a, хотя $ext_gw_b является шлюзом по умолчанию


"к 'Стаданию о `двух провайдерах`'"
Отправлено Andrey Mitrofanov , 26-Мрт-08 17:02 
>Коллеги, прошу помощи! Имеем локальную сеть (eth0) и двух провайдеров (eth1, eth1:1).
>Уже все мозги выел, ну не понимаю почему не работает.

Проблема """сводится к "Стаданию о `двух провайдерах`" [точнее о двух default gateway-ях?], исполняемому в форуме регулярно, два раза в неделю на все голоса...""". На cisco, freebsd, gnu/linux-е...

GNU/Linux версию читайте в трактате "За двумя провайдерами или..." на страницах нашего... http://www.opennet.me/openforum/vsluhforumID10/3679.html#3


"к 'Страданию о `двух провайдерах`'"
Отправлено zabudkin , 27-Мрт-08 08:55 
И? Каналы настроены. Проблема с почтой, а не с двумя провайдерами.

"Кто дятел?! Я дятел?? "
Отправлено Andrey Mitrofanov , 27-Мрт-08 11:39 
>И? Каналы настроены.

$SUBJ Если и, то не я один...

> Проблема с почтой, а не с двумя провайдерами.

Свои заклинаня с _работающими_ заклинаниями сравнивать не пробовал? А вдруг?!

>---------------------------------------------------------------------
>#!/bin/sh
>IF0=eth0   #локалка
>IF1=eth1   #будет именем первого интерфейса
>IF2=eth1:1 #-- именем второго.

iptables _не_ различает интерфейс и его алиасы. Интерфейс один, на нём несколько адресов. В ip, вероятно, так же. В "тех других" рецептах их различают по src или gw ip, afaiu.

>[оверквотинг удален]
>P0=192.168.4.10  #шлюз локалки
>P1=8.2.5.9       #это IP-адрес шлюза провайдера 1
>
>P2=9.16.1.190    #-- IP адрес шлюза провайдера 2
>P0_NET=192.168.0.0/16 #сеть локалки
>P1_NET=8.2.5.0/29     #это IP сеть, к которой принадлежит $P1
>
>P2_NET=9.16.1.0/30    #-- сеть, к которой принадлежит $P2 .
>
>ip route add $P1_NET dev $IF1 src $IP1 table T1

Локально доступные на интерфейсах сетки роутятся и так, "по умолчанию". imho, эти правила не нужны.(1)

>ip route add default via $P1 table T1
>ip route add $P2_NET dev $IF2 src $IP2 table T2

(1)+1

>ip route add default via $P2 table T2
>ip route add $P0_NET     dev $IF0 table T1
>ip route add $P1_NET     dev $IF1 src $IP1
>ip route add $P2_NET     dev $IF2 table T1

(1)+2+3+4  //"три правила выше"
>ip route add 127.0.0.0/8 dev lo   table T1

(1)+5 "default via $P1 table T1" не смущает?

>ip route add $P0_NET     dev $IF0 table T2
>ip route add $P1_NET     dev $IF1 table T2
>ip route add $P2_NET     dev $IF2 src $IP2

Вы ходите кругами и перебираете _все_ комбинации всех параметров, а уж оно _должно_само_ заработать? "Пересечение" с тремя правилами чуть выше не смущает? Нет? Ну, пойдём дальше.

>ip route add 127.0.0.0/8 dev lo   table T2

Дежавю?

>ip route add default via $P2

Продолжаем "перебирать всё"?

>ip rule add from $IP1 table T1
>ip rule add from $IP2 table T2

О ЧУУУДО! Строки из правильного заклинания.

>route add default gw 9.16.1.190

Как, ещё default? Так надёжнее! Точно! Чем больше напишешь, тем скорее хоть что-то заработает!

>route add -net 8.2.5.0/29 gw 8.2.5.9

Роутим локальную сетку через gw? Да, и такая комбинация букофф возможна... В комбинаторике.

>iptables -t nat -A POSTROUTING -p tcp -s 192.168.4.31 -o eth1 -j
>SNAT --to-source 8.2.5.11
>iptables -t nat -A POSTROUTING -p tcp -s 127.0.0.1 -o eth1 -j
>SNAT --to-source 8.2.5.11

Ой!

>iptables -t nat -A POSTROUTING -s 127.0.0.1 -j RETURN
>iptables -t nat -A POSTROUTING -s 192.168.4.31 -j RETURN
>iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1 -j SNAT --to-source
>9.16.1.189
>iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1:1 -j SNAT --to-source
>9.16.1.189

Во-первых, "-o eth1:1" не работает. А во-вторых, чего бы это пакеты для локалки на eth0 делали бы на eth1? А-а-а, "волшебный" роутинхх... Я что-то пропустил.

>ip rule add fwmark 2 table T1

А где "-j MARK --set-mark 2"?