1,首先家用网络跟企业带宽的最大一个区别就是并发数有限制。像家里用的电信 8M 光纤大概在 1500 个左右的并发数。
2,控制流量有直接对流量进行控制,看不见的使用并发限制对流量进行控制,所以一旦超过 1500 个左右的并发,那么电信局端开始丢包,那么 tcp 的 3 次握手过程就无法建立,那么流量自然会被抑制。
3,其它的可能设备本身的固件优化就限制了并发的连接,甚至电信有意无意的提供有问题的固件。曾经就在 ADSL 时代使用过电信送的 ADSL modem 上海贝尔吧,这 modem 的特点就是一旦使用 p2p 程序流量就开始自动波动。。。后来刷 tplink 的固件解决。
4,迅雷跟 QQ 旋风有很大差别,迅雷随便就是 1200+并发数,而 QQ 旋风才只有 400+左右。从平时观察的经验来看,显然迅雷发起了很多无意义的并发数。甚至一个设计不合理的 QOS 规则会导致连路由管理界面都无法打开。。。
5,9 楼提供的针对 tcp udp 的连接消亡控制是有意义的,它能有效的让一些不必要的连接快速消亡,但是显然不主动控制,这些默认的消亡时间还是不够快。
5,所以问题就在如何控制并发数量在 1500 以下。
ddwrt 提供了一种非常有效的针对特定 ip 抑制并发的方法
https://www.dd-wrt.com/wiki/index.php/Preventing_Brute_Force_Attacks最终的例子就变成
a.使用 limit 对源 ip 192.168.1.2 发往外界的并发数进行匹配发送,抑制了发送的包,自然根据 tcp 的握手过程抑制了接收的包。 limit 非常平滑不像 connlimit 一样会直接造成网络断开,更丰富的控制选项可能就是 hashlimit 了
b.规则 1 规则 2 对网页浏览端口和其它端口进行自上而下的区分,似乎简单的 iptables 规则的上下排序就能解决迅雷问题。总共有 100 包,每秒相应可以产生 60 包,这个 limit 的解释还是比较晕,自己 google 吧
c.规则 3 抑制 icmp 包的生成,似乎在一些 p2p 环境确认有用。
d.规则 4 规则 5 对剩余的过量的包用 REJECT 进行快速丢弃, 9 楼的 timeout 消亡设置就有快速的回应效果了
e.规则 6 剩余的其它包只能丢弃处理了。
a="`iptables -vnL FORWARD --line-numbers | grep "PMTU" | cut -c1-5` - 1";a=`expr $a`
规则 6 iptables -I FORWARD $a -s 192.168.1.2 -j DROP
规则 5 iptables -I FORWARD $a -s 192.168.1.2 -p udp -j REJECT --reject-with icmp-proto-unreachable
规则 4 iptables -I FORWARD $a -s 192.168.1.2 -p tcp -j REJECT --reject-with icmp-proto-unreachable
规则 3 iptables -I FORWARD $a -s 192.168.1.2 -p ICMP --icmp-type echo-request -m limit --limit 4/sec -j ACCEPT
规则 2 iptables -I FORWARD $a -s 192.168.1.2 -m limit --limit 60/s --limit-burst 100 -j ACCEPT
规则 1 iptables -I FORWARD $a -s 192.168.1.2 -p tcp -m multiport --dport 80,443 -m limit --limit 60/s --limit-burst 100 -j ACCEPT;
上面的方法针对特定 ip 对付迅雷时打开网页是有效果的。只是如果处理不好--limit --limit-burst 对其它正常应用是有一定的抑制作用的
6,openwrt 采用的是对 INPUT 方向的 syn_flood 进行抑制,那么回应的包自然也相应抑制。昨天刚迅雷过虽然网速才 300-800kb/s 之间波动,但是至少网页打开流畅。显然 openwrt 的防火墙规则还是有很大的区别于 ddwrt tomato 的性能上的优化。
-A INPUT -i pppoe-wan -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn_flood
-N syn_flood
-A syn_flood -m limit --limit 3/sec --limit-burst 25 -j RETURN
-A syn_flood -j DROP
7,一个设计良好的 qos 规则也是有一定的抑制效果的。可以参考
我的 tomato 原版 QOS 设定
http://www.right.com.cn/forum/thread-102891-1-1.html(出处: 恩山无线论坛)