Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1333087
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类: LINUX

2010-03-14 15:48:07

脚本测试环境是一条2MADSL,版本是dualwan 1.23.0432,关闭所有其它QOS,把脚本保存到 防火墙脚本 中,重起路由就OK。
该脚本不定义特定接口,采用IMQ(中介队列),直接把源地址和目的地址为192.168.1.0/24的数据包分别送进imq1和imq0虚拟接口。
imq0控制下载,imq1控制上传。
在小区宽带应该也可以使用。未在DD-WRT上测试,应该也能使用。
正常网页浏览和p2p软件冒用用80端口也作了区分。判定逻辑是:一个连接传输数据在200kB以下是网页浏览,数据包放进高优先队列。
超过后判定为P2P软件冒用,后续数据包放进低优先级队列。(脚本中204800代表200KB)
数据包分类逻辑是:先 小包分类→网页浏览分类→p2p软件冒用80端口→IP地址分类。
并且每个数据包都只属于一种分类。比如说,一个tcp小包,即使其源IP地址是192.168.1.2,并且目的端口是80,
也只会属于小包分类。
分类的优先级:小包分类=网页浏览(prio 0)   > IP地址分类 (prio 2) > p2p软件冒用80端口(prio 7)


#!/bin/sh
#变量初始化
UP="40kbps"
DOWN="180kbps"
UP2R="14kbps"
UP2C="20kbps"
UP3R="1kbps"
UP3C="10kbps"
DOWN2R="70kbps"
DOWN2C="150kbps"
DOWN3R="10kbps"
DOWN3C="80kbps"
UPLOADR="1kbps"
DOWNLOADR="10kbps"
UPLOADC="6kbps"
DOWNLOADC="80kbps"
UIP="192.168.1."
NET="192.168.1.0/24"
UPSP=:128
DOWNSP=:512
IPS="2"
IPE="8"

#装载核心模块,创建QOS专用链
insmod imq
insmod ipt_IMQ
ifconfig imq1 up
ifconfig imq0 up
insmod ipt_length.o
iptables -t mangle -N QOSDOWN
iptables -t mangle -N QOSUP
iptables -t mangle -I FORWARD -d $NET -j QOSDOWN
iptables -t mangle -I FORWARD -s $NET -j QOSUP
iptables -t mangle -A QOSDOWN -j IMQ --todev 0
iptables -t mangle -A QOSUP -j IMQ --todev 1

#根队列初始化
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
tc class add dev imq0 parent 1: classid 1:1 htb rate $DOWN

#特殊队列(小包,http)初始化
tc class add dev imq0 parent 1:1 classid 1:2 htb rate $DOWN2R ceil $DOWN2C prio 0
tc class add dev imq0 parent 1:1 classid 1:3 htb rate $DOWN3R ceil $DOWN2C prio 7
tc filter add dev imq0 parent 1:0 protocol ip handle 2 fw flowid 1:2
tc filter add dev imq0 parent 1:0 protocol ip handle 3 fw flowid 1:3
iptables -t mangle -A QOSDOWN -j BCOUNT
iptables -t mangle -A QOSDOWN -m length --length $DOWNSP -j MARK --set-mark-return 2
iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 2
iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range 204801: -j MARK --set-mark-return 3
tc class add dev imq1 parent 1:1 classid 1:2 htb rate $UP2R ceil $UP2C prio 0
tc class add dev imq1 parent 1:1 classid 1:3 htb rate $UP3R ceil $UP3C prio 7
tc filter add dev imq1 parent 1:0 protocol ip handle 2 fw flowid 1:2
tc filter add dev imq1 parent 1:0 protocol ip handle 3 fw flowid 1:3
iptables -t mangle -A QOSUP -j BCOUNT
iptables -t mangle -A QOSUP -m length --length :128 -j MARK --set-mark-return 2
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 2
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range 204801: -j MARK --set-mark-return 3

#特殊IP限速(未给出)

#所有普通IP单独限速
i=$IPS;
while [ $i -le $IPE ]
do
tc class add dev imq1 parent 1:1 classid 1:1$i htb rate $UPLOADR ceil $UPLOADC prio 2
tc qdisc add dev imq1 parent 1:1$i handle 1$i: sfq perturb 15
tc filter add dev imq1 parent 1:0 protocol ip handle 1$i fw classid 1:1$i
tc class add dev imq0 parent 1:1 classid 1:1$i htb rate $DOWNLOADR ceil $DOWNLOADC prio 2
tc qdisc add dev imq0 parent 1:1$i handle 1$i: sfq perturb 15
tc filter add dev imq0 parent 1:0 protocol ip handle 1$i fw classid 1:1$i
iptables -t mangle -A QOSUP -s $UIP$i -j MARK --set-mark-return 1$i
iptables -t mangle -A QOSDOWN -d $UIP$i -j MARK --set-mark-return 1$i
i=`expr $i + 1`
done

#每IP限制TCP连接数50,UDP连接数80,并且对53,80等端口例外(该模块可以单独使用)
iptables -t mangle -N LMT
iptables -t mangle -I PREROUTING -i br0 -j LMT
iptables -t mangle -A LMT -p tcp --syn -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP
iptables -t mangle -A LMT -p udp -m udplimit --udplimit-above 60 --udplimit-mask 32 -j DROP
iptables -t mangle -I LMT -s 192.168.1.0/24 -p udp -m mport --dports 53 -j RETURN
iptables -t mangle -I LMT -s 192.168.1.0/24 -p tcp -m mport --dports 20:23,25,53,80,110,443 -j RETURN

阅读(1300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~