Для начала надо пересобрать ядро со следующими опциями
options IPFIREWALL #firewall options IPFIREWALL_VERBOSE #enable logging to syslogd(8) options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default options IPFIREWALL_FORWARD options DUMMYNET options IPFIREWALL_NAT #ipfw kernel nat support options LIBALIAS |
Далее пересобираем ядро:
cd /usr/src/ make buildkernel KERNCONF=Yourkernel && make installkernel KERNCONF=Yourkernel shutdown -p now |
Далее кусок файла конфигурации с примером.
192.168.1.132 - ip адрес сетевой карты смотрящей наружу
остальное внутренние адреса
#!/bin/sh # здесь просто удаляю старые правила ipfw -f flush ipfw nat 122 delete # разрещаю все через loopback ipfw add allow all from any to any via lo0 # делаю нат на ip смотрящем наружу, same_ports - для попытки сохранить номера портов при нате # пробрасываю все что приходит на порт 9999 на тот же порт внутренней машины ipfw nat 123 config ip 192.168.1.132 log same_ports \ redirect_port tcp 192.168.4.86:9999 9999 \ redirect_port tcp 192.168.4.46:123 9199 # этот кусок нужен что бы у машины был не полный нат а только порт который я разрешил, # потому что вообще в интернет буду пускать через проксю. ipfw add 100 nat 123 tcp from 192.168.4.86 9999 to any ipfw add 100 nat 123 tcp from any to 192.168.4.86 9999 # здесь я разрешаю клиенту с ip 192.168.4.86 коннектится к любым серверам по 25 порту, # но только по нему. ipfw add 100 nat 123 tcp from 192.168.4.86 to any 25 # а здесь делаю полный нат клиенту ipfw add 100 nat 123 tcp from 192.168.4.46 to any # это что бы был нат, иначе ничего не будет работать, правило для выпуска клиентов наружу ipfw add 100 nat 123 ip from any to 192.168.1.132 |