找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16502|回复: 6

[Tomato] 第三方固件:番茄TOMATO固件设置小包优先+WEB优先+IP限速+连接数限制 的脚本

[复制链接]
发表于 2010-1-14 23:55:57 | 显示全部楼层 |阅读模式
这是一个更加个性化QOS设置。
心得:最好的方法是看别人的脚本,高手的脚本是怎么写的。Dualwan中3种QOS的脚本都很有水平。

脚本测试环境是一条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)

变量解释:
UP,DOWN分别是上传和下载总带宽。
UP2R,UP2C,UP3R,UP3C,DOWN2R,DOWN2C,DOWN3R,DOWN3C
2是小包和网页浏览的分类队列编号,3是p2p软件冒用80端口的分类队列编号。UP和DOWN分别代表上行和下载。
R代表rate(保证速率),C代表ceil(最大速率)。
UPLOADR,UPLOADC,DOWNLOADC,DOWNLOADR代表单机速率的4个参数。
UIP是内网用户IP前缀,NET代表内网网段。
UPSP=":128 " 上传数据包中大小在0----128的数据包。(小包,small packets)
DOWNSP=":512" 同上。
IPS="2",开始IP地址192.168.1.2
IPE="8",结束IP地址192.168.1.8

由于每个人的情况不同,参数需要自己做一些调整。
建议:
1.总带宽最好设小点,以保证更好的网络延迟。
比如2MADSL实际下载可达205KB/S我设180KB/S。(在linux中bps=KB/S)
2.原则上,所有分类的rate之和小于总rate, 即IP数*UPLOADR+UP2R+UP3R<=UP,IP数*DOWNLOADR+DOWN2R+DOWN2R<=DOWN
3.UP2R和DOWN2R大约为总带宽1/3。可以自己尝试调整。
4.修改变量时候注意引号,逗号是英文的,空格不要乱加,一旦错误将导致脚本无法运行。
5.最后的连接数限制为TCP 50,UDP 80。可自行修改。
例外端口可以添加。可以将一些游戏端口添加进去。
比如需要例外UDP 53,100---200,3777,14555-14559

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 udp -m mport --dports 53,100:200,3777,14555:14559 -j RETURN
就OK了。
欢迎各位测试   

#!/bin/sh
#变量初始化
UP="40kbps"
DOWN="180kbps"
UP2R="14kbps"
UP2C="20kbps"
UP3R="1kbps"
UP3C="10kbps"
DOWN2R="60kbps"
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 80 --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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-3-5 00:35:04 | 显示全部楼层
多谢老大指点!!
发表于 2010-5-9 17:54:55 | 显示全部楼层
多谢发的好软件
发表于 2010-7-25 06:47:07 | 显示全部楼层
试试看效果如何。
luorobin 该用户已被删除
发表于 2010-10-13 21:29:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
minifish 该用户已被删除
发表于 2010-12-21 19:12:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-3-5 18:12:49 | 显示全部楼层
多谢楼主的脚本
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|宽带技术网 |网站地图

粤公网安备 44152102000001号

GMT+8, 2024-4-30 00:11 , Processed in 0.029079 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表