Имеется: 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, как будто и не было никакого НАТа.
Подскажите пожалуйста, как с этим бороться, и сделать НАТ по двум интерфейсам ?
Спасибо