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

Исходное сообщение
"Проблема с iproute2"

Отправлено Alex , 24-Июн-11 11:15 
Всем привет. Такая проблема:
Есть локалка и машина с линухом шлюз. В локалке стоит почтовый сервер, на него проброшены порты со шлюза. К шлюзу приходят два разных провайдера. Задача сделать так, чтобы траффик ходил по обоим каналам одновременно, т.е. на почту можно было бы попасть по обоим каналам.Использовал для этого 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 $T2  

ip route add $NET1 dev $IF1 src $IP1 table $T1
ip route add $NET2 dev $IF2 src $IP2 table $T2

ip rule delete table $T1
ip rule delete table $T1
ip rule delete table $T2
ip rule delete table $T2

ip rule add  from $NET1 table $T1
ip rule add  from $NET2 table $T2

ip rule add  table 221
ip route add default table 221 proto static \
            nexthop via $GW1 dev $IF1   \
            nexthop via $GW2 dev $IF2

ip 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


Содержание

Сообщения в этом обсуждении
"Проблема с iproute2"
Отправлено djaarf , 24-Июн-11 15:52 
обратный траффик почтовика попадает в первое правило
> -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


"Проблема с iproute2"
Отправлено Alex , 25-Июн-11 12:12 
> обратный траффик почтовика попадает в первое правило
>> -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.


"Проблема с iproute2"
Отправлено PavelR , 25-Июн-11 13:27 
http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml

"Проблема с iproute2"
Отправлено Alex , 30-Июн-11 00:37 
> http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml

Спасибо. Навело на правильные мысли. Решил следующим образом.
Мало ли кому понадобится.
В итоге по 2 каналам доступна почта, терминал и веб-сервер.
Скрипт:
#!/bin/bash

IF1=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/30

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 rule add fwmark 2 table T2
ip rule add prio 202 from $P2_NET table T2

ip 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