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

Исходное сообщение
"NAT на двух провайдерских линках FreeBSD/pf"

Отправлено VVEBER , 27-Мрт-08 14:30 
Имеется:

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, как будто и не было никакого НАТа.


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

Спасибо


Содержание

Сообщения в этом обсуждении
"NAT на двух провайдерских линках FreeBSD/pf"
Отправлено Andrew Kolchoogin , 27-Мрт-08 16:39 
>pass out quick on $prov2 route-to ( $prov1 $prov1_gw ) from $prov1_ip
>to any keep state

pass out quick on $prov1 route-to

Невнимательность?


"NAT на двух провайдерских линках FreeBSD/pf"
Отправлено VVEBER , 28-Мрт-08 14:46 
>>pass out quick on $prov2 route-to ( $prov1 $prov1_gw ) from $prov1_ip
>>to any keep state
>
>pass out quick on $prov1 route-to
>
>Невнимательность?

Поменял на Ваш вариант. Одна фигня, говорит "заданный узел недоступен" и опять на интерфейсе нет даже намека на пакет.


"NAT на двух провайдерских линках FreeBSD/pf"
Отправлено VVEBER , 30-Мрт-08 13:03 
А ларчик просто открывался:

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.me/openforum/vsluhforumID1/79497.html