Страница 1 из 1
pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-13 22:46:17
desp
Добрый день уважаемые. Имеем сервер с 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 получше будет...
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-14 13:42:53
Dark_ASU
Нормально pf + altq шейпит. а по схеме в чем проблема сделать так
nat on $em0 from $vlan1 to any -> ($em0) и т.д.
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-14 17:10:35
desp
А со шлюзами как поступить? Надо что бы через свои шлюзы ходило.
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-14 21:49:46
Dark_ASU
По поводу шлюзов не понял как-то поподробней можно желательно с схемкой сети.
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-14 22:26:50
desp
Два провайдера, соответственно два шлюза от них. В rc.conf прописан только один(default) роут. Как сделать что бы в фаерволле пакеты ходили по своим шлюзам? route-to? Можно какой нить пример?
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-16 11:42:33
skeletor
Насколько мне известно, то route-to не работает во FreeBSD (вроде бы в 9-ке типа обновили pf, но касательно этой опции не уверен). Вместо него можно применять reply-to. Вот как я делал
http://skeletor.org.ua/?p=1263
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-16 22:08:51
suspender
Уже больше года нормально работает конфа вида
Код: Выделить всё
...
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 и читай - там все разжевано.
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-16 22:45:08
desp
Код: Выделить всё
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
Не работает

((
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-16 23:06:49
suspender
ещё бы оно работало ...
Код: Выделить всё
...
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 к пакету применяется последнее подходящее правило)
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-17 0:04:39
desp
Вроде что то пошуршало, щас правда в логах tcpdump одни Refused- 0/0/0 и 2+ A? от адресов dns серверов провайдера...
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-17 0:12:58
Dark_ASU
А вообще если два канала от разных провайдеров я бы динамическую маршрутизацию крутил.
Re: pf nat + 2 провадера + vlan'ы
Добавлено: 2012-01-17 0:22:53
Гость
Огромнейшее спасибо suspender. Все прекрасно заработало, проблема dns была в простой перезагрузке роутера клиента...