小包优先+web优先+游戏爆发+单IP限速+连接数限制 QOS脚本V2.0

前一版地址: http://bbs.dualwan.cn/thread-12192-1-1.html
PS:其实ZD的dualwan的QOS已经很好了,但是不同的人要求不同,
我这个脚本是专为miniISP多机共享所写。改脚本仅仅适用于dualwan,其他固件或linux PC可能需要改动。

仍然是单WAN的,不打算写多WAN的,多WAN的先飘过。

主要变化有:
1.小包定义发生变化:
上传数据包中长度小于128Byte并且状态为ESTABLISHED的数据包
下载数据包中长度小于256Byte并且状态为ESTABLISHED的数据包
这个ESTABLISHED是什么东东呢?
解释:iptables中数据包有INVALID,ESTABLISHED,NEW,RELATED,UNTRACKED等状态。
具体解释: http://man.chinaunix.net/network ... html#USERLANDSTATES
这个ESTABLISHED指连接已经完全建立的数据包了,而NEW指新建一个连接所使用的第一个数据包。
这样,就排除了那些状态为NEW的小包。
好处:有些人总是热衷于“修改XP最大连接数”来提高BT下载速率。其实这个所谓的“最大连接数”是指“最大并发连接数”,
也就是XP每秒能够发送状态为NEW的数据包,默认值是10。有些垃圾的BT软件将其修改为1000,这样庞大的连接数将会导致
瞬间上传速率非常大,如果将其优先级设置太高,将会导致网络延迟的震荡(一会高一会低)。
PS:“修改XP最大连接数”是无法提高BT下载的速率的,最多可以提高达到最大速率的时间。比如说不修改30秒达到最大速率,修改
后可能10秒就达到最大速率。但是会带来操作系统不稳定,路由器压力增大,蠕虫攻击,网络延迟震荡等不良后果。
微软在IT业混了几十年,从来就不提倡所谓的“修改最大连接数”。

2.不再对利用web端口进行下载BT数据包进行单独的分类,直接进入IP分类。
但正常的web浏览仍然具有较高的优先级。
3. 游戏爆发的定义:
当某个内网IP的速率小于10KB/S的时候,那么该IP的数据包进入“游戏爆发队列”。时间为5秒。
“游戏爆发队列”的优先级仅仅低于“小包队列”

对于那些只玩游戏不下载的IP有帮助。
4.需要修改的参数减少,特殊队列的速率直接用总速率计算,不用用户干预。
5.对特殊IP改变限速规则的方法作了举例说明。
6.连接数限制,单IP限速等没有改变,仅仅做了一些效率优化

用法:打开路由器web管理界面,把脚本粘贴到“系统管理----脚本设置----防火墙----保存”,保存之后重启路由器。
(其实不重启也可以,只要切换到“新增功能---IPID调整----保存”,保存之后,脚本即可生效)
注意最好不要同时开启其它QOS.

可修改参数说明:
网段号:UIP,NET
IPS="2",IPE="8"
开始和结束IP192.168.1.2---192.168.1.8

UP=35,DOWN=180
总上传速率35KB/S,总下载速率180KB/S

UPLOADR=1,UPLOADC=8
单IP保证上传速率1KB/S,最大上传速率8KB/S

DOWNLOADR=$(($DOWN/$((IPE-IPS+5)))),DOWNLOADC=$(($DOWN*80/100))
DOWNLOADR是单IP保证下载速率,DOWNLOADC是最大下载速率。
已经由总下载速率DOWN计算,可自行修改为指定数字。


参数修改建议:
1.总带宽最好设小点,以保证更好的网络延迟。
比如2MADSL实际下载可达205KB/S我设180KB/S。实际上传45KB/S我设置35KB/S。
PS:上传速率对网络延迟的影响比下载更大。
2.修改变量时候注意引号和逗号是英文的,空格不要乱加,一旦错误将导致脚本运行异常
3.保证速率不要调得过大,否则反而缺少“保证”

改变特殊IP限速规则:
(0--7,数字越小优先级越高)普通IP的优先级是5,小包的优先级是0,游戏爆发的优先级是1,web浏览的优先级是3
如果要把192.168.1.5限速为:保证上传5KB/S,最大上传20KB/S,保证下载30KB/S,最大下载180KB/S,并且改IP优先级是4,
只需要在脚本的最后加上:
tc class replace dev imq1 parent 1:1 classid 1:5 htb rate 5kbps ceil 20kbpskbps prio 4
tc class replace dev imq0 parent 1:1 classid 1:5 htb rate 30kbps ceil 180kbpskbps prio 4
tc qdisc replace dev imq1 parent 1:5 handle 5: sfq perturb 15
tc qdisc replace dev imq0 parent 1:5 handle 5: sfq perturb 15
其中1:5,5:和IP尾数相关(因为192.168.1.5的尾数是5),prio 4表示优先级是4(比一般IP优先级高)
再比如要把经常BT下载的192.168.1.7限速:保证上传1KB/S,最大上传5KB/S,保证下载5KB/S,最大下载50KB/S,并且改IP优先级是6,
只需要在脚本的最后加上:
tc class replace dev imq1 parent 1:1 classid 1:7 htb rate 1kbps ceil 5kbpskbps prio 6
tc class replace dev imq0 parent 1:1 classid 1:7 htb rate 5kbps ceil 50kbpskbps prio 6
tc qdisc replace dev imq1 parent 1:7 handle 7: sfq perturb 15
tc qdisc replace dev imq0 parent 1:7 handle 7: sfq perturb 15
依次类推,想加的特殊IP限速规则都可以添加。


脚本如下:(以#开头的说明性文字可以删除,第1行除外  好用的吼下,不好用自己闷头揣摩,或则当我是骗子也可以  )
  1. #copyright by zhoutao0712
  2. #变量初始化(速率单位是KB/S)
  3. UIP="192.168.1."
  4. NET="192.168.1.0/24"
  5. IPS="2"
  6. IPE="8"
  7. UP=35
  8. DOWN=180
  9. UPLOADR=1
  10. UPLOADC=8
  11. DOWNLOADR=$(($DOWN/$((IPE-IPS+5))))
  12. DOWNLOADC=$(($DOWN*80/100))
  13. #装载核心模块,创建QOS专用链
  14. insmod imq
  15. insmod ipt_IMQ
  16. insmod ipt_length.o
  17. insmod ipt_hashlimit.o
  18. ifconfig imq1 up
  19. ifconfig imq0 up
  20. iptables -t mangle -N QOSDOWN
  21. iptables -t mangle -N QOSUP
  22. iptables -t mangle -I FORWARD -s $NET -j QOSUP
  23. iptables -t mangle -I FORWARD -d $NET -j QOSDOWN
  24. iptables -t mangle -A QOSDOWN -j IMQ --todev 0   // 
  25. iptables -t mangle -A QOSUP -j IMQ --todev 1
  26. #在5秒内平均下载速率小于10KB/S的IP进入高优先级队列253
  27. iptables -t mangle -N GAME_BURST
  28. iptables -t mangle -A QOSDOWN -m length --length 256: -j GAME_BURST
  29. iptables -t mangle -A GAME_BURST -m hashlimit --hashlimit 10/sec --hashlimit-burst 100 --hashlimit-mode dstip --hashlimit-name game_burst -j RETURN
  30. iptables -t mangle -A GAME_BURST -m recent --rdest --name game_burst --set -j RETURN
  31. iptables -t mangle -A QOSDOWN -m recent --rdest --name game_burst ! --rcheck  --seconds 5 -j MARK --set-mark-return 253
  32. iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -j BCOUNT
  33. iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range :307200 -j MARK --set-mark-return 255
  34. iptables -t mangle -A QOSDOWN -m state --state ESTABLISHED -m length --length :256 -j MARK --set-mark-return 254
  35. iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -j BCOUNT
  36. iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 255
  37. iptables -t mangle -A QOSUP -m state --state ESTABLISHED -m length --length :128 -j MARK --set-mark-return 254 // 什么个意思??打完标记返回吗???
  38. iptables -t mangle -I QOSUP -m state --state NEW -p udp --dport 53 -j RETURN
  39. iptables -t mangle -A QOSDOWN -j MARK --ipaddr 1  // 什么个意思????找不到相关资料呀
  40. iptables -t mangle -A QOSUP -j MARK --ipaddr 0
  41. #根队列初始化
  42. tc qdisc del dev imq0 root
  43. tc qdisc del dev imq1 root
  44. tc qdisc add dev imq0 root handle 1: htb
  45. tc qdisc add dev imq1 root handle 1: htb
  46. tc class add dev imq1 parent 1: classid 1:1 htb rate $((UP))kbps
  47. tc class add dev imq0 parent 1: classid 1:1 htb rate $((DOWN))kbps
  48. #小包,web浏览和游戏爆发队列限速
  49. tc class add dev imq1 parent 1:1 classid 1:254 htb rate $((UP))kbps quantum 12000 prio 0
  50. tc class add dev imq1 parent 1:1 classid 1:255 htb rate $((UP/5))kbps ceil $((UP/2))kbps quantum 2000 prio 3
  51. tc filter add dev imq1 parent 1:0 protocol ip prio 5 handle 255 fw flowid 1:255
  52. tc filter add dev imq1 parent 1:0 protocol ip prio 4 handle 254 fw flowid 1:254
  53. tc class add dev imq0 parent 1:1 classid 1:254 htb rate $((DOWN))kbps quantum 12000 prio 0
  54. tc class add dev imq0 parent 1:1 classid 1:255 htb rate $((DOWN*20/100))kbps ceil $((DOWN*80/100))kbps prio 3
  55. tc filter add dev imq0 parent 1:0 protocol ip prio 5 handle 255 fw flowid 1:255
  56. tc filter add dev imq0 parent 1:0 protocol ip prio 4 handle 254 fw flowid 1:254
  57. tc class add dev imq0 parent 1:1 classid 1:253 htb rate $((DOWN/2))kbps quantum 5000 prio 1
  58. tc filter add dev imq0 parent 1:0 protocol ip prio 5 handle 253 fw flowid 1:253
  59. #所有普通IP单独限速
  60. i=$IPS; 
  61. while [ $i -le $IPE ] 
  62. do
  63. tc class add dev imq1 parent 1:1 classid 1:$i htb rate $((UPLOADR))kbps ceil $((UPLOADC))kbps quantum 1000 prio 5
  64. tc qdisc add dev imq1 parent 1:$i handle $i: sfq perturb 15

  65. // 都没有iptables 对每个IP打标记,怎么进入 class 1:$i 呢????
    1. iptables -t mangle -A QOSUP -s $UIP$i -j MARK --set-mark-return 1$i
    2. iptables -t mangle -A QOSDOWN -d $UIP$i -j MARK --set-mark-return 1$i

  66. tc filter add dev imq1 parent 1:0 protocol ip prio 6 handle $i fw classid 1:$i 
  67. tc class add dev imq0 parent 1:1 classid 1:$i htb rate $((DOWNLOADR))kbps ceil $((DOWNLOADC))kbps quantum 1000 prio 5
  68. tc qdisc add dev imq0 parent 1:$i handle $i: sfq perturb 15
  69. tc filter add dev imq0 parent 1:0 protocol ip prio 6 handle $i fw classid 1:$i
  70. i=`expr $i + 1` 
  71. done
  72. #每IP限制TCP连接数100,UDP连接数150,并且对DNS,WEB,QQ等端口例外
  73. iptables -t mangle -N CONNLMT
  74. iptables -t mangle -I FORWARD -m state --state NEW -s $NET -j CONNLMT
  75. iptables -t mangle -A CONNLMT -p tcp -m connlimit --connlimit-above 100 -j DROP
  76. iptables -t mangle -A CONNLMT -p ! tcp -m connlimit --connlimit-above 150 -j DROP
  77. iptables -t mangle -I CONNLMT -p udp -m mport --dports 53,4000:8000 -j RETURN
  78. iptables -t mangle -I CONNLMT -p tcp -m mport --dports 20:23,25,80,110,443 -j RETURN
  79. #改变特殊IP限速规则(自己依照说明添加)
复制代码



  1. #!/bin/sh
  2. #参数N表示你申请几M宽带(ADSL),2M就填2,4M就填4,以此类推,N只能为正整数。IPS是开始IP地址,IPE是结束IP地址。其它参数都可以不填。
  3. #对于小区宽带(或自己想依据实际情况修改),UP和DOWN分别表示总带宽的上行和下行,UPLOADC和DOWNLOADC是单机的最大上行和下行。
  4. #建议UPLOADC<=40%UP,DOWNLOADC<=70%DOWN,如果共享电脑比较多,可修改得更小一点。
  5. #实际p2p下载时,最大值有可能超过DOWNLOADC,因为“小包”和web下载还有额外的带宽。所有带宽动态共享。
  6. #NTCP和NUDP分别是单机TCP和UDP连接数限制(常见端口如53,80等不受限制)
  7. IPS=2
  8. IPE=8
  9. N=2
  10. NTCP=60
  11. NUDP=100
  12. DOWN=$(($N * 90))kbps
  13. DOWNLOADC=$(($N*90*60/100))kbps
  14. UP="40kbps"
  15. UPLOADC="8kbps"
  16. #下面参数已经自动依据N值计算(一般不需要修改)
  17. DOWN2R=$(($N*90*35/100))kbps
  18. DOWN2C=$(($N*90*80/100))kbps
  19. DOWN3R=$(($N*90*5/100))kbps
  20. DOWN3C=$(($N*90*40/100))kbps
  21. DOWNLOADR=$(($N*90*60/100/$(($IPE-IPS+1))))kbps
  22. UP2R="14kbps"
  23. UP2C="20kbps"
  24. UP3R="1kbps"
  25. UP3C="8kbps"
  26. UPLOADR="1kbps"
  27. UIP="192.168.1."
  28. NET="192.168.1.0/24"
  29. UPSP=:128
  30. DOWNSP=:512

  31. #装载核心模块,创建QOS专用链
  32. insmod imq
  33. insmod  ipt_IMQ
  34. ifconfig imq1 up
  35. ifconfig imq0 up
  36. insmod ipt_length.o
  37. iptables -t mangle -N QOSDOWN
  38. iptables -t mangle -N QOSUP
  39. iptables -t mangle -I FORWARD -d $NET -j QOSDOWN
  40. iptables -t mangle -I FORWARD -s $NET -j QOSUP
  41. iptables -t mangle -A QOSDOWN -j IMQ --todev 0
  42. iptables -t mangle -A QOSUP -j IMQ --todev 1

  43. #单机限制TCP连接数50,UDP连接数80,并且对53,80等端口例外
  44. iptables -t mangle -N LMT
  45. iptables -t mangle -N UDPLIMIT
  46. iptables -t mangle -I PREROUTING -i br0 -j LMT
  47. iptables -t mangle -A LMT -p tcp --syn -m connlimit --connlimit-above $NTCP --connlimit-mask 32 -j DROP
  48. iptables -t mangle -A LMT -p ! tcp -m connlimit --connlimit-above $NUDP --connlimit-mask 32 -j UDPLIMIT
  49. iptables -t mangle -A UDPLIMIT -m state --state NEW -j DROP
  50. iptables -t mangle -I LMT -s $NET -p udp -m mport --dports 53 -j RETURN
  51. iptables -t mangle -I LMT -s $NET -p tcp -m mport --dports 20:23,25,53,80,110,443 -j RETURN

  52. #根队列初始化
  53. tc qdisc del dev imq0 root
  54. tc qdisc del dev imq1 root
  55. tc qdisc add dev imq0 root handle 1: htb
  56. tc qdisc add dev imq1 root handle 1: htb
  57. tc class add dev imq1 parent 1: classid 1:1 htb rate $UP
  58. tc class add dev imq0 parent 1: classid 1:1 htb rate $DOWN
  59. #特殊队列(小包,http)初始化
  60. tc class add dev imq0 parent 1:1 classid 1:2 htb rate $DOWN2R ceil $DOWN2C prio 0
  61. tc class add dev imq0 parent 1:1 classid 1:3 htb rate $DOWN3R ceil $DOWN3C prio 7
  62. tc filter add dev imq0 parent 1:0 protocol ip handle 2 fw flowid 1:2
  63. tc filter add dev imq0 parent 1:0 protocol ip handle 3 fw flowid 1:3
  64. iptables -t mangle -A QOSDOWN -m length --length $DOWNSP -j MARK --set-mark-return 2
  65. iptables -t mangle -A QOSDOWN -p tcp -j BCOUNT
  66. iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range :307200 -j MARK --set-mark-return 2
  67. iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range 307201: -j MARK --set-mark-return 3
  68. tc class add dev imq1 parent 1:1 classid 1:2 htb rate $UP2R ceil $UP2C prio 0
  69. tc class add dev imq1 parent 1:1 classid 1:3 htb rate $UP3R ceil $UP3C prio 7
  70. tc filter add dev imq1 parent 1:0 protocol ip handle 2 fw flowid 1:2
  71. tc filter add dev imq1 parent 1:0 protocol ip handle 3 fw flowid 1:3
  72. iptables -t mangle -A QOSUP -m length --length $UPSP -j MARK --set-mark-return 2
  73. iptables -t mangle -A QOSUP -p tcp -j BCOUNT
  74. iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 2
  75. iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204801 -j MARK --set-mark-return 3

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


复制代码
小包优先+web优先+2千多条游戏服务器IP优先+游戏爆发+连接数限制 番茄概念QOS脚本 主要概念: 1.小包优先定义: 上传数据包中长度小于128Byte并且状态为ESTABLISHED的数据包 下载数据包中长度小于256Byte并且状态为ESTABLISHED的数据包 这个ESTABLISHED是什么东东呢? 解释:TCP数据包有INVALID,ESTABLISHED,NEW,RELATED,UNTRACKED等状态。 具体解释:http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html#USERLANDSTATES 这个ESTABLISHED指连接已经完全建立的数据包了,而NEW指新建一个连接所使用的第一个数据包。 这样,就排除了那些状态为NEW的小包。 好处:有些人总是热衷于“修改XP最大连接数”来提高BT下载速率。其实这个所谓的“最大连接数”是指“最大并发连接数”, 也就是XP每秒能够发送状态为NEW的数据包,默认值是10。有些垃圾的BT软件将其修改为1000,这样庞大的连接数将会导致 瞬间上传速率非常大,如果将其优先级设置太高,将会导致网络延迟的震荡(一会高一会低)。 PS:“修改XP最大连接数”是无法提高BT下载的速率的,最多可以提高达到最大速率的时间。比如说不修改30秒达到最大速率,修改 后可能10秒就达到最大速率。但是会带来操作系统不稳定,路由器压力增大,蠕虫攻击,网络延迟震荡等不良后果。 微软在IT业混了几十年,从来就不提倡所谓的“修改最大连接数”。 2.正常的web浏览相对于下载BT数据包具有较高的优先级。 3.游戏爆发的定义: 当某个内网IP的速率小于50KB/S的时候,那么该IP的数据包进入“游戏爆发队列”。时间为10秒。 “游戏爆发队列”的优先级仅仅低于“游戏队列” 对于那些只玩游戏不下载的IP有帮助。 4.连接数限制。PS:tcp连接数在ROS各版本均可用,UDP连接数则需在5.X以上支持! 每IP限制TCP连接数100,UDP连接数150,并且对DNS,WEB,QQ等端口例外 不过在此我并未加入在脚本里,大家可以自行添加。 ex: TCP限线程 /ip firewall filter add chain=forward protocol=tcp tcp-flags=syn connection-limit=100,32 action=drop 创奇高手 QQ:550453843 Q群:500人总群 ROS总基地 群号:7217877(拥挤) 新群 创奇网络社区ROS总基地 群号:143322592(推荐) 新群 创奇网络社区ROS总基地 群号:139532314 (推荐) 创奇网络社区|ROS总基地 专注于ROS软路由技术!专注于互联网IT前沿技术!http://bbs.chanki.net 提倡互助分享精神!打造一个集IT资讯,网吧技术,网络技术,资源共享,硬件数码等的一体化交流社区!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值