Коллективным разумом на nag.ru пришли к такому скрипту:
#Some variables IP123="XXX.YYY.ZZZ" < - 3 первых байта внешних адресов (99.124.65) GRAYIP="XXX.YYY" <- 2 первых байта серой подсети (172.16) OUT_VLAN="vlanX" <- Выходной интерфейс (vlan99) NATIPFW_RULE=30000 <- Номер правила в ipfw TABLE_NAT_IN=100 <- Номер таблицы серых подсетей TABLE_NAT_OUT=101 <- Номер таблицы реальников #Null0 routed NAT network /sbin/route add -net $IP123.0/24 -blackhole #Ipfw::NAT config with table /sbin/ipfw table $TABLE_NAT_IN flush /sbin/ipfw table $TABLE_NAT_OUT flush IP4=1 SEGIP3=0 NATBASE=1000 while [ $IP4 -le 254 ] do NATNUM=`expr $NATBASE + $IP4` /sbin/ipfw nat $NATNUM config ip $IP123.$IP4 reset unreg_only same_ports deny_in /sbin/ipfw table $TABLE_NAT_OUT add $IP123.$IP4 $NATNUM /sbin/ipfw table $TABLE_NAT_IN add $GRAYIP.$SEGIP3.0/24 $NATNUM IP4=`expr $IP4 + 1` SEGIP3=`expr $SEGIP3 + 1` done /sbin/ipfw add $NATIPFW_RULE nat tablearg ip from "table($TABLE_NAT_IN)" to any out via $OUT_VLAN /sbin/ipfw add $NATIPFW_RULE nat tablearg ip from any to "table($TABLE_NAT_OUT)" in via $OUT_VLAN |