Спасибо всем, paradox, freeman, zg - всё заработало и без route-to.
сейчас выложу rc.conf и pf.conf - может быть в нём и есть избыточность правил, но по крайней мере всё работает.
А проблема у меня оказывается была с драйвером сетевухи "age0" -"Attansic(R) L1 Gigabit Ethernet Adapter"
его в дистрибутиве FreeBSD 7.0 нет, пришлось присобачивать отдельно. И почему-то при перезапуске эта карточка время от времени падает, причём как-то бессистемно. Чтобы она опять заработала, нужно не только выключить комп, но и снять напряжение с блока питания (выдернуть шнурок). А я-то думаю, что она из-за неправильных правил в pf.conf пакеты не пропускает... пробую разные варианты, замучилась прям
. А её-то оказывается вообще нет
!
В общем - теперь работает и NAT наружу - с определённых локальных компов, и rdr внутрь - из сторонних организаций к ним.
rc.conf
Код: Выделить всё
gateway_enable="YES"
defaultroute="212.173.12.1"
#local
ifconfig_xl0="inet 192.168.1.1 netmask 255.255.255.0"
#internet-Attansic(R) L1 Gigabit Ethernet Adapter
ifconfig_age0="inet 212.173.12.2 netmask 255.255.255.128"
#alias gruz.sklad
ifconfig_age0_alias0="inet 212.173.12.18 netmask 255.255.255.255"
#alias buhgalteria
ifconfig_age0_alias1="inet 212.173.12.27 netmask 255.255.255.255"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
pf.conf
Код: Выделить всё
int_if="xl0"
ext_if="age0"
#ext_organization
nalogovaya="123.45.67.89"
#gruz.sklad
nat on $internet_if inet from 192.168.1.15 to any -> 212.173.12.18
rdr on $internet_if inet from any to 212.173.12.18 -> 192.168.1.15
#buhgalteria
nat on $internet_if inet from 192.168.1.22 to any -> 212.173.12.27
rdr on $internet_if inet from any to 212.173.12.27-> 192.168.1.22
block log (all) all
#gruz.sklad -to any
pass in quick log (all) on $int_if inet from 192.168.1.15 to any keep state
pass out quick log (all) on $ext_if inet from 212.173.12.18 to any keep state
#any - to gruz.sklad
pass in quick log (all) on $ext_if inet from any to 192.168.1.15 keep state
pass out quick log (all) on $int_if inet from any to 192.168.1.15 keep state
#buhgalteria -to nalogovaya
pass in quick log (all) on $int_if inet from 192.168.1.22 to $nalogovaya keep state
pass out quick log (all) on $ext_if inet from 212.173.12.27 to $nalogovaya keep state
#nalogovaya - to buhgalteria
pass in quick log (all) on $ext_if inet from $nalogovaya to 192.168.1.22 keep state
pass out quick log (all) on $int_if inet from $nalogovaya to 192.168.1.22 keep state
ну, понятно, что log (all) - это только на время отладки, и нужно ещё правила для антиспуфинга и т.п
но главное - то, что всё работает.
Причём, что интересно - алиасы в pf.conf не использую - указываю непосредственно IP-шники, но в rc.conf их всё равно надо прописывать - иначе nat не работает - только rdr.
Сейчас попробую как-то объединить похожих клиентов в списки и таблицы, иначе мой pf.conf вырастает до нечитаемых размеров.
Если есть предложения по оптимизации, очень интересуюсь.
Всем спасибо.
Наталья