NAT за 2 минуты (pf во FreeBSD)

NAT (Network Address Translation) с помощью pf (packet filter) организовать не просто, а очень просто. Описано в хендбуке все и, в отличии от меня, очень полно. Пишу потому, что разные люди с завидным постоянством спрашивают об этом, так что проще один раз написать. Итак в первую очередь надо включить pf. Для этого в /etc/rc.conf вписываем:

#Для работы NAT-a обязательно должно быть включено

gateway_enable="YES"

# Запуск pf

pf_enable="YES"

#Желательно, но не обязательно добавить логирование pf

pflog_enable="YES"

Таким образом, мы включаем pf как модуль. Можно и вкомпилировать в ядро, тогда надо будет добавить в опции ядра:

device pf

device pflog

device pfsync

В любом случае, после либо с включением как модуль, либо с компиляцией систему лучше перезагрузить:

root@localhost# shutdown -r now

Правила фаервола находятся в /etc/pf.conf, можно конечно поменять директивой в rc.conf типа pf_rules="/etc/pf.conf.new". Для включения NAT надо отредактировать совсем чуть-чуть:

#Внешний интерфейс

ext_if="em0"

#Внутренний интерфейс

int_if="rl1"

#Наша сеть

internal_net="192.168.0.0/24"

#Внешний IP

external_addr="195.196.197.198"

#И надо просто раскомментировать строчку, которая уже заботливо написана:

nat on $ext_if from internal_net to any -> ($ext_if)

Всё! Это все что нужно сделать чтобы появился NAT! Единственное что еще осталось - это заставить pf перечитать правила:

root@localhost# pfctl -f /etc/pf.conf

No ALTQ support in kernel

ALTQ related functions disabled

root@localhost#

Правила применились, на то, что pf ругается на ALTQ - можно не обращать внимания, он просто предупреждает, что ядро скомпилировано без поддержки ALTQ, потому функции ALTQ работать не будут. Но нам пока это не грозит, поэтому просто проверям - работает ли NAT?

http://www.ounix.ru/index.php?page=article&id=22

Обновлено: 12.03.2015