pf nat + 2 провадера + vlan'ы

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

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

pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение desp » 2012-01-13 22:46:17

Добрый день уважаемые. Имеем сервер с FreeBsd 8.2 на борту, ядро собрано с поддержкой pf (для nat) и ipfw ( для шейпинга), имеются 3-и сетевые карты: bge0 - локальная сеть поделенная на 6 vlan (1 управл., 5 подсетей), em0 - один провайдер, em1 - второй провайдер. Нужно сделать nat vlan1+vlan3 на em0 и vlan2+vlan4+vlan5 на em1. Сначало делал балансировку round-robin - но это жесть, которая покарала меня сайтами со скачкой по IP. Подскажет кто адекватные правила отправки пакетов по схеме? Все с виду просто, но с pf к несчастью не работал. Заранее сильно благодарен.
P.S.
Как там насчет шейпинга на pf + altq? Пару лет назад говорили, что не стоит использовать и ipfw получше будет...
Последний раз редактировалось f_andrey 2012-01-14 22:44:01, всего редактировалось 1 раз.
Причина: Автору, выбирайте пожалуйста раздел соответствуюший тематике вашего сообщения. приводите полную диагностику, больше логов больше вероятности ответа, а не флуда

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

Dark_ASU
сержант
Сообщения: 258
Зарегистрирован: 2009-10-31 22:13:04
Контактная информация:

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение Dark_ASU » 2012-01-14 13:42:53

Нормально pf + altq шейпит. а по схеме в чем проблема сделать так
nat on $em0 from $vlan1 to any -> ($em0) и т.д.

desp
проходил мимо

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение desp » 2012-01-14 17:10:35

А со шлюзами как поступить? Надо что бы через свои шлюзы ходило.

Dark_ASU
сержант
Сообщения: 258
Зарегистрирован: 2009-10-31 22:13:04
Контактная информация:

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение Dark_ASU » 2012-01-14 21:49:46

По поводу шлюзов не понял как-то поподробней можно желательно с схемкой сети.

desp
проходил мимо

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение desp » 2012-01-14 22:26:50

Два провайдера, соответственно два шлюза от них. В rc.conf прописан только один(default) роут. Как сделать что бы в фаерволле пакеты ходили по своим шлюзам? route-to? Можно какой нить пример?

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение skeletor » 2012-01-16 11:42:33

Насколько мне известно, то route-to не работает во FreeBSD (вроде бы в 9-ке типа обновили pf, но касательно этой опции не уверен). Вместо него можно применять reply-to. Вот как я делал http://skeletor.org.ua/?p=1263

suspender
сержант
Сообщения: 160
Зарегистрирован: 2007-11-19 10:47:09

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение suspender » 2012-01-16 22:08:51

Уже больше года нормально работает конфа вида

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

...
nat on $ifSp1 from <nat_isp1> to any -> ($ifSp1)
nat on $ifSp2 from <nat_isp2> to any -> ($ifSp2)
...
pass in on $ifLan route-to ($ifSp1 $gwSp1) inet from <nat_isp1> to any
pass in on $ifLan route-to ($ifSp2 $gwSp2) inet from <nat_isp2> to any
...
в

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

[root@gw /]# uname -a
FreeBSD gw.tkor.loc 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Sat Mar 19 12:33:14 MSK 2011     root@gw.tkor.loc:/usr/obj/usr/src/sys/D4  amd64
[root@gw /]# 
так что нормально route-to работает.
а reply-to это для того, чтобы сервисы отвечали через те шлюзы, с которых приходит запрос.

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

#------    sshd
pass in quick on $ifSp2 reply-to ($ifSp2 $gwSp2) inet proto tcp from any to $ifSp2 port 16322 keep state
pass in quick on $ifSp1 reply-to ($ifSp1 $gwSp1) inet proto tcp from any to $ifSp1 port 16322 keep state
Вот это например чтобы sshd на обоих ip был доступен. Без этих правил ответный пакет всегда будет уходить через default gw нулевой таблицы маршрутизации.

ps. в 8-й фре вроде как pf как в openbsd 4.3 - так что бери официальную доку по pf от openbsd 4.3 и читай - там все разжевано.

desp
проходил мимо

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение desp » 2012-01-16 22:45:08

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

ext_if_a="em0"
ext_gw_a="шлюз"
ext_if_b="em1"
ext_gw_b="шлюз2"
int_if101="vlan101"
int_if102="vlan102"
int_if103="vlan103"
int_if104="vlan104"
int_if105="vlan105"

nat on $ext_if_a from $int_if101 to any -> ($ext_if_a)
nat on $ext_if_a from $int_if103 to any -> ($ext_if_a)
nat on $ext_if_b from $int_if102 to any -> ($ext_if_b)
nat on $ext_if_b from $int_if104 to any -> ($ext_if_b)
nat on $ext_if_b from $int_if105 to any -> ($ext_if_b)

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:0 keep state
pass out route-to ( $ext_if_b $ext_gw_b ) inet from $ext_if_b:0 keep state
Не работает :-(((

suspender
сержант
Сообщения: 160
Зарегистрирован: 2007-11-19 10:47:09

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение suspender » 2012-01-16 23:06:49

ещё бы оно работало ...

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

...
nat on $ext_if_a from $int_if101:network to any -> ($ext_if_a)
nat on $ext_if_a from $int_if103:network to any -> ($ext_if_a)
nat on $ext_if_b from $int_if102:network to any -> ($ext_if_b)
nat on $ext_if_b from $int_if104:network to any -> ($ext_if_b)
nat on $ext_if_b from $int_if105:network to any -> ($ext_if_b)

block all

pass in on $int_if101 route-to ($ext_if_a $ext_gw_a) inet from $int_if101:network to any
pass in on $int_if103 route-to ($ext_if_a $ext_gw_a) inet from $int_if103:network to any
pass in on $int_if102 route-to ($ext_if_b $ext_gw_b) inet from $int_if102:network to any
pass in on $int_if104 route-to ($ext_if_b $ext_gw_b) inet from $int_if104:network to any
pass in on $int_if105 route-to ($ext_if_b $ext_gw_b) inet from $int_if105:network to any 

# Ну и что то типа
pass out on $ext_if_a from $ext_if_a to any
pass out on $ext_if_b from $ext_if_b to any
Так должно работать.
Ну а дальше можно упрощать. Например сгруппировав сети по таблицам.

Ну и соответственно добавив рулежку межвиланным траффиком в конец. (в pf к пакету применяется последнее подходящее правило)

desp
проходил мимо

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение desp » 2012-01-17 0:04:39

Вроде что то пошуршало, щас правда в логах tcpdump одни Refused- 0/0/0 и 2+ A? от адресов dns серверов провайдера...

Dark_ASU
сержант
Сообщения: 258
Зарегистрирован: 2009-10-31 22:13:04
Контактная информация:

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение Dark_ASU » 2012-01-17 0:12:58

А вообще если два канала от разных провайдеров я бы динамическую маршрутизацию крутил.

Гость
проходил мимо

Re: pf nat + 2 провадера + vlan'ы

Непрочитанное сообщение Гость » 2012-01-17 0:22:53

Огромнейшее спасибо suspender. Все прекрасно заработало, проблема dns была в простой перезагрузке роутера клиента...