The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Трансляция PPTP (GRE) на шлюзе с PF
Как известно, межсетевой экран PF, портированный в FreeBSD из OpenBSD, не может
корректно транслировать (NAT) GRE-протокол и, к примеру, из локальной сети
невозможно создать несколько одновременных соединений к внешнему серверу VPN PPTP.

Одним из способов решения проблемы является трансляция PPTP-соединений родным
IPFW с "ядерным" NAT. При этом вовсе необязательно компилировать ядро. Все
описанные действия проверены в FreeBSD версии 7.2. Но должно работать и в
других версиях, где есть поддержка "ядерного" NAT для IPFW.

В /etc/rc.conf добавляем

   #Включаем IPFW
   firewall_enable="YES"
   # Подгружаем модуль ядра ipfw_nat
   firewall_nat_enable="YES"
   # Указываем путь к скрипту загрузки правил
   firewall_script="/etc/ipfw.script"

Создаем файл /etc/ipfw.script

   #!/bin/sh
   
   /sbin/ipfw -q /dev/stdin <<RULES
   flush
   #em0 - внешний интерфейс шлюза
   nat 10 config if em0
   #Правила для трансляции PPTP-соединения
   add 10 nat 10 gre from any to any
   add 11 nat 10 tcp from any to any dst-port pptp
   add 12 nat 10 tcp from any pptp to any
   # Разрешаем весь трафик
   add allow all from any to any
  
   RULES

Делаем скрипт исполняемым

   # chmod +x /etc/ipfw.script

Добавляем в правила PF

   # Запрещаем PF транслировать PPTP-соединения
   no nat on $external_if proto gre all
   no nat on $external_if proto tcp from any to any port = pptp
   no nat on $external_if proto tcp from any port = pptp to any
   ... skip ...
   
   # Пропускаем PPTP-соединения
   pass quick on $external_if inet proto tcp from any to any port 1723
   pass quick on $external_if inet proto tcp from any port 1723 to any
   pass quick on $external_if inet proto gre from any to any

После всех сделанных изменений перезагружаемся.
 
11.12.2009 , Автор: Князь , Источник: http://www.propheta.ru/2009/11/pptp...
Ключи: pf, firewall, ipfw, freebsd
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетный фильтр в FreeBSD: ipfw, IP-Filter

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Aquarius (ok), 14:24, 12/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > После всех сделанных изменений перезагружаемся.

    наследие off-topic?

     
     
  • 2.3, Аноним (-), 20:33, 12/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >> После всех сделанных изменений перезагружаемся.
    >
    >наследие off-topic?

    Скорее - это привычка перестраховщика при правке /etc/rc.conf, не желающего чтобы его будили в 3 ночи или вызвали из отпуска из-за того, что после внеплановой перезагрузки что-то не поднялось как нужно.

     

  • 1.2, Добрый Дохтур (?), 15:23, 12/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    опять же, почему просто не использовать ipfw вместо pf?
     
  • 1.4, Анонимный (?), 23:10, 12/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Потому что ipfw не нужен.
     
     
  • 2.7, Дядюшка Ляо (?), 00:14, 13/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Потому что ipfw не нужен.

    Работающий только на одном cpu pf не нужен.

    http://forum.nag.ru/forum/index.php?showtopic=47497

     
  • 2.10, Дядюшка Ляо (?), 04:15, 13/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Потому что ipfw не нужен.

    в догонку: http://forum.nag.ru/forum/index.php?showtopic=49812

     
     
  • 3.14, iZEN (ok), 15:08, 14/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Над комментариями пользователей IPFW относительно PF я плакал.
     
     
  • 4.16, Дядюшка Ляо (?), 10:14, 15/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    дадада!

    я тоже плакал, но над наивностью тех, кто повелся на syntax sugar от pf:

    >Добавлю свои пять копеек. :-) В свое время тоже повелся на pf (как же - написанный с нуля файрволл от команды OpenBSD!), однако отсутствие динамических пайпов по маскам не позволяло использовать его как шейпер - был pf на файрволл и нат и dummynet на шейп. В итоге с увеличением количества юзеров и полосы (3500+ и около 200-250 Мбит) все начало конкретно тормозить, что выливалось в потерю пакетиков. Сделал профилирование через hwpmc (кто не в курсе - http://wiki.freebsd.org/PmcTools)  чего, кстати, желаю и всем остальным, кто хочет поближе узнать, чем занят комп в то время, которое в top'е обозначается как interrupt и т.п. :-) Так вот, в итоге выяснилось, что nat от pf - это такая жручая штука, что лучше потратить время и сделать адекватный набор правил для ipfw, чем насиловать систему этим pf.... Более подробно я писал об этом в этой теме - http://forum.nag.ru/forum/index.php?showtopic=47497

    В итоге на основе личного опыта могу сказать, что pf - это действительно быстрый и удобный (пару строчек написать!) способ ненапряжно отфайрволлить/отнатить/зашейпить, например, офис. Или квартиру. Но для серьезной провайдерской работы он не годится принципиально. :-) ipfw - наше все! И с годами становится все лучше и лучше...


    От себя добавлю: на стенде у меня получалась та же самая картина.
    Резко появляются дропы, всё начинает тормозить, при этом загружено только одно ядро.
    PS: да и размер правила у pf огромный - где-то 500байт.

     

  • 1.11, shurik (??), 11:49, 14/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    http://shurik.kiev.ua/blog/index.php?/archives/9-FreeBSD_i_GRE.html
    +камент
     
  • 1.12, abigor (?), 12:51, 14/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    народ, а у меня работает, у меня отдел бухов весь долбится для отправки платежек по pptp в банки. Чего я не так желаю?
     
  • 1.13, Аноним (-), 14:26, 14/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Немного не по теме, но может кто подскажет... Почему через D'Link'овский PPPoE роутер может пролезть только два конекта на внешний PPTP сервак? При подключении третьего кого-нибудь отрубает :(
     
  • 1.17, Анонимный Анонимус (?), 12:10, 22/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Странно, но у меня на FreeBSD 7.2-p5 amd64 при включенном PF, это не работает - к одному и тому же внешнему IP с двух "серых" адресов из локалки может подключиться только один, другим выдает Error 800. Пришлось вернуться к "костылю" с Frickin'ом. А жаль.
     
     
  • 2.18, Alexander (??), 22:37, 18/10/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А у меня на 7 3 frickin не работает Клиенту что-то не нравится в ответе сервера... большой текст свёрнут, показать
     

  • 1.19, Дуров (?), 10:50, 01/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    добавьте правило в PF

    pass proto 47 all keep state

     
     
  • 2.20, iZEN (ok), 16:05, 01/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > добавьте правило в PF
    > pass proto 47 all keep state

    "keep state" уже не обязательно — оно и так по дефолту у правил, если возможно, выставляется. //К.О.

     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру