Архив за день: 28 октября 2011

FreeBSD IPFW NAT /24 -> /32

Коллективным разумом на 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