PF: настройка policy routing

Ответить
admin
Администратор
Сообщения: 198
Зарегистрирован: 05 янв 2011, 04:19

PF: настройка policy routing

Сообщение admin »

http://wiki.bsdportal.ru/index.php/PF:_ ... cy_routing

Настройка policy routing

В данной статье рассматривается тот случай, когда на сервере имеется два сетевых интерфейса через которые, в зависимости от тех или иных обстоятельств, будет идти трафик в интернет.
PF

Теперь pf, привожу кусок моего конфига: (в данном случае возможно придется настроить обычную маршрутизацю, в зависимости от поставленной задачи)

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

#Внешние и внутренний интерфейсы.
#
ext_if_a        = "rl0" #первый провайдер
ext_if_b        = "rl1" #второй провайдер
int_if          = "rl2" #локалка
#Шлюзы для каналов.
#
ext_gw_a        = "10.10.10.254" #для tun0
ext_gw_b        = "20.20.20.254" #для tun1
net             = "30.30.30.0/24" #локалка
#TCP/UDP сервисы, обслуживаемые маршрутизатором, то к чему имеется доступ на внешних интерфейсах
#
tcp_svc         = "990" #как пример, что то нужно вписать иначе будет биг ошибка :)
udp_svc         = "6000" #аналогично
#Натим, важный момент, именно тут определяется кого куда пускать
#Синтаксис ната, грубо говоря, таков: nat on _интерфейс_ from _откуда_ to _куда_ -> _интерфейс_или_ип_адрес
#
nat on $ext_if_a from {$net} -> ($ext_if_a:0)
nat on $ext_if_b from {$net} -> ($ext_if_b:0)
#Разрешаем сети ходить в интернет, всё остальное блокируем
#
block in on { $ext_if_a $ext_if_b }
block return-rst in on { $ext_if_a $ext_if_b } proto tcp
pass out on { $ext_if_a $ext_if_b } keep state
#Исходящие пакеты в канал, соответствующий адресу источника. Здесь и начинается policy
#
pass out route-to ($ext_if_a $ext_gw_a) from ($ext_if_a) to !(self:network) \
keep state
pass out route-to ($ext_if_b $ext_gw_b) from ($ext_if_b) to !(self:network) \
keep state
#А вот policy для входящих пакетов на внешние интерфейсы
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto udp \
to port { $udp_svc } keep state
pass in on $ext_if_a proto udp from ($ext_if_a:network) to port { $udp_svc } \
keep state
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp \
to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_a proto tcp from ($ext_if_a:network) to port { $tcp_svc } \
flags S/SA keep state
#
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto udp \
to port { $udp_svc } keep state
pass in on $ext_if_b proto udp from ($ext_if_b:network) to port { $udp_svc } \
keep state
#
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto tcp \
to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_b proto tcp from ($ext_if_b:network) to port { $tcp_svc } \
flags S/SA keep state
Ответить