URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 79088
[ Назад ]

Исходное сообщение
"хочу чтоб нат работал через PF а шейпер через IPFW"

Отправлено alex , 05-Мрт-08 11:06 
Всем привет
ситуация такая хочу чтоб нат работал через PF а шейпер через IPFW
как правильно реализовать эту схему поделитесь опытом плизз

Содержание

Сообщения в этом обсуждении
"хочу чтоб нат работал через PF а шейпер через IPFW"
Отправлено mishgun , 05-Мрт-08 17:09 
>Всем привет
>ситуация такая хочу чтоб нат работал через PF а шейпер через IPFW
>
>как правильно реализовать эту схему поделитесь опытом плизз

У меня эта схема работает для PPPoE. На сервере стоят ipfw (для шейпинга) и pf (для NAT) как и сказано. Все просто:

rc.conf:

  ...

  # IPFW
  firewall_enable="YES"
  firewall_script="/etc/rc.firewall"
  firewall_type="CUSTOM"
  ...

  # pf used for NAT
  pf_enable="YES"            # Set to YES to enable packet filter (pf)
  pf_rules="/etc/pf.conf"        # rules definition file for pf
  ...

в rc.firewall стандартные настройки файерволла, а правила для шейпинга сосздаются/удаляются при подключении/отключении каждого клиента скриптами if-up и if-down, в которых соответственно выполняются коммадны:

  ipfw pipe 5000 config bw 128kb/sec queue 20 # создает пайп для пользователя
  ipfw add 5000 pipe 5000 all from 192.168.1.100 to any # засовывает трафик от пользователя с ip 192.168.1.100 в его пайп.
  Здесь номер правила может отличаться от номера пайпа, это я просто для примера

  соответственно когда пользователь отключается говорим:
  
  ipfw pipe delete 5000
  ipfw delete 5000

pf.conf
  nat on $ext_if from $internal_net to any -> $external_addr
  
  $ext_if - интерфейс, смотрящий наружу (="fxp0")
  $int_if - интерфейс, смотрящий на клиентов (="fxp1")
  $internal_net - клиетнская сеть (="192.168.1.0/24")

Единственное с чем не разбирался - кто отрабатывает первым ipfw или pf. По сути, это не принципиально и все работает нормально.