Страница 1 из 1

NAT на двух провайдерских линках

Добавлено: 2008-03-26 15:20:54
VVEBER
Имеется:

Код: Выделить всё

sysserver# uname -rs
FreeBSD 5.4-RELEASE
Интерфейс re0=192.168.1.10 - смотрит в локалку
Интерфейс re1=10.10.10.10 - 1-ый провайдер ( gw 10.10.10.1 )
Интерфейс rl0=192.168.2.2 - 2-ой провайдер ( gw 192.168.2.1 )

default gw = 192.168.2.1 ( второй линк провайдерский )
________________________________________________________

пользователи из сети 192.168.1.0/24 ходят в Интернет через NAT:

Код: Выделить всё

#cat /etc/pf.conf 
lansn="192.168.1.0/24"
lan="re0"
prov1="re1"
prov2="rl0"
lan_ip="192.168.1.10"
prov1_ip="10.10.10.10"
prov2_ip="192.168.2.2"
prov1_gw="10.10.10.1"
prov2_gw="192.168.2.1"

nat on $prov2 from { 192.168.1.14/32, 192.168.1.15/32 } to any -> $prov2_ip 

block all

pass in on $lan from { 192.168.1.14/32, 192.168.1.15/32 } to any keep state
pass out on $lan from any to { 192.168.1.14/32, 192.168.1.15/32 } keep state
pass out on $prov1 from $prov1_ip to any
pass in quick on $prov1 reply-to ( $prov1 $prov1_gw ) keep state
pass out on $prov2 from $prov2_ip to any


В таком варианте работает всё. Пробую пустить двух других пользователей через другой канал:

Код: Выделить всё

#cat /etc/pf.conf 
lansn="192.168.1.0/24"
lan="re0"
prov1="re1"
prov2="rl0"
lan_ip="192.168.1.10"
prov1_ip="10.10.10.10"
prov2_ip="192.168.2.2"
prov1_gw="10.10.10.1"
prov2_gw="192.168.2.1"

nat on $prov2 from { 192.168.1.14/32, 192.168.1.15/32 } to any -> $prov2_ip 
nat on $prov1 from { 192.168.1.20/32, 192.168.1.21/32 } to any -> $prov1_ip

block all

pass in on $lan from { 192.168.1.14/32, 192.168.1.15/32, 192.168.1.20/32, 192.168.1.21/32  } to any keep state
pass out on $lan from any to { 192.168.1.14/32, 192.168.1.15/32, 192.168.1.20/32, 192.168.1.21/32 } keep state

pass out on $prov1 from $prov1_ip to any
pass in quick on $prov1 reply-to ( $prov1 $prov1_gw ) keep state
pass out quick on $prov2 route-to ( $prov1 $prov1_gw ) from $prov1_ip to any keep state
pass out on $prov2 from $prov2_ip to any

И в результате таких переделок получаю, что при попытке с ип 192.168.1.20 (который должен уйти через 1-го провайдера, по идее) шлюз отвечает, что заданный узел недоступен. В то время, как через второй линк люди продолжают успешно работать.

Код: Выделить всё

tcpdump -ni re1 | grep 192.168.1.20
молчит

Попробовал сделать следующую пакость:
вместо

Код: Выделить всё

pass out quick on $prov2 route-to ( $prov1 $prov1_gw ) from $prov1_ip to any keep state
поставить:

Код: Выделить всё

pass out quick on $prov2 route-to ( $prov1 $prov1_gw ) from 192.168.1.20/32 to any keep state

изменилось следующее: сообщений "заданный узел недоступен" клиент перестал получать и tcpdump увидел пакеты, адресованные через $prov1, но src_add был неNATed, а 192.168.1.20, как будто и не было никакого НАТа.


Подскажите пожалуйста, как с этим бороться, и сделать НАТ по двум интерфейсам ?

Спасибо

Re: NAT на двух провайдерских линках

Добавлено: 2008-03-30 12:05:10
VVEBER
А ларчик просто открывался:

Код: Выделить всё

nat on $prov2 from { 192.168.1.14/32, 192.168.1.15/32 } to any -> $prov2_ip
nat on $prov2 from { 192.168.1.20/32, 192.168.1.21/32 } to any -> $prov1_ip
_____________________

Код: Выделить всё

pass out quick on $prov2 route-to ( $prov1 $prov1_gw ) from $prov1_ip to any keep state
Проблему удалось разрешить благодаря статье: http://www.opennet.ru/openforum/vsluhfo ... 79497.html