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

Тоже pf и 2 провайдера...

Добавлено: 2008-09-14 19:25:38
Yanis
Вступление. :st:

Имеется 2 провайдера.
Хочется, чтобы пользователи локалки имели НАТ через vr0,
а для некоторых адресов - через rl0.
Локалка - sk0

/etc/rc.conf

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

ifconfig_sk0="inet 192.168.5.1  netmask 255.255.255.0"

ifconfig_rl0_alias0="inet x.y.z.162 netmask 255.255.255.248"
ifconfig_rl0_alias1="inet x.y.z.163 netmask 255.255.255.248"
ifconfig_rl0_alias2="inet x.y.z.164 netmask 255.255.255.248"

ifconfig_vr0="inet 10.230.204.21 netmask 255.255.255.0"

defaultrouter="10.230.204.1"

#static_routes="one two"
#route_one="-net x1.y1.z1.97/27 x.y.z.161"
#route_two="-net x2.y2.z2.97/29 x.y.z.161"
/etc/pf.conf. Все работает, если разкомментировать статические роуты в rc.conf
С route-to, reply-to я запутался окончательно и удалил все, чтобы не пудрить вам мозги

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

#!/bin/sh

table <nursat> {x1.y1.z1.97/27, x2.y2.z2.97/29}

set block-policy drop
set skip on lo0
scrub in all fragment reassemble

int_if="sk0"
ext_nursat="rl0"
ext_xcom="vr0"

rdr on $int_if inet proto tcp from $int_if:network to any port 80 -> 127.0.0.1 port 3128
nat on $ext_nursat from $int_if:network to <nursat> tag NURSAT -> ($ext_nursat)
nat on $ext_xcom from $int_if:network to any -> ($ext_xcom)

pass in on $int_if inet proto tcp from any to 127.0.0.1 port 3128 keep state
pass out on $ext_xcom inet proto tcp from any to any keep state

pass in all
pass out all

Re: Тоже pf и 2 провайдера...

Добавлено: 2008-09-14 20:32:53
Yanis
Пытаюсь распутаться сам. В rc.conf никаких статических роутов нет.

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

#!/bin/sh

table <nursat> persist file "/etc/pf.nursat"

set block-policy drop
set skip on lo0
scrub in all fragment reassemble

int_if="sk0"
ext_nursat="rl0"
ext_xcom="vr0"

rdr on $int_if inet proto tcp from $int_if:network to any port 80 -> 127.0.0.1 port 3128
nat on $ext_nursat from $int_if:network to <nursat> tag NURSAT -> ($ext_nursat)
nat on $ext_xcom from $int_if:network to !<nursat> tag XCOM -> ($ext_xcom)

pass in all
pass out all

pass in on $int_if inet proto tcp from any to 127.0.0.1 port 3128 keep state
pass out on $ext_xcom inet proto tcp from any to any tagged XCOM keep state

pass in reply-to ($ext_nursat x.y.z.161) tagged NURSAT keep state
pass out on $ext_nursat route-to ($ext_nursat x.y.z.161) tagged NURSAT keep state
Теперь пинги в сети <nursat> однозначно не проходят.
Запустил tcpdump, и вижу эхо реквесты на карте vr0, т.е. проблема в правиле pass out on $ext_nursat - маршрут не создался

Re: Тоже pf и 2 провайдера...

Добавлено: 2008-09-15 8:46:53
uderik
route-to надо ставить на входящем внутреннем интерфейсе, где у тебя приходят пакеты с внутренних адресов, а на внешнем интерфейсе должны быть правила reply-to. И в таблице маршрутизации должен быть дефаулт маршрут иначе пакеты будут отбрасываться no route to host не доходя до файрвола, хотяб route add default 127.0.0.1.

Re: Тоже pf и 2 провайдера...

Добавлено: 2008-09-15 8:57:42
uderik
Вот так, только что проверил работает
nat on extIF0 inet from 192.168.11.4 to 194.87.0.50 -> xx.xx.89.6
pass in quick on intIF0 route-to (extIF0 xx.xx.89.1) inet from 192.168.11.4 to 194.87.0.50 flags S/SA keep state

Re: Тоже pf и 2 провайдера...

Добавлено: 2008-09-16 19:55:59
Yanis
uderik писал(а):pass in quick on intIF0 route-to (extIF0 xx.xx.89.1) inet from 192.168.11.4 to 194.87.0.50 flags S/SA keep state
Действительно работает, хотя логика не очень понятна.
Спасибо, пошел маны перечитывать )

Re: Тоже pf и 2 провайдера...

Добавлено: 2008-09-16 20:39:16
uderik
Yanis писал(а):
uderik писал(а):pass in quick on intIF0 route-to (extIF0 xx.xx.89.1) inet from 192.168.11.4 to 194.87.0.50 flags S/SA keep state
Действительно работает, хотя логика не очень понятна.
Спасибо, пошел маны перечитывать )
Вполне понятна логика, пакет у вас приходит на внутреннем интерфейсе и согласно таблице маршрутизации уходит на внешний интерфейс. ПФ перехватывает его на входе и отправляет в нужный интерфейс.

Re: Тоже pf и 2 провайдера...

Добавлено: 2009-01-13 11:40:34
Yanis
Теперь провайдеров до конца месяца стало 3 :)
2 безлимита и 1 по трафику.
Все работает кроме аськи, то она молча виснет на подключении, то "Превышен лимит подключений". Хотя я ее сети давно завернул на прова "По трафику" как самого надежного
Помогите разобраться, текущий pf.conf такой:

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

#!/bin/sh

table <nursat> persist file "/etc/pf.nursat"
table <xcom2> persist file "/etc/pf.xcom"

set block-policy drop
set skip on lo0
scrub in all fragment reassemble

int_if="re0"
ext_nursat="rl0"
ext_megaline="tun0"
ext_xcom="re1"

nat on $ext_nursat from any to any -> ($ext_nursat)
nat on $ext_xcom from any to any -> ($ext_xcom)
nat on $ext_megaline from any to any -> ($ext_megaline)

pass in quick on $int_if route-to ($ext_nursat 213.x.y.233) inet from any to <nursat> keep state
pass in quick on $ext_nursat route-to ($ext_nursat 213.x.y.233) inet from any to <nursat> keep state
pass in quick on $int_if route-to ($ext_xcom 10.230.112.1) inet from any to <xcom> keep state
pass in quick on $ext_xcom route-to ($ext_xcom 10.230.112.1) inet from any to <xcom> keep state

pass in quick on $int_if route-to {($ext_xcom 10.230.112.1), ($ext_megaline 82.200.178.1)} round-robin from $int_if:network to !$int_if:network keep state

pass out quick on $ext_nursat route-to ($ext_nursat 213.x.y.233) inet from 213.x.y.234 to any keep state
pass out quick on $ext_xcom route-to ($ext_xcom 10.230.112.1) from $ext_xcom to any keep state

pass in all
pass out all
Ну и pf.nursat

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

...
#icq
64.12.0.0/16
205.188.0.0/16
152.163.0.0/24
...
Шлюз по умолчанию смотрит в экст_мегалайн