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

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
VVEBER
проходил мимо
Сообщения: 7
Зарегистрирован: 2008-03-25 8:48:05

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

Непрочитанное сообщение VVEBER » 2008-03-26 15:20:54

Имеется:

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

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


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

Спасибо

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

VVEBER
проходил мимо
Сообщения: 7
Зарегистрирован: 2008-03-25 8:48:05

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

Непрочитанное сообщение VVEBER » 2008-03-30 12:05:10

А ларчик просто открывался:

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

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