# 2015-8-14 by cheng1196 qq372693586
#这是OPENWRT固件与Tomato固件通用智能限速脚本
#装载核心模块
insmod cls_u32
insmod em_u32
insmod act_connmark
insmod act_mirred
insmod sch_ingress
insmod cls_fw
insmod sch_htb
insmod sch_sfq
insmod sch_red
#设置局域网处于192.168.1.0的网段
UIP="192.168.1."
NET="192.168.1.0/24"
#设置限速的ip地址192.168.1.100到192.168.1.130
#DHCP分配也需要设置192.168.1.100到192.168.1.130
IPS="100"
IPE="130"
#设置宽带的最大上传下载速度,UP上传,DOWN下载,1兆等于128,这是20兆光纤上传与下载
UP=384
DOWN=2560
#装载核心模块,创建QOS专用链
insmod imq
ifconfig imq1 up
ifconfig imq0 up
iptables -t mangle -N QOSUP
iptables -t mangle -N QOSDOWN
iptables -t mangle -A FORWARD -s $NET -d ! $NET -p ! icmp -j QOSUP
iptables -t mangle -A FORWARD -d $NET -s ! $NET -p ! icmp -j QOSDOWN
iptables -t mangle -A QOSUP -j IMQ --todev 1
iptables -t mangle -A QOSDOWN -j IMQ --todev 0
iptables -t mangle -A QOSUP -p udp --dport 53 -j RETURN
iptables -t mangle -A QOSUP -m length --length :512 -j RETURN
iptables -t mangle -A QOSDOWN -p udp --sport 53 -j RETURN
iptables -t mangle -A QOSDOWN -m length --length :512 -j RETURN
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 imq0 parent 1: classid 1:1 htb rate $((DOWN))kbps
tc class add dev imq1 parent 1: classid 1:1 htb rate $((UP))kbps
i=$IPS;
while [ $i -le $IPE ]
do
tc class add dev imq1 parent 1:1 classid 1:$i htb rate $((UP/32))kbps ceil $((UP/16*4))kbps quantum 1500 prio 5
tc qdisc add dev imq1 parent 1:$i handle $i: sfq limit 64 perturb 10
tc filter add dev imq1 parent 1: protocol ip prio 100 handle $i fw classid 1:$i
tc class add dev imq0 parent 1:1 classid 1:$i htb rate $((DOWN/32))kbps ceil $((DOWN/16*14))kbps quantum 3001 mtu 3200 prio 5
tc qdisc add dev imq0 parent 1:$i handle $i: sfq perturb 10
tc filter add dev imq0 parent 1: protocol ip prio 100 handle $i fw classid 1:$i
iptables -t mangle -A QOSUP -s $UIP$i -j MARK --set-mark $i
iptables -t mangle -A QOSDOWN -d $UIP$i -j MARK --set-mark $i
i=`expr $i + 1`
done