FreeBSD, pf

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
pf, два провайдера, пустить трафик по резервному провайдеру.
проходил мимо

FreeBSD, pf

Непрочитанное сообщение pf, два провайдера, пустить трафик по резервному провайдеру. » 2009-05-14 9:56:48

Имеется два провайдера, первый дефолный и является шлюзом по умолчанию. Второй в общем резервный и загружен на ~10% суть в том, что на шлюзе надо часть исходящего трафика по определенным портам отправить в этот канал.
pf.conf имеет следующий вид:

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

pass in quick reply-to ($ext_if_a $ext_gw_a) tagged EXT_IF_A keep state
pass in quick reply-to ($ext_if_b $ext_gw_b) tagged EXT_IF_B keep state

pass out route-to ( $ext_if_a $ext_gw_a ) inet from ($ext_if_a) keep state
pass out route-to ( $ext_if_b $ext_gw_b ) inet from ($ext_if_b) keep state

pass in all
pass out all
В общем этого должно быть достаточно. пробую

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

telnet -s 195.x.x.200  ya.ru 80
Смотрю через tcpdump, что исходящий трафик прет через основного провайдера. хотя должен через второго. Убил уже весь мозг, может кто-то чего-то подскажет?

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

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: FreeBSD, pf

Непрочитанное сообщение zingel » 2009-05-14 10:00:21

весь конфиг и меняйте ник
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Re: FreeBSD, pf

Непрочитанное сообщение Abigor » 2009-05-14 10:13:47

мля не обратил внимание что не зашел на форум :)

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

#--- /etc/pf.conf

ext_if_a        = "xl0"
ext_gw_a        = "195.46.x.193"

ext_if_b        = "msk1"
ext_gw_b        = "195.206.x.129"

int_if          = "msk0"

set skip on lo0
scrub in

pass in quick reply-to ($ext_if_a $ext_gw_a) tagged EXT_IF_A keep state
pass in quick reply-to ($ext_if_b $ext_gw_b) tagged EXT_IF_B keep state

pass out route-to ( $ext_if_a $ext_gw_a ) inet from ($ext_if_a) keep state
pass out route-to ( $ext_if_b $ext_gw_b ) inet from ($ext_if_b) keep state

pass in all
pass out all
Вот весь конфиг, на данный момент. Так сказать упрощенный шаблон на котором пробую.

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

Re: FreeBSD, pf

Непрочитанное сообщение iZEN » 2009-05-14 19:41:50

Насчёт балансировки трафика между двумя каналами есть статья в журнале "Системный администратор" №2(51)'2007, но там в основном про IPFW. Однако автор всё же обмолвился и про PF.
Алгоритм балансировки трафика round-robin между двумя каналами на PF:

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

pass in on ed0 route-to { (rl0 10.0.1.1), (rl1 10.1.1.1) } round-robin from 192.168.0.0/24 to any keep state
здесь: ed0 — внутренний интерфейс, смотрящий на клиентов; rl0 и rl1 — внешние интерфейсы, смотрящие на провайдеров; 10.0.1.1 — адрес шлюза провайдера А; 10.1.1.1 — адрес шлюза провайдера Б; 192.168.0.0/24 — локальная сеть.
Этим правилом входящий трафик на внутреннем интерфейсе (т.е. исходящий для пользователей) будет распределяться между интерфейсами rl0 и rl1 с соответствующими шлюзами по алгоритму round-robin (то есть внешний интерфейс будет меняться циклически — первое соединение будет использовать rl0, второе — rl1, третье — снова rl0 и так далее). Опция keep state сохраняет состояние, благодаря чему все пакеты в рамках одного соединения будут использовать один и тот же шлюз. В итоге нагрузка будет распределяться между двумя каналами — нельзя сказать, что трафик поделится абсолютно поровну, но при рассмотрении за большой период времени можно считать, что балансировка будет приближаться к этому.
Для решения проблемы привязки соединений клиента к определённому IP-адресу, которое требуется для некоторых серверов (а в данном случае каждое новое соединение от одного и того же клиента к определённому серверу будет проходить с большой вероятностью через разные маршруты/интерфейсы), нужно использовать опцию sticky-address в правиле nat или route-to. Чтобы распределять трафик между интерфейсами в определённой пропорции в правиле PF нужно использовать опцию probability.
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

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

Re: FreeBSD, pf

Непрочитанное сообщение iZEN » 2009-05-15 0:23:25

Попробуй:

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

#--- /etc/pf.conf

ext_if_a        = "xl0"
ext_gw_a        = "195.46.x.193"

ext_if_b        = "msk1"
ext_gw_b        = "195.206.x.129"

int_if          = "msk0"

set skip on lo0
scrub in all

block all
pass in on $int_if  route-to { ($ext_if_a $ext_gw_a), ($ext_if_b $ext_gw_b) } round-robin from $int_if:network to any keep state
pass out all
Последний раз редактировалось iZEN 2009-05-15 1:02:08, всего редактировалось 2 раза.
GNU/Linux — это не Unix и даже никогда им не был, и, что самое смешное, никогда им не станет — GNU's Not Unix

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Re: FreeBSD, pf

Непрочитанное сообщение Abigor » 2009-05-15 7:12:16

iZEN, спасибо, только это мне не поможет, так как балансировку мне делать как раз не надо, мне надо если удаленный порт скажем 80 то пустить его по резервному каналу. а весь остальной трафик пусть идет основного провайдера.

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Re: FreeBSD, pf

Непрочитанное сообщение Abigor » 2009-05-15 10:22:02

Блин, как не смешно, все разрешилось тем что был конфликт ip адресов, такой же ip использовался на втором шлюзе, соответственно провайдер это дело резал

Аватара пользователя
Dorlas
сержант
Сообщения: 257
Зарегистрирован: 2008-07-18 22:17:49

Re: FreeBSD, pf

Непрочитанное сообщение Dorlas » 2009-05-15 10:39:32

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

pass in quick on $if_lan route-to ($if_adsl $router_adsl) inet proto tcp from $if_lan/24 to !$if_lan/24 port 5190
Пример - вся работа ICQ идет через второй канал :)

Аватара пользователя
Abigor
старшина
Сообщения: 425
Зарегистрирован: 2006-03-02 11:13:15
Откуда: РФ. г. Иркутск
Контактная информация:

Re: FreeBSD, pf

Непрочитанное сообщение Abigor » 2009-05-15 11:05:54

угу, так и делал, только не работало. Выше отписал почему, сейчас уже все завилось