Коллеги, прошу помощи! Имеем локальную сеть (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 T2ip 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 T2ip route add default via $P2
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2route 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.
Уже все мозги выел, ну не понимаю почему не работает.
>[оверквотинг удален]
>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
>Почему-то почтовик всё равно отсылает через дефолтовый шлюз 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 является шлюзом по умолчанию
>Коллеги, прошу помощи! Имеем локальную сеть (eth0) и двух провайдеров (eth1, eth1:1).
>Уже все мозги выел, ну не понимаю почему не работает.Проблема """сводится к "Стаданию о `двух провайдерах`" [точнее о двух default gateway-ях?], исполняемому в форуме регулярно, два раза в неделю на все голоса...""". На cisco, freebsd, gnu/linux-е...
GNU/Linux версию читайте в трактате "За двумя провайдерами или..." на страницах нашего... http://www.opennet.me/openforum/vsluhforumID10/3679.html#3
И? Каналы настроены. Проблема с почтой, а не с двумя провайдерами.
>И? Каналы настроены.$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"?