Проект переехал на новый домен!  [[ перейти ]]

divert/natd

Демон natd является процессом, то есть он работает не в пространстве ядра, 
а в пространстве пользователя. Поэтому, для обработки демоном трафик должен 
копироваться из ядра в пространство пользователя и обратно 
Это несколько уменьшает производительность.

По умолчанию в статье я использую закрытый фаирвол:
------------------------------------------------------------------
options	IPFIREWALL_DEFAULT_TO_ACCEPT	; allow ip from any to any
------------------------------------------------------------------

чтобы это дело заработало нужно:
1. либо в ядров вкомпилить: options IPWIREWALL 
			    options IPDIVERT
2. либо подгрузить динамически модули ipfw.ko и ipdivert.ko

Далее:
1. в /etc/rc.conf должно быть: gateway_enable=YES
2. или: sysctl net.inet.ip.forwarding=1

По умолчанию natd использует порт 8668, который можно переназначить.
Можно посмотреть в /etc/services

Дальше настройки демона natd:
sh# ee /etc/natd.conf
--------------------------
use_sockets yes
same_ports yes
unregistered_only yes
interface fxp0
--------------------------

Запуск демона
sh# natd -f /etc/natd.conf

хотя конфигурационный файл можно и не создавать и указать 
всё в одной строке запуска, приблизительно так:
sh# natd -s -m -u -n fxp0

И в ipfw разрешаем хождение пакетов таким образом:
-------------------------------------------------------------------
#!/bin/sh

#fxp0 - интерфейс на котором крутится NAT (наш внешний интерфейс)
#xl0 - внутренний интерфейс
#192.168.1.0/24 - локалка
#81.22.6.77 - внешний ip (здесь вымышленный)

ipfw -f flush

#Общий счётчик на ip
ipfw add count ip from any to any
ipfw add pass icmp from any to any

#NAT (1 - Всё Одмину и всей подсетке - асько!)
ipfw add divert natd ip from 192.168.1.13 to any out via fxp0
ipfw add divert natd ip from 192.168.1.0/24 5190 to any out via fxp0
#Возврат пакетов NAT
ipfw add divert natd ip from any to 81.22.6.77 in via fxp0
#отправляем "out via fxp0", возвращаем "in via fxp0"

#Дальше остальные правила:
ipfw add pass udp from any to any 53,123 keep-state
ipfw add pass tcp from any to any 25,110,80,443 keep-state

#прочие правила...
-------------------------------------------------------------------
И самое главное диверты прописываются вначле фаирвола. 
Иначе до правил NAT'a может дело не дойти...