На свежеустановленном шлюзе FreeBSD 8.2 применил следующие правила для раздачи Инета на локалку:
Код: Выделить всё
#!/bin/sh
ipfw="/sbin/ipfw -q"
oin="re0"
iin="vr0"
#iin2="vr1"
oip="х.х.х.хх"
lan="192.168.1.0/24"
$ipfw -f flush
$ipfw add 10 pass all from any to any via lo0
$ipfw add 100 pass tcp from any to me 22 keep-state
#Объявляем экземпляр НАТ
$ipfw nat 100 config if $oin
#Применяем НАТ
$ipfw add 900 nat 100 ip from any to any via re0
### Разрешаем хождение от шлюза
$ipfw add 1800 pass ip from me to any keep-state
# Главное пропускающее правило на подсеть #
$ipfw add 2550 pass ip from $lan to any keep-state
$ipfw add 60000 deny ip from any to any
Если написать статичное, "обратное" ему - то естесствено траффик из сети $lan идет как надо.
И все другие правила с keep-state, ниже NATа так криво работают.
Правило 100 работает корректно.
Крайне смущает тот факт, что на вышеприведенном шаблоне правил у меня нормально работают 4 шлюза, системы разные, 7.3, и 8.1 и 8.2. С одинаковым конфигом ядра (конфиг ниже). И все работает как надо. Единственное отличие - те системы апнутые с 7.1. А эта - изначально установленная с CD 8.2 amd64 Release. Больше отличий не нашел.
Подумал - косяк обновления 8,2, откатил ядро и мир на 8,1, ничего не поменялось. проблема осталась.
Где я лоханулся ? 3-й день гугулю, по маиллистам и релисноутам.
Данные косячного шлюза:
Код: Выделить всё
host# uname -a
FreeBSD host.com 8.1-RELEASE-p8 FreeBSD 8.1-RELEASE-p8 #0: Mon Mar 5 16:22:52 VOLT 2012 user@host.com:/usr/obj/usr/src/sys/mykern8 amd64
Добавлено в конфиг ядра:
Код: Выделить всё
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity
options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default
options IPFIREWALL_FORWARD #packet destination changes
options IPFIREWALL_NAT #ipfw kernel nat support
options DUMMYNET
options LIBALIAS
options IPDIVERT
options ROUTETABLES=8
device tap
device if_bridge
options HZ=1000
options IPSEC
device crypto
Код: Выделить всё
ifconfig_re0="х.х.х.58 netmask 255.255.255.252"
defaultrouter="х.х.х.57"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
gateway_enable="YES"