概述
再发个对P2P惩罚的脚本,喜欢dualwan的快过来看。
不同的环境需要制定不同的策略,没有万能的策略。关键是理解QOS的原理,再研究细节才能随机应变。
相比上一次,主要改变有:
1.把游戏爆发改成P2P惩罚。
依据连接数判断内网IP是否在P2P下载。当tcp连接数>50或udp连接数>50的IP数据包进入“惩罚队列”。
“惩罚队列”的优先级别最低,但是其最大下载带宽为总带宽的80%,最大上传带宽为总带宽50%。
2.小包重新定义:DNS,“icmp小包”,“tcp的ack小包”以及“web端口小包”。游戏游戏主要使用tcp协议,故去掉udp小包(DNS例外)。
并且有一个最明显的改变是小包不进入调度队列,直接发送,类似于CISCO的LLQ队列。所以小包拥有绝对的优先级别。
3.web数据包调整为tcp80和443连接的前100KB
4.队列参数微调。
注意:
1.脚本比较适合中国ADSL环境(2M),其他环境需要一些修改
2.因为dualwan的路由器硬件也就一般般,所以不要指望用在大规模网络中,最好用在少于30台PC的环境中。
3.如果要移植到大规模网络中(使用linux pc),还要考虑防止DDOS和效率问题。
大规模网络对IP数据包分类最好使用U32结合hash table以便提高效率。
- #copyright by zhoutao0712
- #变量初始化(速率单位是KB/S)
- UIP="192.168.1."
- NET="192.168.1.0/24"
- IPS="2"
- IPE="8"
- UP=35
- DOWN=180
- UPLOADR=1
- UPLOADC=12
- DOWNLOADR=$(($DOWN/$((IPE-IPS+5))))
- DOWNLOADC=$(($DOWN*7/10))
- #装载核心模块,创建QOS专用链
- insmod imq
- insmod ipt_IMQ
- insmod ipt_length.o
- insmod ipt_hashlimit.o
- ifconfig imq1 up
- ifconfig imq0 up
- iptables -t mangle -N QOSDOWN
- iptables -t mangle -N QOSUP
- iptables -t mangle -I FORWARD -s $NET -j QOSUP
- iptables -t mangle -I FORWARD -d $NET -j QOSDOWN
- iptables -t mangle -A QOSDOWN -j IMQ --todev 0
- iptables -t mangle -A QOSUP -j IMQ --todev 1
- #DNS,“icmp小包”,“tcp的ack小包”以及“web端口小包”不进入整形队列,直接发送
- iptables -t mangle -I QOSDOWN -p udp --sport 53 -j RETURN
- iptables -t mangle -I QOSDOWN -p icmp -m length --length :128 -j RETURN
- iptables -t mangle -I QOSDOWN -p tcp --tcp-flags SYN,RST,ACK ACK -m length --length :256 -j RETURN
- iptables -t mangle -I QOSUP -p icmp -m length --length :128 -j RETURN
- iptables -t mangle -I QOSUP -p udp --dport 53 -j RETURN
- iptables -t mangle -I QOSUP -p tcp --dport 80 -m length --length :128 -j RETURN
- iptables -t mangle -I QOSUP -p tcp --tcp-flags SYN,RST,ACK ACK -m length --length :128 -j RETURN
- #正常web数据包mark255
- iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -j BCOUNT
- iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range :102400 -j MARK --set-mark-return 255
- iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -j BCOUNT
- iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :102400 -j MARK --set-mark-return 255
- #tcp连接数>50或udp连接数>50的IP地址进入惩罚队列mark254,惩罚时间30s,并且192.168.1.8有zhoutao0712发放的免死金牌
- iptables -t mangle -N PUNISH
- iptables -t mangle -I FORWARD -s $NET -p tcp --syn -m connlimit --connlimit-above 50 -j PUNISH
- iptables -t mangle -I FORWARD -s $NET -p ! tcp -m state --state NEW -m connlimit --connlimit-above 50 -j PUNISH
- iptables -t mangle -A PUNISH -s 192.168.1.8 -j RETURN
- iptables -t mangle -A PUNISH -m recent --set --name badguy
- iptables -t mangle -A QOSUP -m recent --name badguy --rcheck --seconds 30 -j MARK --set-mark-return 254
- iptables -t mangle -A QOSDOWN -m recent --rdest --name badguy --rcheck --seconds 30 -j MARK --set-mark-return 254
- #其它数据包使用内网IP地址mark
- iptables -t mangle -A QOSDOWN -j MARK --ipaddr 1
- iptables -t mangle -A QOSUP -j MARK --ipaddr 0
- #根队列初始化
- tc qdisc del dev imq0 root
- tc qdisc del dev imq1 root
- tc qdisc add dev imq0 root handle 1: htb
- tc qdisc add dev imq1 root handle 1: htb
- tc class add dev imq1 parent 1: classid 1:1 htb rate $((UP))kbps
- tc class add dev imq0 parent 1: classid 1:1 htb rate $((DOWN))kbps
- #正常web浏览限速(优先级设置3)
- tc class add dev imq0 parent 1:1 classid 1:255 htb rate $((DOWN*2/10))kbps ceil $((DOWN*8/10))kbps quantum 4000 prio 3
- tc filter add dev imq0 parent 1:0 protocol ip prio 5 handle 255 fw flowid 1:255
- tc class add dev imq1 parent 1:1 classid 1:255 htb rate $((UP*2/10))kbps ceil $((UP*6/10))kbps quantum 2000 prio 3
- tc filter add dev imq1 parent 1:0 protocol ip prio 5 handle 255 fw flowid 1:255
- #惩罚队列限速(优先级设置7,最大下载带宽为总带宽的80%,最大上传带宽为总带宽50%)
- tc class add dev imq1 parent 1:1 classid 1:254 htb rate $((UP/10))kbps ceil $((UP*5/10))kbps prio 7
- tc filter add dev imq1 parent 1:0 protocol ip prio 6 handle 254 fw flowid 1:254
- tc qdisc add dev imq1 parent 1:254 handle 254: pfifo limit 32
- tc class add dev imq0 parent 1:1 classid 1:254 htb rate $((DOWN/10))kbps ceil $((DOWN*8/10))kbps prio 7
- tc filter add dev imq0 parent 1:0 protocol ip prio 6 handle 254 fw flowid 1:254
- tc qdisc add dev imq0 parent 1:254 handle 254: sfq limit 32 perturb 15
- #所有普通IP单独限速(优先级设置5)
- i=$IPS;
- while [ $i -le $IPE ]
- do
- tc class add dev imq1 parent 1:1 classid 1:$i htb rate $((UPLOADR))kbps ceil $((UPLOADC))kbps quantum 1000 prio 5
- tc qdisc add dev imq1 parent 1:$i handle $i: pfifo limit 16
- tc filter add dev imq1 parent 1:0 protocol ip prio 6 handle $i fw classid 1:$i
- tc class add dev imq0 parent 1:1 classid 1:$i htb rate $((DOWNLOADR))kbps ceil $((DOWNLOADC))kbps quantum 1500 prio 5
- tc qdisc add dev imq0 parent 1:$i handle $i: sfq limit 32 perturb 10
- tc filter add dev imq0 parent 1:0 protocol ip prio 6 handle $i fw classid 1:$i
- i=`expr $i + 1`
- done
- #每IP限制TCP连接数80,UDP连接数120,并且对DNS,WEB,QQ等端口例外
- iptables -t mangle -N CONNLMT
- iptables -t mangle -I FORWARD -m state --state NEW -s $NET -p ! icmp -j CONNLMT
- iptables -t mangle -A CONNLMT -p tcp -m connlimit --connlimit-above 80 -j DROP
- iptables -t mangle -A CONNLMT -p ! tcp -m connlimit --connlimit-above 120 -j DROP
- iptables -t mangle -I CONNLMT -p udp -m mport --dports 53,4000:4050 -j RETURN
- iptables -t mangle -I CONNLMT -p tcp -m mport --dports 20:23,25,80,110,443 -j RETURN
- #改变特殊IP限速规则(自己依照说明添加)
最后
以上就是满意皮带为你收集整理的小包优先+web优先+P2P惩罚+单IP限速+连接数限制 QOS脚本V3.0的全部内容,希望文章能够帮你解决小包优先+web优先+P2P惩罚+单IP限速+连接数限制 QOS脚本V3.0所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复