Пытаюсь разобраться в ipfw nat. Схема такая: есть сервер FreeBSD с IPFW, есть три сети. Внутренняя - int0, внешняя - ext0 и изолированная sub0. Требуется настроить чтобы пакеты между сетями int0 и sub0 роутились, а из сети int0 в сеть ext0 - NATились. sub0 в ext0 соответственно доступа иметь не должна. Но затык возникает уже на этапе настройки ната...
соответственно настройки:
/etc/rc.conf
Код: Выделить всё
ifconfig_em0_name="ext0"
ifconfig_ext0="SYNCDHCP -rxcsum -txcsum -tso"
ifconfig_em1_name="int0"
ifconfig_int0="inet 192.168.36.254 netmask 255.255.255.0"
ifconfig_em2_name="sub0"
ifconfig_sub0="inet 192.168.52.254 netmask 255.255.255.128"
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
#firewall_nat_interface="ext0"
firewall_logging="YES"
firewall_type="/etc/firewall"
Код: Выделить всё
# Правила для локальной сети
add 1010 allow all from any to any via int0.
add 1020 allow all from any to any via sub0.
# Правила для роутера
add 1520 allow udp from me to any ntp out via ext0 keep-state
add 1530 allow tcp from me to any out via ext0 setup keep-state uid root
# Доступ к ДНС и ДХЦП
add 2010 allow tcp from any to 192.168.212.2 53 out via ext0 setup keep-state
add 2020 allow udp from any to 192.168.212.2 53 out via ext0 keep-state
add 2030 allow tcp from any to 192.168.212.3 53 out via ext0 setup keep-state
add 2040 allow udp from any to 192.168.212.3 53 out via ext0 keep-state
# SSH и пинги из внешней сети
add 3010 allow log tcp from any to me ssh in recv ext0 keep-state
add 3020 allow log icmp from any to me via ext0 keep-state
# Настройка NAT
nat 1 config log if ext0 reset same_ports deny_in
add 10000 nat 1 ip from 192.168.36.0/24 to any out xmit ext0
add 10010 nat 1 ip from any to 192.168.36.0/24 in recv ext0
#add 15000 allow all from any to any
# Запретим все что не разрешено и в журнал
add 20000 deny all from any to any
При этом при пинге с машины 192.168.36.50 пакеты уходят на роутер, натятся во внешнюю подсеть, доходят до адресата, возвращаются на роутер и там пропадают (смотрел tcpdump'ом на ext0 и int0). Правило 10010 не отрабатывает ни разу. Если включить правило 15000, то ничего не меняется.
Кто-нибудь может подсказать, что и где я делаю не так?..