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

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Yanis
рядовой
Сообщения: 23
Зарегистрирован: 2008-08-15 16:53:36

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

Непрочитанное сообщение Yanis » 2008-09-14 19:25:38

Вступление. :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

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Yanis
рядовой
Сообщения: 23
Зарегистрирован: 2008-08-15 16:53:36

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

Непрочитанное сообщение Yanis » 2008-09-14 20:32:53

Пытаюсь распутаться сам. В 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 - маршрут не создался

uderik
рядовой
Сообщения: 35
Зарегистрирован: 2007-10-24 12:15:47

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

Непрочитанное сообщение uderik » 2008-09-15 8:46:53

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

uderik
рядовой
Сообщения: 35
Зарегистрирован: 2007-10-24 12:15:47

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

Непрочитанное сообщение uderik » 2008-09-15 8:57:42

Вот так, только что проверил работает
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

Yanis
рядовой
Сообщения: 23
Зарегистрирован: 2008-08-15 16:53:36

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

Непрочитанное сообщение Yanis » 2008-09-16 19:55:59

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
Действительно работает, хотя логика не очень понятна.
Спасибо, пошел маны перечитывать )

uderik
рядовой
Сообщения: 35
Зарегистрирован: 2007-10-24 12:15:47

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

Непрочитанное сообщение uderik » 2008-09-16 20:39:16

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
Действительно работает, хотя логика не очень понятна.
Спасибо, пошел маны перечитывать )
Вполне понятна логика, пакет у вас приходит на внутреннем интерфейсе и согласно таблице маршрутизации уходит на внешний интерфейс. ПФ перехватывает его на входе и отправляет в нужный интерфейс.

Yanis
рядовой
Сообщения: 23
Зарегистрирован: 2008-08-15 16:53:36

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

Непрочитанное сообщение Yanis » 2009-01-13 11:40:34

Теперь провайдеров до конца месяца стало 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
...
Шлюз по умолчанию смотрит в экст_мегалайн