freebsd ipf+ipnat+ipfw建立带流量控制的透明网关(2) #ipf.sh 是一个自动检测ADSL分配的IP地址和利用这个IP地址动态创建IPFILTER过 #滤规则的脚本。 #使用方法: #步骤一:要确定使用ipf.sh脚本的服务器能正常使用ADSL拨号和IPFILTER能正常运 #行。 #步骤二:把ipf.sh脚本修改成你的实际网络情况。修改如下: #内部网卡设备号、内部网段、服务器IP地址、ADSL拨号网络设备号或自己增加网络设备 #和相应的过滤规则。 #步骤三:把ipf.sh移动到 /usr/local/etc/rc.d中,记得加上可执行属性。 ############################################################### #内部网卡设备号vr0 INTARNDEV="vr0" INTARN=`ifconfig $INTARNDEV grep inet cut -d ' ' -f 2` #内部网段192.168.0.0/24 INTARNNET="192.168.0.0/24" #服务器IP地址 #注意:服务器IP地址为0.0.0.0时是不会做相应的服务映射,只在填写了正确的IP地址后才会映射到该IP地址上。 INTARNFTP="0.0.0.0" #FTP服务器 INTARNSSH="0.0.0.0" #SSH服务器 INTARNEMAIL="0.0.0.0" #EMAIL服务器 INTARNDNS="0.0.0.0" #DNS服务器 INTARNWEB="0.0.0.0" #WEB服务器 INTARNSSL="0.0.0.0" #SSL服务器 INTARNRTSP="0.0.0.0" #RTSP服务器 INTARNMYSQL="0.0.0.0" #MYSQL服务器 INTARNJABBER="0.0.0.0" #JABBER服务器 #ADSL拨号网络设备号tun0 ADSLDEV="tun0" ADSLIP=`ifconfig $ADSLDEV grep inet cut -d ' ' -f 2` until [ $ADSLIP ] do sleep 5 done #动态生成ipnat.rules规则 echo '######################################################' > /etc/ipnat.rules echo '#/etc/ipnat.rules #' >> /etc/ipnat.rules echo '######################################################' >> /etc/ipnat.rules echo '' echo '#把所有的内部网络IP伪装成ADSL拨号IP' >> /etc/ipnat.rules echo 'map '$ADSLDEV' '$INTARNNET' -> '$ADSLIP'/32 portmap tcp/udp 10000:65000' >> /etc/ipnat.rules if [ $INTARNFTP != "0.0.0.0" ] then echo '' echo '#把对ADSL拨号IP的FTP服务映射到服务网络的FTP服务器上' >> /etc/ipnat.rules echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 20 -> '$INTARNFTP' port 20' >> /etc/ipnat.rules echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 21 -> '$INTARNFTP' port 21' >> /etc/ipnat.rules fi if [ $INTARNSSH != "0.0.0.0" ] then echo '' echo '#把对ADSL拨号IP的SSH服务映射到服务网络的网管工作站上' >> /etc/ipnat.rules echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 22 -> '$INTARNSSH' port 22' >> /etc/ipnat.rules