ipf+ipnat+ipfw建立带流量控制的透明网关(10) echo 'pass out proto gre from any to any keep state' >> /etc/ipf.rules echo 'pass in on '$ADSLDEV' all' >> /etc/ipf.rules echo 'pass out on '$ADSLDEV' all' >> /etc/ipf.rules
##END IPF.SH########### (d):因为我们采用的是pppoe拨号,有断线重拨的可能。因此有不断监视和更新ipf、ipnat规则的需要(我们前面已经在rc.conf里面设置ppp断线重拨了,重播以后tun0得到的ip会改变)。因此我们在crontab的root文件里面加上一条规则,使ipf.sh能每隔一段时间(3-5min)自动执行一次。 (e):然后就是启用ipfw来进行流量管理了。干脆写一个脚本来进行了事了。示例脚本如下: #!/bin/sh #load ipfw in ipf env #by fzfh /sbin/kldload /boot/kernel/dummynet.ko #加载ipfw和dummynet模块,默认deny all /sbin/ipfw -f flush #清空所有ipfw规则 /sbin/ipfw add 00050 pipe 1 all from any to ip /sbin/ipfw pipe 1 config bw 400Kbit/s #限制任意地址到ip的总流量不超过400Kbit/s /sbin/ipfw add 00060 pipe 2 all from ip to any /sbin/ipfw pipe 2 config bw 400Kbit/s #限制ip到任意地址的总流量不超过400Kbit/s /sbin/ipfw add 100 all from any to any #任意连接通过 然后把ipfw.sh加上可执行属性,放到ipf.sh同一个目录里面在开机时自动执行即可。(/usr/local/etc/rc.d) 注意:加载ipfw模块以后会马上生效,默认是deny all,位置在65535。因此,通过网络进行设置的话需要写一个脚本加载ipfw模块,务必使加载ipfw模块以后要生成一条在65535前通过所有连接的规则。建议序号在10000之前。 (3):到此,已经完成配置。测试达到个人的预定目的。