вторник, 10 марта 2009 г.

Kernel nat на FreeBSD 7,1

Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)

Для начала надо пересобрать ядро со следующими опциями

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

1 комментарий:

Анонимный комментирует...

# а здесь делаю полный нат клиенту
ipfw add 100 nat 123 tcp from 192.168.4.46 to any
Все бы хорошо, вот только ip надо...nat 123 ip...