
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