Всем привет. Такая проблема:
Есть локалка и машина с линухом шлюз. В локалке стоит почтовый сервер, на него проброшены порты со шлюза. К шлюзу приходят два разных провайдера. Задача сделать так, чтобы траффик ходил по обоим каналам одновременно, т.е. на почту можно было бы попасть по обоим каналам.Использовал для этого iproute2. Проблема в том, что приходящие пакеты доходят до почтовика, он отвечает, но в обратку дальше шлюза не уходят.
Вот конфиг:
#!/bin/sh
#T1="akado"
T2="2kom"IP1="83.167.102.XXX"
IP2="195.98.184.XXX"IF_LOCAL="eth0"
IF1="eth2"
IF2="eth1"NET_LOCAL="192.168.1.0/24"
NET1="83.167.102.XXX/24"
NET2="195.98.184.XXX/30"GW1="83.167.102.YYY"
GW2="195.98.184.YYY"ip route flush table $T1
ip route flush table $T2#для akado
ip route add $NET1 dev $IF1 table $T1
ip route add $NET_LOCAL dev $IF_LOCAL table $T1
ip route add "127.0.0.0/8" dev "lo" table $T1
ip route add $NET2 dev $IF2 table $T1
ip route add default via $GW1 dev $IF1 table $T1#для 2kom
ip route add $NET2 dev $IF2 table $T2
ip route add $NET1 dev $IF1 table $T2
ip route add $NET_LOCAL dev $IF_LOCAL table $T2
ip route add "127.0.0.0/8" dev "lo" table $T2
ip route add default via $GW2 dev $IF2 table $T2ip route add $NET1 dev $IF1 src $IP1 table $T1
ip route add $NET2 dev $IF2 src $IP2 table $T2ip rule delete table $T1
ip rule delete table $T1
ip rule delete table $T2
ip rule delete table $T2ip rule add from $NET1 table $T1
ip rule add from $NET2 table $T2ip rule add table 221
ip route add default table 221 proto static \
nexthop via $GW1 dev $IF1 \
nexthop via $GW2 dev $IF2ip route flush cache
exit 0
-A PREROUTING -p tcp -m tcp --dport 2525 -j DNAT --to-destination 192.168.1.254
-A PREROUTING -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.254
-A PREROUTING -p tcp -m tcp --dport 143 -j DNAT --to-destination 192.168.1.254
-A PREROUTING -p tcp -m tcp --dport 110 -j DNAT --to-destination 192.168.1.254
-A POSTROUTING -s 192.168.1.0/24 -o eth2 -j SNAT --to-source 83.167.102.XXX
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 195.98.184.XXX
обратный траффик почтовика попадает в первое правило
> -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j SNAT --to-source 83.167.102.XXX
> -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 195.98.184.XXXна почтовике поднять второй ip адрес, поставить слушать нужные сервисы
и сделать чтото вроде> -A POSTROUTING -s MAIL_SECOND_IP -o eth1 -j SNAT --to-source 195.98.184.XXX
> -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j SNAT --to-source 83.167.102.XXX
> обратный траффик почтовика попадает в первое правило
>> -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j SNAT --to-source 83.167.102.XXX
>> -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 195.98.184.XXX
> на почтовике поднять второй ip адрес, поставить слушать нужные сервисы
> и сделать чтото вроде
>> -A POSTROUTING -s MAIL_SECOND_IP -o eth1 -j SNAT --to-source 195.98.184.XXX
>> -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j SNAT --to-source 83.167.102.XXXНичего не изменилось, также пакеты не уходят в обратку. Кроме того нужно еще на один локальный ip пробрасывать с обоих каналов rdp.
http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml
> http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtmlСпасибо. Навело на правильные мысли. Решил следующим образом.
Мало ли кому понадобится.
В итоге по 2 каналам доступна почта, терминал и веб-сервер.
Скрипт:
#!/bin/bashIF1=eth1
IF2=eth2
IP2=83.167.102.XXX
IP1=195.98.184.XXX
P2=83.167.102.YYY
P1=195.98.184.YYY
P2_NET=83.167.102.ZZZ/24
P1_NET=195.98.184.ZZZ/30ip 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 rule add fwmark 2 table T2
ip rule add prio 202 from $P2_NET table T2ip route flush cache
Дефолтный gw P1 прописан в таблице main.Правила в iptables:
iptables -t mangle -A PREROUTING -i eth0 -m state --state ESTABLISHED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -p tcp --dport 25 -d 83.167.102.XXX -j CONNMARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp --dport 2525 -d 83.167.102.XXX -j CONNMARK --set-mark 2Аналогично добавляем правила по портам, которые нужны.
ip ru sh
0: from all lookup local
202: from 83.167.102.xxx/24 lookup T2
32765: from all fwmark 0x2 lookup T2
32766: from all lookup main
32767: from all lookup default