FreeBSD не работает NAT

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
eth0
проходил мимо

FreeBSD не работает NAT

Непрочитанное сообщение eth0 » 2015-01-18 13:43:45

Добрый день коллеги Решил настроить на шлюзе с FreeBSD NAT интересует именно ядерный NAT но нат работать не хочет ТЕСТОВАЯ СИСТЕМА
LAN 192.168.5.0 em1
WAN 192.168.35.0 em0
Настраивал http://www.lissyara.su/articles/freebsd ... /ipfw_nat/ Пример1
Не работает NAT
Не работает перенаправление портов

ОС FreeBSD 8.4 x64 Ядро пересобрано с опциями

Код: Выделить всё

/usr/src/sys/amd64/conf/ROUTER

options IPFIREWALL 
options IPFIREWALL_VERBOSE 
options IPFIREWALL_VERBOSE_LIMIT=50 
options IPFIREWALL_NAT 
options LIBALIAS 
options IPFIREWALL_FORWARD 
options IPDIVERT 
options ROUTETABLES=2 
options DUMMYNET 
options HZ=«1000»
Добавил в /etc/sysctl.conf

Код: Выделить всё

ee /etc/sysctl.conf

net.inet.ip.fw.one_pass=1
Добавил в /etc/rc.conf

Код: Выделить всё

#ee /etc/rc.conf

defaultrouter=«192.168.35.1» 
hostname=«NAT» 
ifconfig_em0=«inet 192.168.35.20 netmask 255.255.255.0» 
ifconfig_em1=«inet 192.168.5.5 netmask 255.255.255.0» 
gateway_enable=«YES» 
keymap=«ru.koi8-r» 
sshd_enable=«YES» 
firewall_enable=«YES» 
firewall_nat_enable=«YES» 
firewall_type=«/etc/firewall»
создал файл /etc/firewall
сделал chmod +x fireall

Код: Выделить всё

ee firewall

#!/bin/sh

# правила разрешающие трафик через локальный интерфейс lo0 
# будут добавляться автоматически сами при старте фаервола 
# 100 allow ip from any to any via lo0 
# 200 deny ip from any to 127.0.0.0/8 
# 300 deny ip from 127.0.0.0/8 to any

# разрешаем все через интерфейс локальной сети

ipfw add 1040 allow ip from any to any via em1

# боимся непонятного 
ipfw add 1050 deny ip from any to 192.168.0.0/16 in recv em0 
ipfw add 1060 deny ip from 192.168.0.0/16 to any in recv em0 
ipfw add 1070 deny ip from any to 172.16.0.0/12 in recv em0 
ipfw add 1080 deny ip from 172.16.0.0/12 to any in recv em0 
ipfw add 1090 deny ip from any to 10.0.0.0/8 in recv em0 
ipfw add 10100 deny ip from 10.0.0.0/8 to any in recv em0 
ipfw add 10110 deny ip from any to 169.254.0.0/16 in recv em0 
ipfw add 10120 deny ip from 169.254.0.0/16 to any in recv em0

# настройка ната 
# опции переноса строк «\» надо убрать все должно быть в одну строчку 
# опции redirect_port приведены для примера - как делать «проброс портов» 
nat 1 config log if em0 reset same_ports deny_in 
redirect_port tcp 192.168.5.2:3389 3389 
redirect_port udp 192.168.5.3:4444 4444 
redirect_port tcp 192.168.5.4:25 25

# заварачиваем все что проходит через внешний интерфейс в нат

ipfw add 10130 nat 1 ip from any to any via em0 # 
боимся непонятного 
ipfw add 65534 deny all from any to any
когда я пытаюсь запустить скрипт не все правила отрабатывают и соответственно не работает NAT не работает проброс портов

Код: Выделить всё

root@NAT:/etc # ./firewall 
add: not found 01050 deny ip from any to 192.168.0.0/16 in recv em0 
01060 deny ip from 192.168.0.0/16 to any in recv em0 
01070 deny ip from any to 172.16.0.0/12 in recv em0 
01080 deny ip from 172.16.0.0/12 to any in recv em0 
01090 deny ip from any to 10.0.0.0/8 in recv em0 
10100 deny ip from 10.0.0.0/8 to any in recv em0 
10110 deny ip from any to 169.254.0.0/16 in recv em0 
10120 deny ip from 169.254.0.0/16 to any in recv em0 
nat: not found 
redirect_port: not found 
redirect_port: not found 
redirect_port: not found 
10130 nat 1 ip from any to any via em0 65534 deny ip from any to any
Помогите разобраться в чем проблема где я допустил ошибку
Последний раз редактировалось Alex Keda 2015-01-18 19:44:26, всего редактировалось 1 раз.
Причина: Товарищщи, цените чужое время, юзайте кнопочку [code]...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

ононимус
проходил мимо

Re: FreeBSD не работает NAT

Непрочитанное сообщение ононимус » 2015-01-18 18:11:04

Я сейчас может глупость скажу, но тем не менее скажу. Давно с бсд уже не возился, но что-то мне сдается, для того, чтобы работало redirect_port нужно демона запускать и правила типа divert на порт заворачивать.
Если я прав, а по-моему я прав, то вы бы прежде чем опции в идро пихать, хоть бы почитали для чего они. Что это за желание напихать в ядро опций ненужных, чтобы потом оно падало? Доказать себе или скорее кому-то, что я кулхацкер идро собирал? По моему divert перенаправляет все на порт, где висит демон natd (или иной) который согласно своим правилам все делает, так вот вроде опция redirect... это к нему.
Я ядро собирал всего раза 3 за последние лет 6 точно и то, скорее просто так чем с конкретной целью, ну там еще ipfw пихал в идро. Не вижу в этом смысла особенно во времена когда в домашнем компьютере 24 Гб озу. Однако я неоднократно наблюдаю кернелпаник у матюрого линуксоида, который замахивался на разработку своего планировщика и рил тайм системы:-) Лично мое мнение, что ядро дефолтное лучше не трогать без особой необходимости. Там например когда реально нужно выжать все или еще что-то, что по-другому сделать нельзя. Сейчас вполне можно пользоваться бинарным обновлением, а при нем ядро новое будет без ваших опций. А по мне лучше лишний раз вовремя обновиться чем вкомпилять в ядро какую-нибудь хрень.
Вобщем можете считать это бредом старого маразматика, но я за теже последние 6 лет на своей практике не ловил ни одной кернелпаники и полечил по крайней мере 2 сервера от внезапного подвеса возвратом ядра в GENERIC с последующим бинарным обновлением.

mzroot
проходил мимо
Сообщения: 9
Зарегистрирован: 2013-12-04 16:48:21
Откуда: г. Пушкино

Re: FreeBSD не работает NAT

Непрочитанное сообщение mzroot » 2015-01-18 19:16:11

eth0 писал(а):Добрый день коллеги Решил настроить на шлюзе с FreeBSD NAT интересует именно ядерный NAT но нат работать не хочет ТЕСТОВАЯ СИСТЕМА
LAN 192.168.5.0 em1
WAN 192.168.35.0 em0
Настраивал http://www.lissyara.su/articles/freebsd ... /ipfw_nat/ Пример1
Не работает NAT
Не работает перенаправление портов

Код: Выделить всё

ee firewall

#!/bin/sh

# правила разрешающие трафик через локальный интерфейс lo0 
# будут добавляться автоматически сами при старте фаервола 
# 100 allow ip from any to any via lo0 
# 200 deny ip from any to 127.0.0.0/8 
# 300 deny ip from 127.0.0.0/8 to any

# разрешаем все через интерфейс локальной сети

ipfw add 1040 allow ip from any to any via em1

# боимся непонятного 
ipfw add 1050 deny ip from any to 192.168.0.0/16 in recv em0 
ipfw add 1060 deny ip from 192.168.0.0/16 to any in recv em0 
ipfw add 1070 deny ip from any to 172.16.0.0/12 in recv em0 
ipfw add 1080 deny ip from 172.16.0.0/12 to any in recv em0 
ipfw add 1090 deny ip from any to 10.0.0.0/8 in recv em0 
ipfw add 10100 deny ip from 10.0.0.0/8 to any in recv em0 
ipfw add 10110 deny ip from any to 169.254.0.0/16 in recv em0 
ipfw add 10120 deny ip from 169.254.0.0/16 to any in recv em0

# настройка ната 
# опции переноса строк «\» надо убрать все должно быть в одну строчку 
# опции redirect_port приведены для примера - как делать «проброс портов» 
nat 1 config log if em0 reset same_ports deny_in 
redirect_port tcp 192.168.5.2:3389 3389 
redirect_port udp 192.168.5.3:4444 4444 
redirect_port tcp 192.168.5.4:25 25

# заварачиваем все что проходит через внешний интерфейс в нат

ipfw add 10130 nat 1 ip from any to any via em0 # 
боимся непонятного 
ipfw add 65534 deny all from any to any
когда я пытаюсь запустить скрипт не все правила отрабатывают и соответственно не работает NAT не работает проброс портов

Код: Выделить всё

root@NAT:/etc # ./firewall 
add: not found 01050 deny ip from any to 192.168.0.0/16 in recv em0 
01060 deny ip from 192.168.0.0/16 to any in recv em0 
01070 deny ip from any to 172.16.0.0/12 in recv em0 
01080 deny ip from 172.16.0.0/12 to any in recv em0 
01090 deny ip from any to 10.0.0.0/8 in recv em0 
10100 deny ip from 10.0.0.0/8 to any in recv em0 
10110 deny ip from any to 169.254.0.0/16 in recv em0 
10120 deny ip from 169.254.0.0/16 to any in recv em0 
nat: not found 
redirect_port: not found 
redirect_port: not found 
redirect_port: not found 
10130 nat 1 ip from any to any via em0 65534 deny ip from any to any
Помогите разобраться в чем проблема где я допустил ошибку
Скажите, а листинг правил IPFW с вашей тестовой машины или копипаст из статьи? Вопрос к тому, что лично я проблем в правиле 1050 не вижу... Тем не менее, на лицо банально синтаксические ошибки в Вашем скрипте.

Код: Выделить всё

# опции переноса строк «\» надо убрать все должно быть в одну строчку 
# опции redirect_port приведены для примера - как делать «проброс портов» 
nat 1 config log if em0 reset same_ports deny_in 
redirect_port tcp 192.168.5.2:3389 3389 
redirect_port udp 192.168.5.3:4444 4444 
redirect_port tcp 192.168.5.4:25 25
Думаю, стоит попробовать изменить на следующее:

Код: Выделить всё

ipfw nat 1 config log if em0 reset same_ports \
redirect_port tcp 192.168.5.2:3389 3389 \
redirect_port udp 192.168.5.3:4444 4444 \
redirect_port tcp 192.168.5.4:25 25
Обратите внимание на на обратный слэш "\" (он нужен, если Вы используете несколько строк, а не одну)! А также надо указать "ipfw" перед "nat".

Я бы посоветовал на время тестирования убрать опцию "deny_in", а правило

Код: Выделить всё

ipfw add 65534 deny all from any to any
заменить на

Код: Выделить всё

ipfw add 65534 allow log all from any to any
Чтобы исключить блокирование пакетов правилом №65534. "log" же позволит увидеть в логе (/var/log/security как правило) какие именно пакеты разрешает IPFW.

Аватара пользователя
wien
мл. сержант
Сообщения: 148
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

FreeBSD не работает NAT

Непрочитанное сообщение wien » 2015-01-27 15:38:58

Имеется сервер, на нем запущены:

1. apache - обслуживает внутреннюю и внешнюю сеть
2. bind - обслуживает внутреннюю и внешнюю сеть
3. proftpd - обслуживает внутреннюю и внешнюю сеть

4. dhcpd - обслуживает внутреннюю сеть
5. squid - обслуживает внутреннюю сеть


Помогите решить проблему, народ, вот конфиг ipfw:

Код: Выделить всё

#!/bin/sh

# v.01.00.00    13.03.2014      First working version of firewall
# v.01.10.00    28.06.2014      Version of firewall with hotspot support
# v.01.11.00    29.06.2014      Added "table 0" for previleged users
# v.01.12.00    30.06.2014      Added rule for blocking dos attack
# v.01.13.00    04.07.2014      Deny Netbion on the LanOut, deny ident
# v.01.14.00    01.08.2014      Added adsl line support (created rules and tun0 iface)
# v.01.14.01    26.01.2015      Fixed rules about httpd, bind, proftpd, added getting ng0 address

# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил

FwCMD="/sbin/ipfw -q"   # собственно где лежит бинарник ipfw
LanOut="ng0"            # внешний интерфейс
LanIn="re0"             # внутренний интерфейс
IpOut=`ifconfig ng0 | awk '$1=="inet"{print $2}'`     # внешний IP адрес машины
IpIn="10.0.0.1"         # внутренний IP машины
NetMask="24"            # маска внутренней сети
NetIn="10.0.0.0"        # Внутренняя сеть

# Сбрасываем все правила:
${FwCMD} -f -q flush

# Сбрасываем содержимое таблиц
${FwCMD} -f table 0 flush

# В эту таблицу будем добавляем превилигированных пользователей.
${FwCMD} table 0 add 10.0.0.10
${FwCMD} table 0 add 10.0.0.100

# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add 110 check-state

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
${FwCMD} add 111 allow ip from any to any via lo0

# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0
${FwCMD} add 112 deny ip from any to 127.0.0.0/8
${FwCMD} add 113 deny ip from 127.0.0.0/8 to any

# block some DOS attacks.
${FwCMD} add 114 deny tcp from any to any tcpoptions !mss tcpflags syn,!ack

# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${FwCMD} add 115 deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add 116 deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add 117 deny ip from any to 0.0.0.0/8 in via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add 118 deny ip from any to 169.254.0.0/16 in via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 119 deny ip from any to 240.0.0.0/4 in via ${LanOut}

# запрещаем ident
${FwCMD} add 120 deny tcp from any to any 113 in via ${LanOut}

# запрет Netbios, 137=имя, 138=дейтаграмма, 139=сессия
${FwCMD} add 121 deny tcp from any to any 137 in via ${LanOut}
${FwCMD} add 122 deny tcp from any to any 138 in via ${LanOut}
${FwCMD} add 123 deny tcp from any to any 139 in via ${LanOut}

# рубим фрагментированные icmp
${FwCMD} add 124 deny icmp from any to any frag

# рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add 125 deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add 126 deny log icmp from any to 255.255.255.255 out via ${LanOut}

# а тут собственно файрволл и начался:

# открываем снаружи 80 порт - есть WWW сервер на машине
${FwCMD} add 150 allow tcp from any to ${IpOut} 80 via ${LanOut}

# открываем снаружи 2200 порт - надо будет ходить на машину по ssh
${FwCMD} add 151 allow tcp from any to ${IpOut} 2200 in via ${LanOut} setup limit src-addr 3

# открываем снаружи 27015 порт для CS сервера
${FwCMD} add 152 allow udp from any to ${IpOut} 27015 via ${LanOut} limit src-addr 30

# открываем снаружи 27910 порт для Quake2 сервера
${FwCMD} add 153 allow udp from any to ${IpOut} 27910 via ${LanOut} limit src-addr 30

# DNS на внешнюю сетевуху
${FwCMD} add 154 allow udp from any 53 to any via ${LanOut}
${FwCMD} add 155 allow udp from any to any 53 via ${LanOut}

# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add 156 allow udp from any to any 123 via ${LanOut}

# разрешаем ftp снаружи (оба правила - для пасивного режима)
# для узнавания портранджа по которому будет работать, лезем в
#/usr/home/lissyara/>sysctl net.inet.ip.portrange.first
# net.inet.ip.portrange.first: 49152
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.last
# net.inet.ip.portrange.last: 65535
${FwCMD} add 157 allow tcp from any to ${IpOut} 21 via ${LanOut}

#Можно изгалиться примерно так, если есть желание, но я предпочитаю руками
#${FwCMD} add allow tcp from any to ${IpOut} \
#`sysctl net.inet.ip.portrange.first | awk '{print $2}'`-\
#`sysctl net.inet.ip.portrange.last | awk '{print $2}'` via ${LanOut}
#${FwCMD} add 158 allow tcp from any to ${IpOut} 10000-65535 via ${LanOut}

# разрешаем некоторые типы ICMP траффика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
${FwCMD} add 159 allow icmp from any to any icmptypes 0,8,11

# Юзеров заворачиваем на squid
${FwCMD} add 160 fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}

# ядерный NAT
${FwCMD} nat 1 config log if ${LanOut} reset same_ports deny_in
${FwCMD} add 161 nat 1 ip from any to any via ${LanOut}

# рубим траффик к частным сетям через внешний интерфейс
# эти правила отличаются от тех что были выше!
${FwCMD} add 162 deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add 163 deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add 164 deny ip from 0.0.0.0/8 to any out via ${LanOut}

# рубим автоконфигуреную частную сеть
${FwCMD} add 165 deny ip from 169.254.0.0/16 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 166 deny ip from 224.0.0.0/4 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 167 deny ip from 240.0.0.0/4 to any out via ${LanOut}

# разрешаем все установленные соединения (если они установились -
# значит по каким-то правилам они проходили.)
${FwCMD} add 168 allow tcp from any to any established
# разрешаем весь исходящий траффик (серверу-то в инет можно? :))
${FwCMD} add 169 allow ip from ${IpOut} to any out xmit ${LanOut}
${FwCMD} add 170 allow ip from me to any via ${LanOut}
${FwCMD} add 171 allow ip from any to me via ${LanOut}

# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 172 allow tcp from any to any via ${LanIn}

# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 173 allow udp from any to any via ${LanIn}

# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 174 allow icmp from any to any via ${LanIn}

# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
${FwCMD} add deny log all from any to any
Несколько вопросов:
1. Не открывается снаружи фтп, хотя порт открыт и профтпд обслуживает:

Код: Выделить всё

root@hostname:/usr/home/alex # sockstat | grep proftp
nobody   proftpd    888   0  tcp4 6 *:21                  *:*
nobody   proftpd    888   3  stream /var/run/proftpd.sock
nobody   proftpd    888   4  stream /var/run/proftpd.sock
Что посоветуете?
2. Не уверен что правило для нат в моем варианте описано достаточно безопасно:

Код: Выделить всё

# ядерный NAT
${FwCMD} nat 1 config log if ${LanOut} reset same_ports deny_in
${FwCMD} add 161 nat 1 ip from any to any via ${LanOut} # в данном случае он будет пускать всех и всюду
Но по другому нат мне не удалось завести, пробовал сначала входящее правило описать, затем исходящее. Может есть у кого готовый конфиг, где по-человечески все описано или конфиг где описан подобный набор сервисов?
3. В логах проскочила ошибка:

Код: Выделить всё

named[5916]: could not listen on UDP socket: permission denied
named[5916]: creating IPv4 interface ng0 failed; interface ignored
Погуглил, руками перезапустил демон, т.е. /etc/rc.d/named restart - пока работает. Нужно ли мне при поднятии/падении ng0 перезапускать bind?

Прошу ткнуть носом в явные косяки и недочеты.

P.S. И все-таки мне кажется что мой фаервол из-за того как описан нат - дырка! Поправьте, если это не так.

mzroot
проходил мимо
Сообщения: 9
Зарегистрирован: 2013-12-04 16:48:21
Откуда: г. Пушкино

FreeBSD не работает NAT

Непрочитанное сообщение mzroot » 2015-01-30 11:54:25

wien писал(а):
Несколько вопросов:
1. Не открывается снаружи фтп, хотя порт открыт и профтпд обслуживает:

Код: Выделить всё

root@hostname:/usr/home/alex # sockstat | grep proftp
nobody   proftpd    888   0  tcp4 6 *:21                  *:*
nobody   proftpd    888   3  stream /var/run/proftpd.sock
nobody   proftpd    888   4  stream /var/run/proftpd.sock
Во-первых, в Ваших правилах я обнаружил (возможно, смотрел не очень внимательно - спать охота :pardon: ) "открытым" только 21 порт tcp. Но для корректной работы FTP одного лишь 21 порта недостаточно. Ещё нужен 20 порт и диапазон портов для передачи данных (portrange у Вас закоментирован). Читайте теорию про FTP, можно хотя бы на wikipedia.

Код: Выделить всё

# разрешаем ftp снаружи (оба правила - для пасивного режима)
# для узнавания портранджа по которому будет работать, лезем в
#/usr/home/lissyara/>sysctl net.inet.ip.portrange.first
# net.inet.ip.portrange.first: 49152
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.last
# net.inet.ip.portrange.last: 65535
${FwCMD} add 157 allow tcp from any to ${IpOut} 21 via ${LanOut}
Также прочитайте man ipfw, в частности об этом
deny_in
Deny any incoming connection from outside world.
То есть, если я все правильно понимаю, пакет отбрасывается, если нет соответствия в таблице NAT'а... (поправьте, если я неправ). Соответственно, если Вы уберете deny_in из конфигурации NAT, то пакеты адресованные FTP (и ведь NAT'ится они не должны) не будут дропаться. Что же касается безопасности, Вам придется в правилах разрешить только нужное, все остальное запретить.
wien писал(а): Что посоветуете?
2. Не уверен что правило для нат в моем варианте описано достаточно безопасно:

Код: Выделить всё

# ядерный NAT
${FwCMD} nat 1 config log if ${LanOut} reset same_ports deny_in
${FwCMD} add 161 nat 1 ip from any to any via ${LanOut} # в данном случае он будет пускать всех и всюду
Но по другому нат мне не удалось завести, пробовал сначала входящее правило описать, затем исходящее. Может есть у кого готовый конфиг, где по-человечески все описано или конфиг где описан подобный набор сервисов?
У меня работает примерно такая конфигурация:

Код: Выделить всё

# Разделяем весь трафик на входящий и исходящий (для удобства)
1000 ipfw skipto 5000 log logamount 20 ip from any to any in
2000 ipfw skipto 11000 log logamount 20 ip from any to any out
...
5000 # здесь рубим ненужный нам входящий трафик
...

# Обрабатываем входящий трафик (NAT)
06010 ipfw nat 10 ip from not me to ${ext_address} in recv ${ext_interface}
# Разрешаем прохождение пакетов в локальную сеть
06099 ipfw allow ip from any to 192.168.50.0/24

... разрешаем трафик, адресованный нам (to me)

...
11000 # здесь рубим ненужный нам исходящий трафик
...

# Обрабатываем исходящий трафик (NAT)
12010  ipfw nat 10 ip from 192.168.50.0/24 to not me out xmit ${ext_interface}
...