pf + 2 внешних канала

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
maxd
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-07-02 14:16:01
Откуда: Великий Новгород
Контактная информация:

pf + 2 внешних канала

Непрочитанное сообщение maxd » 2009-07-02 14:57:00

Дано:
freebsd 7.0 + pf в ядре
2 канала в инет лимитный (isp) и безлимитый (adsl).
adsl поднимается как ppp -ddial adsl
pf.conf:

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

# первый провайдер
isp_if="rl0"
isp_gw="10.10.10.1"

# второй провайдер
adsl_if="tun0"
adsl_gw="78.x.x.1" # он же дефлотовый маршрут

# локалка
lan_if="rl1"
lan_ip="192.168.1"

# внутренние ресурсы провайдера isp
table <isp_nets> { 88.x.x.x/16, 81.x.x.x/16 }

# юзеры, которые будут ходить через isp
table <isp_users> { $lan_ip.2, $lan_ip.3, $lan_ip.4, $lan_ip.5 }

# юзеры, которые будут ходить через adsl
table <adsl_users> { $lan_ip.100, $lan_ip.101 }

set block-policy drop
set skip on lo0
scrub in

nat on $adsl_if from $lan_if:network to <isp_nets> -> ($isp_if)
nat on $adsl_if from <isp_users> to !$lan_if:network -> ($isp_if)
nat on $adsl_if from $lan_if:network to !$lan_if:network -> ($adsl_if)
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr on $lan_if proto tcp from $lan_if:network to !$lan_if:network port 21 -> 127.0.0.1 port 8021

block log all

anchor "ftp-proxy/*"

pass out quick on $adsl_if route-to ($isp_if $isp_gw) from $isp_if to any
pass out on $adsl_if
pass out on $isp_if

pass in on $lan_if proto tcp from $lan_if:network to $lan_if port 22
pass in on $lan_if from { <adsl_users>,<isp_users> } to !$lan_if:network
При такой конфигурации все работает, но инет через провайдера isp жутко тормозит, даже внутренние ресурсы. Пришлось положить adsl и ходить пока только через isp при такой конфигурации:

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

# провайдер
isp_if="rl0"
isp_gw="10.10.10.1"

# локалка
lan_if="rl1"
lan_ip="192.168.1"

# юзеры, которым разрешен инет
table <isp_users> { $lan_ip.2, $lan_ip.3, $lan_ip.4, $lan_ip.5, $lan_ip.100, $lan_ip.101 }

set block-policy drop
set skip on lo0
scrub in

nat on $isp_if from $lan_if:network to !$lan_if:network -> ($isp_if)
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr on $lan_if proto tcp from $lan_if:network to !$lan_if:network port 21 -> 127.0.0.1 port 8021

block log all

anchor "ftp-proxy/*"

pass out on $isp_if
pass in on $lan_if proto tcp from $lan_if:network to $lan_if port 22
pass in on $lan_if from <users> to !$lan_if:network
Так инет работает без тормозов.
Как сделать, чтоб вместе они работали как надо?

Хостинговая компания 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/

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: pf + 2 внешних канала

Непрочитанное сообщение schizoid » 2009-07-02 15:11:06

попробуй добавить

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

#-----------------------------------------Scrub-------------------------------------------------------------------
scrub in all fragment reassemble
scrub    on { $ext_if_d $ext_if_s } all reassemble tcp
scrub out all random-id max-mss 1440
ядерный взрыв...смертельно красиво...жаль, что не вечно...

maxd
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-07-02 14:16:01
Откуда: Великий Новгород
Контактная информация:

Re: pf + 2 внешних канала

Непрочитанное сообщение maxd » 2009-07-02 15:24:16

не помогло

AzureZ
мл. сержант
Сообщения: 124
Зарегистрирован: 2007-11-06 17:07:27
Откуда: Москва

Re: pf + 2 внешних канала

Непрочитанное сообщение AzureZ » 2009-07-02 15:58:27

А это не опечатка случаем?
nat on $adsl_if from $lan_if:network to <isp_nets> -> ($isp_if)
nat on $adsl_if from <isp_users> to !$lan_if:network -> ($isp_if)

maxd
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-07-02 14:16:01
Откуда: Великий Новгород
Контактная информация:

Re: pf + 2 внешних канала

Непрочитанное сообщение maxd » 2009-07-02 17:15:27

AzureZ писал(а):А это не опечатка случаем?
nat on $adsl_if from $lan_if:network to <isp_nets> -> ($isp_if)
nat on $adsl_if from <isp_users> to !$lan_if:network -> ($isp_if)
Нет, здесь все верно. Дефолтовый маршрут - adsl и в таблице дополнительно ничего не прописано, поэтому тут мы натим на интерфейсе $adsl_if и подставляем адрес $isp_if и далее правилом отправляем эти пакеты нужным маршрутом:

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

pass out quick on $adsl_if route-to ($isp_if $isp_gw) from $isp_if to any

AzureZ
мл. сержант
Сообщения: 124
Зарегистрирован: 2007-11-06 17:07:27
Откуда: Москва

Re: pf + 2 внешних канала

Непрочитанное сообщение AzureZ » 2009-07-02 18:37:00

А понял. Т.е маршрут вы меняете после ната. А почему не до ната? (Сори за офотоп)

maxd
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-07-02 14:16:01
Откуда: Великий Новгород
Контактная информация:

Re: pf + 2 внешних канала

Непрочитанное сообщение maxd » 2009-07-03 9:47:20

оффтоп - не оффтоп, но я переписал правила и стал перенаправлять до трансляции, т.е. при входе на локальный интерфейс и инет побежал веселее.

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

# до этого все без изменений
nat on $adsl_if from $lan_if:network to !$lan_if:network -> ($adsl_if)
nat on $isp_if from $lan_if:network to !$lan_if:network -> ($isp_if)
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr on $lan_if proto tcp from $lan_if:network to !$lan_if:network port 21 -> 127.0.0.1 port 8021

block log all

anchor "ftp-proxy/*"

pass out on $adsl_if
pass out on $isp_if

pass in on $lan_if proto tcp from $lan_if:network to $lan_if port 22

pass in on $lan_if from <isp_users> to !$lan_if:network tag TO_ISP
pass in on $lan_if from { <isp_users>,<adsl_users> } to <isp_nets> tag TO_ISP
pass in on $lan_if from <adsl_users> to !$lan_if:network

pass in on $lan_if route-to ($isp_if $isp_gw) tagged TO_ISP
Можно и не метить, а сразу route-to, но тут приведен упрощенный набор, поэтому оно пригодится. Мне кажется написание правил немного усложнилось, но зато работает как надо. В общем - моя проблема решена, спасибо за наводку :smile:

AzureZ
мл. сержант
Сообщения: 124
Зарегистрирован: 2007-11-06 17:07:27
Откуда: Москва

Re: pf + 2 внешних канала

Непрочитанное сообщение AzureZ » 2009-07-03 9:56:07

Можно сети провайдера и статически прописать.

maxd
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-07-02 14:16:01
Откуда: Великий Новгород
Контактная информация:

Re: pf + 2 внешних канала

Непрочитанное сообщение maxd » 2009-07-03 11:16:26

Можно, но при потере связи с этим провом, нужно будет снова править таблицу маршрутизации и подгрузить новые правила pf, а так только правила. Мне показалось проще это сделать в одном месте.
Кстати, есть 2 фтп сервера внутри сети прова, к которым нужно прописывать статичный маршрут, ибо фтп-прокси лезет через дефолтовый маршрут, даже с опцией -a <адрес на карте, смотрящей в сторону этого провайдера>. Правило

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

pass out quick on $adsl_if route-to ($isp_if $isp_gw) from $isp_if to any
еще как-то пыталось пинками вытолкнуть его пакеты по идущие по 21 порту, но, как показывает tcpdump, следующие пакеты по 20 порту идут уже по другому каналу. С этим я уже смрился.

Аватара пользователя
iZEN
ст. лейтенант
Сообщения: 1089
Зарегистрирован: 2007-09-15 16:45:26
Контактная информация:

Re: pf + 2 внешних канала

Непрочитанное сообщение iZEN » 2009-07-03 18:45:46

maxd писал(а):Можно, но при потере связи с этим провом, нужно будет снова править таблицу маршрутизации и подгрузить новые правила pf, а так только правила. Мне показалось проще это сделать в одном месте.
Кстати, есть 2 фтп сервера внутри сети прова, к которым нужно прописывать статичный маршрут, ибо фтп-прокси лезет через дефолтовый маршрут, даже с опцией -a <адрес на карте, смотрящей в сторону этого провайдера>. Правило

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

pass out quick on $adsl_if route-to ($isp_if $isp_gw) from $isp_if to any
еще как-то пыталось пинками вытолкнуть его пакеты по идущие по 21 порту, но, как показывает tcpdump, следующие пакеты по 20 порту идут уже по другому каналу. С этим я уже смрился.
не надо указывать defaultrouter в /etc/rc.conf. Путь PF сам занимается маршрутизацией трафика.
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix