找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19031|回复: 6

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

[复制链接]
发表于 2010-1-14 23:55:57 | 显示全部楼层 |阅读模式
这是一个更加个性化QOS设置。' k7 Q2 [0 I; R) _( Z
心得:最好的方法是看别人的脚本,高手的脚本是怎么写的。Dualwan中3种QOS的脚本都很有水平。
' W$ |" C; z1 O) Y$ ]
5 P: d' S9 l9 J& l脚本测试环境是一条2MADSL,版本是dualwan 1.23.0432,关闭所有其它QOS,把脚本保存到 防火墙脚本 中,重起路由就OK。
9 F- r# X" A/ z该脚本不定义特定接口,采用IMQ(中介队列),直接把源地址和目的地址为192.168.1.0/24的数据包分别送进imq1和imq0虚拟接口。. Z0 u/ c  y( K
imq0控制下载,imq1控制上传。
3 q2 F& ?" u0 `0 f% X' Z在小区宽带应该也可以使用。未在DD-WRT上测试,应该也能使用。8 Q# b$ }, |! P% K( h7 N" H2 L
正常网页浏览和p2p软件冒用用80端口也作了区分。判定逻辑是:一个连接传输数据在200kB以下是网页浏览,数据包放进高优先队列。
, E, A# t  g! V超过后判定为P2P软件冒用,后续数据包放进低优先级队列。(脚本中204800代表200KB)
! Y" [0 }2 u1 `; n$ @& a2 K2 [数据包分类逻辑是:先 小包分类→网页浏览分类→p2p软件冒用80端口→IP地址分类。
/ ~( N1 c8 T" R. h- q; C9 a0 P0 S9 e) i并且每个数据包都只属于一种分类。比如说,一个tcp小包,即使其源IP地址是192.168.1.2,并且目的端口是80,
4 r5 T% c6 n7 M9 }也只会属于小包分类。) P) E" c8 H: R: ]$ Z/ a7 Q
分类的优先级:小包分类=网页浏览(prio 0)  > IP地址分类 (prio 2) > p2p软件冒用80端口(prio 7)' {) @' n- ~/ W1 ]  W
5 F: k5 V" H1 I! G
变量解释:
" x( O8 ~' Z7 m1 c& YUP,DOWN分别是上传和下载总带宽。# e# o# k9 [# |4 D8 F8 E& r) M8 U
UP2R,UP2C,UP3R,UP3C,DOWN2R,DOWN2C,DOWN3R,DOWN3C
% }0 I; u# @6 _' ^! b) q6 g3 K! S2是小包和网页浏览的分类队列编号,3是p2p软件冒用80端口的分类队列编号。UP和DOWN分别代表上行和下载。
: m" g6 @5 i  ~2 S- y1 dR代表rate(保证速率),C代表ceil(最大速率)。+ T% i+ q9 A4 [. t5 B! \
UPLOADR,UPLOADC,DOWNLOADC,DOWNLOADR代表单机速率的4个参数。
, t# y5 r* j8 k$ d. N- _UIP是内网用户IP前缀,NET代表内网网段。; `3 x3 ^2 i& j
UPSP=":128 " 上传数据包中大小在0----128的数据包。(小包,small packets)
8 b# T" \% c# L7 |) ]2 f/ ~DOWNSP=":512" 同上。! M  i0 G$ r% i% s; m8 K: F% T; m' K8 e
IPS="2",开始IP地址192.168.1.2" n9 U8 _0 \: F7 {' G+ ?; W
IPE="8",结束IP地址192.168.1.8! c& ~7 n  y. ]8 Y8 l" v# P: \
, B% N, K5 m' E+ o  q( J4 [
由于每个人的情况不同,参数需要自己做一些调整。
/ l' P$ N! @  ]' P建议:# ?0 O4 W5 S# [$ U+ x& s
1.总带宽最好设小点,以保证更好的网络延迟。
7 {1 N# f: J! @( b9 {6 }+ Y比如2MADSL实际下载可达205KB/S我设180KB/S。(在linux中bps=KB/S)6 k, w3 Y9 n! L3 Z' S! g
2.原则上,所有分类的rate之和小于总rate, 即IP数*UPLOADR+UP2R+UP3R<=UP,IP数*DOWNLOADR+DOWN2R+DOWN2R<=DOWN
, A/ G2 A2 }( e3.UP2R和DOWN2R大约为总带宽1/3。可以自己尝试调整。, p" Z8 t' n. t
4.修改变量时候注意引号,逗号是英文的,空格不要乱加,一旦错误将导致脚本无法运行。
: s9 T' S# o, A. j, G5.最后的连接数限制为TCP 50,UDP 80。可自行修改。1 V: E3 n4 U! u1 y
例外端口可以添加。可以将一些游戏端口添加进去。6 R# K) k# f$ w& p
比如需要例外UDP 53,100---200,3777,14555-145596 l, w, l$ q( |, R/ s
; _3 {3 }' r7 \) Z1 y/ N
iptables -t mangle -I LMT -s 192.168.1.0/24 -p udp -m mport --dports 53 -j RETURN. X' `' g  V, ~' c9 u, t
改成
& y: ^! ?- `% S6 Iiptables -t mangle -I LMT -s 192.168.1.0/24 -p udp -m mport --dports 53,100:200,3777,14555:14559 -j RETURN) D  M1 }  T% \; ~  N3 r5 @! o2 A; t
就OK了。% g& u- P0 ^- b1 L6 A5 B
欢迎各位测试    ! T5 e0 ^) G# x6 D/ g1 w

" }& H' S6 s3 _  U  F& Q; E* _#!/bin/sh
# o$ w; x4 N0 D#变量初始化# z/ }* u9 M& a4 W# ~# \
UP="40kbps": A, }) o: W  l8 ~5 w/ M3 G
DOWN="180kbps"& p) O( `! `1 t* K$ P
UP2R="14kbps"
7 C: v# B$ D, l3 y* kUP2C="20kbps"$ E; |+ J: @! {5 T7 w. d# W2 `1 d
UP3R="1kbps"% q8 s& s' e# W/ }& R$ T$ g
UP3C="10kbps"$ z1 x/ N  o0 s  i! l( ]0 e  K
DOWN2R="60kbps"% |7 l$ X+ V. W+ v' E
DOWN2C="150kbps"
& g% l/ r! y2 A) {9 J$ p  r; \9 _2 nDOWN3R="10kbps"+ }# H9 K/ S, n5 H  c% z
DOWN3C="80kbps"0 u% R* ]! [/ ^7 \" L3 N  {
UPLOADR="1kbps") C3 Q1 I5 Y' N: {8 f' z( }6 o
DOWNLOADR="10kbps"$ @! I  h* H' z, r" b
UPLOADC="6kbps"7 y9 e# w3 T' z' [* G
DOWNLOADC="80kbps": Y# f: y* K  X. h0 c, c
UIP="192.168.1."
( r% G4 V' h+ W' k" ~NET="192.168.1.0/24"
! d5 b! I! `* SUPSP=:1282 u( t& C4 P& C, d( M& G$ W
DOWNSP=:512
5 K9 u3 Y# W0 V- CIPS="2"
3 O5 l' O; f2 w7 h+ {  C) w' ~7 ]IPE="8"# s: b8 X7 i3 B0 n% Q/ R
. u: g* n  A3 Z% H! V1 w
#装载核心模块,创建QOS专用链( |( v; g3 Q: Q9 e; w0 p7 }2 q
insmod imq
3 O, W. ^) k0 A3 B1 d' s8 h4 B: w2 ginsmod ipt_IMQ
6 ]! U5 |0 F5 mifconfig imq1 up) N- k& g" {- G% [/ V
ifconfig imq0 up
9 S* I  D/ W" E  T9 U3 f; @insmod ipt_length.o
$ s4 d  T- n' e9 _iptables -t mangle -N QOSDOWN
# M0 }; H' k& jiptables -t mangle -N QOSUP
% z- n; M6 {5 O) S! B# o) l1 f/ Wiptables -t mangle -I FORWARD -d $NET -j QOSDOWN/ S; Q  _$ b* z" D8 s3 Q0 ~4 Y
iptables -t mangle -I FORWARD -s $NET -j QOSUP+ H/ i* X' |/ \9 v4 O$ \3 p$ X
iptables -t mangle -A QOSDOWN -j IMQ --todev 0
) ~, [: D$ N% C/ uiptables -t mangle -A QOSUP -j IMQ --todev 15 v" U8 [* @0 p" n* Q

, Z, [$ h7 [8 K# h" W4 ^4 P#根队列初始化0 g7 `6 i0 J7 H. A7 |
tc qdisc del dev imq0 root
" T9 F; X2 ~! t% M( _tc qdisc del dev imq1 root8 D+ @1 G+ X% \" B
tc qdisc add dev imq0 root handle 1: htb
. v0 F. \! d, ~+ ^: w1 Y6 s1 htc qdisc add dev imq1 root handle 1: htb" w: X" w7 T6 c; u# l/ e2 ~1 x
tc class add dev imq1 parent 1: classid 1:1 htb rate $UP
- I0 Z5 f; Z+ X5 P) z2 v, Xtc class add dev imq0 parent 1: classid 1:1 htb rate $DOWN4 o. H+ a* d( p( W8 M# O8 c( H" l
1 K. _4 r( I. ~, H
#特殊队列(小包,http)初始化
# L! Y; o- A6 G- ytc class add dev imq0 parent 1:1 classid 1:2 htb rate $DOWN2R ceil $DOWN2C prio 0% E1 \/ K. C& h; j$ `8 ~! }
tc class add dev imq0 parent 1:1 classid 1:3 htb rate $DOWN3R ceil $DOWN2C prio 7% ~, c1 B" G: }, u+ X$ B
tc filter add dev imq0 parent 1:0 protocol ip handle 2 fw flowid 1:2
) ^& R0 M( X! ?tc filter add dev imq0 parent 1:0 protocol ip handle 3 fw flowid 1:3
' t0 ~. ^/ z# P( i4 Yiptables -t mangle -A QOSDOWN -j BCOUNT0 x- X$ N7 Z: H7 G+ P6 a
iptables -t mangle -A QOSDOWN -m length --length $DOWNSP -j MARK --set-mark-return 24 _8 r1 L( @- Y9 L( A2 i
iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 2
0 Q% S  u! Q( z% ?/ c: N% {3 h# j0 Biptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range 204801: -j MARK --set-mark-return 3! k  f7 [# b' G/ k* F
tc class add dev imq1 parent 1:1 classid 1:2 htb rate $UP2R ceil $UP2C prio 0
7 Q$ G' d5 _4 y7 {+ Dtc class add dev imq1 parent 1:1 classid 1:3 htb rate $UP3R ceil $UP3C prio 7
. F! k1 D, \: c" Y; O: D! d: {tc filter add dev imq1 parent 1:0 protocol ip handle 2 fw flowid 1:2; ^; u4 y/ c9 B' q9 S. r; K' V0 p
tc filter add dev imq1 parent 1:0 protocol ip handle 3 fw flowid 1:3
5 T) W  K) T0 E2 u9 G, @6 giptables -t mangle -A QOSUP -j BCOUNT/ X% u9 u% w# {. f
iptables -t mangle -A QOSUP -m length --length :128 -j MARK --set-mark-return 23 M# V8 d- e+ O) W: i
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 2+ c0 t2 M; ?8 a' \3 N6 d
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204801 -j MARK --set-mark-return 37 {/ @# _# j. `
* J7 s! R- r4 B
#特殊IP限速(未给出)0 I9 G% S3 g# H
% {5 A* z7 m" s: n4 ~* _: z
#所有普通IP单独限速
) J& T  P' h6 p7 I- L& c) x2 Mi=$IPS; ( A) g6 M, J; d# J2 O/ B
while [ $i -le $IPE ]
! B2 S" L! Y/ J( e2 t) gdo
& \8 f; n: D, R9 u$ A* ?+ G- X0 Ytc class add dev imq1 parent 1:1 classid 1:1$i htb rate $UPLOADR ceil $UPLOADC prio 2. o- j; c( N6 ?; K2 M
tc qdisc add dev imq1 parent 1:1$i handle 1$i: sfq perturb 15
4 `6 }1 Z9 W; H: s. V4 {! ?' {. atc filter add dev imq1 parent 1:0 protocol ip handle 1$i fw classid 1:1$i
% v# u4 |1 m$ v" ]& b% gtc class add dev imq0 parent 1:1 classid 1:1$i htb rate $DOWNLOADR ceil $DOWNLOADC prio 2
8 F$ B) t+ n* Q- w* Xtc qdisc add dev imq0 parent 1:1$i handle 1$i: sfq perturb 15- |$ w& l& q# u5 S9 S, B
tc filter add dev imq0 parent 1:0 protocol ip handle 1$i fw classid 1:1$i
+ D1 A: h& B( t* Aiptables -t mangle -A QOSUP -s $UIP$i -j MARK --set-mark-return 1$i! E) h" F- ~7 @* s* m5 C
iptables -t mangle -A QOSDOWN -d $UIP$i -j MARK --set-mark-return 1$i. Q, {! {, Y* i* I% Q0 [: A" @: v
i=`expr $i + 1`
- R# h5 @& V1 }4 f8 `done9 B+ H& i6 U% l8 R$ D! B7 {
9 n% {0 g* X" ^
#每IP限制TCP连接数50,UDP连接数80,并且对53,80等端口例外(该模块可以单独使用)& I# O* L, H7 k0 ]+ b
iptables -t mangle -N LMT3 a9 C; x. [' c7 M6 c
iptables -t mangle -I PREROUTING -i br0 -j LMT. w2 }! y+ t4 D
iptables -t mangle -A LMT -p tcp --syn -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP
4 X5 A  h( J! |& _) P& hiptables -t mangle -A LMT -p udp -m udplimit --udplimit-above 80 --udplimit-mask 32 -j DROP * K% ~$ C- S( X( q
iptables -t mangle -I LMT -s 192.168.1.0/24 -p udp -m mport --dports 53 -j RETURN7 {" n- y+ m1 V  I6 H! M
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 | 显示全部楼层
多谢楼主的脚本
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|宽带技术网 |网站地图 粤公网安备44152102000001号

GMT+8, 2025-5-2 02:20 , Processed in 0.025845 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

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