FreeBSD + pf + два провайдера + VPN pptp в DMZ

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Jeque
рядовой
Сообщения: 45
Зарегистрирован: 2009-01-23 12:28:33

FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение Jeque » 2013-03-08 16:48:47

Схема такая:

Изображение

Шлюз, раздающий интернет для локальной сети через двух провайдеров. Всё настроено на базе FreeBSD+pf.
Теперь понадобилось сделать VPN-шлюз, для доступа в локальную сеть извне. VPN-шлюз решено было расположить на отдельной машине в DMZ. На VPN-шлюзе настроен mpd5 (pptp).
Проблема в следующем. VPN доступ работает только через первого (основного) провайдера. Путём анализа сетевого трафика выяснилось, что протокол gre маршрутизируется назад к vpn-клиенту только через основной шлюз. Направить его на второго провайдера что-то не получается.
Вот часть pf.conf:

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

...
rdr on $ext_if_1 proto tcp from any to $ext_if_1 port pptp tag EXT_PPTP_1 -> $vpnsrv port pptp
rdr on $ext_if_2 proto tcp from any to $ext_if_2 port pptp tag EXT_PPTP_2 -> $vpnsrv port pptp
rdr on $ext_if_1 proto gre from any to $ext_if_1 tag EXT_GRE_1 -> $vpnsrv
rdr on $ext_if_2 proto gre from any to $ext_if_2 tag EXT_GRE_2 -> $vpnsrv
...
pass in quick from ($ext_if_1:network) tagged EXT_PPTP_1 keep state
pass in quick reply-to ($ext_if_1 $gw_1) tagged EXT_PPTP_1 keep state
pass in quick from ($ext_if_1:network) tagged EXT_GRE_1 keep state
pass in quick reply-to ($ext_if_1 $gw_1) tagged EXT_GRE_1 keep state

pass in quick from ($ext_if_2:network) tagged EXT_PPTP_2 keep state
pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_PPTP_2 keep state
pass in quick from ($ext_if_2:network) tagged EXT_GRE_2 keep state
pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_GRE_2 keep state
...
pass on $dmz_if proto gre from any to any
gre-трафик приходит на vpn-шлюз через второго провайдера, а возвращается в интернет через первого. Если подключаться через первого провайдера, то всё работает.
Подскажите, в чём ошибка.

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

Jeque
рядовой
Сообщения: 45
Зарегистрирован: 2009-01-23 12:28:33

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение Jeque » 2013-03-09 13:08:27

Поэксперементировал с правилами.

Вот такая конструкция с SSH прекрасно работает:

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

rdr on $ext_if_1 inet proto tcp to ($ext_if_1) port 22222 tag EXT_IF_1 -> $vpnsrv port ssh
rdr on $ext_if_2 inet proto tcp to ($ext_if_2) port 22222 tag EXT_IF_2 -> $vpnsrv port ssh

pass in quick from ($ext_if_1:network) tagged EXT_IF_1
pass in quick reply-to ($ext_if_1 $gw_1) tagged EXT_IF_1
pass in quick from ($ext_if_2:network) tagged EXT_IF_2
pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_IF_2
А вот это с pptp никак:

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

rdr on $ext_if_1 inet proto tcp to ($ext_if_1) port pptp tag EXT_PPTP_1 -> $vpnsrv port pptp
rdr on $ext_if_2 inet proto tcp to ($ext_if_2) port pptp tag EXT_PPTP_2 -> $vpnsrv port pptp

rdr on $ext_if_1 inet proto gre to ($ext_if_1) tag EXT_GRE_1 -> $vpnsrv
rdr on $ext_if_2 inet proto gre to ($ext_if_2) tag EXT_GRE_2 -> $vpnsrv

pass in quick from ($ext_if_1:network) tagged EXT_PPTP_1
pass in quick reply-to ($ext_if_1 $gw_1) tagged EXT_PPTP_1
pass in quick from ($ext_if_2:network) tagged EXT_PPTP_2
pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_PPTP_2

pass in quick from ($ext_if_1:network) tagged EXT_GRE_1
pass in quick reply-to ($ext_if_1 $gw_1) tagged EXT_GRE_1
pass in quick from ($ext_if_2:network) tagged EXT_GRE_2
pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_GRE_2
Сам pptp без проблем роутится и на первого и на второго провайдера, а вот gre упорно возвращается маршрутом по умолчанию (т.е. через 1-го провайдера).
Причём, если посмотреть на то, что показывает pftop, то видно, что правило "pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_GRE_2" вроде как отрабатывает:

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

pfTop: Up Rule 1-37/126, View: rules, Cache: 10000                                                                                  14:04:22

RULE  ACTION   DIR LOG Q IF     PR        K     PKTS    BYTES   STATES   MAX INFO
   0  Pass     In      Q                  K        0        0        0       from (ext0) to any  flags S/SA tagged EXT_PPTP_1
   1  Pass     In      Q                  K        0        0        0       reply-to ... inet all  flags S/SA tagged EXT_PPTP_1
   2  Pass     In      Q                  K        0        0        0       from (ext1) to any  flags S/SA tagged EXT_PPTP_2
   3  Pass     In      Q                  K      120    10320        5       reply-to ... inet all  flags S/SA tagged EXT_PPTP_2
   4  Pass     In      Q                  K        0        0        0       from (ext0) to any  flags S/SA tagged EXT_GRE_1
   5  Pass     In      Q                  K        0        0        0       reply-to ... inet all  flags S/SA tagged EXT_GRE_1
   6  Pass     In      Q                  K        0        0        0       from (ext1) to any  flags S/SA tagged EXT_GRE_2
   7  Pass     In      Q                  K       30     1710        2       reply-to ... inet all  flags S/SA tagged EXT_GRE_2
В чём у меня ошибка? Или, может быть, gre вообще так роутить не получится, и я зря мучаюсь?

Jeque
рядовой
Сообщения: 45
Зарегистрирован: 2009-01-23 12:28:33

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение Jeque » 2013-03-09 20:57:53

Похоже, что проблема нерешаема. Вот цитата из мана:

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

reply-to
           The reply-to option is similar to route-to, but routes packets that
           pass in the opposite direction (replies) to the specified inter-
           face.  Opposite direction is only defined in the context of a state
           entry, and reply-to is useful only in rules that create state.  It
           can be used on systems with multiple external connections to route
           all outgoing packets of a connection through the interface the
           incoming connection arrived through (symmetric routing enforce-
           ment).
Насколько я понимаю, из этого текста следует, что reply-to работает только с пакетами, на которые выставлены стейты, а стейты работают только с протоколами tcp, udp и icmp. Для gre - облом.

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

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение mak_v_ » 2013-03-09 22:23:36

gre работает поверх tcp-ip
quick приберите в нужных местах, потому как не будут проверяться "ниже"

Jeque
рядовой
Сообщения: 45
Зарегистрирован: 2009-01-23 12:28:33

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение Jeque » 2013-03-09 22:43:06

Где у меня лишний quick? По выводу pftop видно, что правило pass in quick reply-to ($ext_if_2 $gw_2) tagged EXT_GRE_2 срабатывает, но в нём не работает именно reply-to, т.к. gre-пакеты уходят на шлюз по умолчанию.

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

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение mak_v_ » 2013-03-09 22:50:12

где именно у Вас - не иею ни малейшего желания разобраться. Где-то на старой работе было подобное. Ишите в правилах фаервола

Jeque
рядовой
Сообщения: 45
Зарегистрирован: 2009-01-23 12:28:33

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение Jeque » 2013-03-09 23:48:48

Тогда почему правила с теми же самыми "квиками" прекрасно работают для SSH?
Но вы лучше скажите, вы уверены, что reply-to должно работать для протокола GRE или это только ваше предположение?

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

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение mak_v_ » 2013-03-09 23:52:49

читайте мои ответы внимательно. На старой работе был впн-сервер в дмз. Но точно не помню по поводу reply-to\route-to

Jeque
рядовой
Сообщения: 45
Зарегистрирован: 2009-01-23 12:28:33

Re: FreeBSD + pf + два провайдера + VPN pptp в DMZ

Непрочитанное сообщение Jeque » 2013-03-10 14:08:51

mak_v_ писал(а):читайте мои ответы внимательно. На старой работе был впн-сервер в дмз.
Вы, видимо, тоже невнимательно читаете. VPN-сервер в DMZ у меня прекрасно работает, но только через основного провайдера.