这是一个更加个性化QOS设置。
$ L( _, p2 s' N" p7 }- O心得:最好的方法是看别人的脚本,高手的脚本是怎么写的。Dualwan中3种QOS的脚本都很有水平。2 }: [6 m7 I& j2 A1 s
. q* U( N: P! K9 g# x% `7 v B脚本测试环境是一条2MADSL,版本是dualwan 1.23.0432,关闭所有其它QOS,把脚本保存到 防火墙脚本 中,重起路由就OK。
5 [) R$ v* H) W; \该脚本不定义特定接口,采用IMQ(中介队列),直接把源地址和目的地址为192.168.1.0/24的数据包分别送进imq1和imq0虚拟接口。+ A b5 v' z5 Y/ R9 \9 Z
imq0控制下载,imq1控制上传。
# ~7 V, R- y( Q在小区宽带应该也可以使用。未在DD-WRT上测试,应该也能使用。/ a. ~6 X0 N1 c3 f. T9 h) u% @
正常网页浏览和p2p软件冒用用80端口也作了区分。判定逻辑是:一个连接传输数据在200kB以下是网页浏览,数据包放进高优先队列。
, [. F" ~' `( n1 W7 ? B超过后判定为P2P软件冒用,后续数据包放进低优先级队列。(脚本中204800代表200KB)
2 F/ A8 f; T- q* T0 t数据包分类逻辑是:先 小包分类→网页浏览分类→p2p软件冒用80端口→IP地址分类。
8 p8 P7 K Z2 R6 n+ L) b并且每个数据包都只属于一种分类。比如说,一个tcp小包,即使其源IP地址是192.168.1.2,并且目的端口是80,
' A8 W+ p) q$ f4 m* R. w也只会属于小包分类。
7 f1 }+ U) W% m* y$ L分类的优先级:小包分类=网页浏览(prio 0) > IP地址分类 (prio 2) > p2p软件冒用80端口(prio 7) c# K: |$ U. ]" Y/ b$ F
+ I1 z! u; W( L) }变量解释:
8 ^# W+ W5 V& M" e; P# E7 X6 ZUP,DOWN分别是上传和下载总带宽。
+ z4 v$ x1 l* M) O9 J' s6 Y. v: IUP2R,UP2C,UP3R,UP3C,DOWN2R,DOWN2C,DOWN3R,DOWN3C$ ?9 {0 ? f8 p n6 {, }) s: [
2是小包和网页浏览的分类队列编号,3是p2p软件冒用80端口的分类队列编号。UP和DOWN分别代表上行和下载。
7 p' m7 T9 A* p& _R代表rate(保证速率),C代表ceil(最大速率)。" |4 G2 K" [; C @; @2 H
UPLOADR,UPLOADC,DOWNLOADC,DOWNLOADR代表单机速率的4个参数。
% h+ Z e" \9 pUIP是内网用户IP前缀,NET代表内网网段。
- I! O: i& W0 tUPSP=":128 " 上传数据包中大小在0----128的数据包。(小包,small packets)
; }3 b+ D2 Q/ W0 O% H7 ] nDOWNSP=":512" 同上。
" I% h$ z% ]5 r! \+ V1 sIPS="2",开始IP地址192.168.1.2
# m5 |' B0 V- ~% c+ C( P yIPE="8",结束IP地址192.168.1.8
9 @. R0 K. U- R, N' u& l0 }# `. ^& n) z
由于每个人的情况不同,参数需要自己做一些调整。! ?/ Y& L# c* f0 y5 b
建议:
7 D! R, @% R. Q" k9 @7 M0 c4 z7 L6 f1.总带宽最好设小点,以保证更好的网络延迟。
( Y3 n$ y0 v* K1 X比如2MADSL实际下载可达205KB/S我设180KB/S。(在linux中bps=KB/S)
" Z+ p' H: `8 F2 E+ e) V2.原则上,所有分类的rate之和小于总rate, 即IP数*UPLOADR+UP2R+UP3R<=UP,IP数*DOWNLOADR+DOWN2R+DOWN2R<=DOWN! `5 c2 k, t) d% g7 |& Y& R
3.UP2R和DOWN2R大约为总带宽1/3。可以自己尝试调整。
4 Y: J# F6 z: |) y0 h4.修改变量时候注意引号,逗号是英文的,空格不要乱加,一旦错误将导致脚本无法运行。; y4 \4 T, _* d4 g0 i
5.最后的连接数限制为TCP 50,UDP 80。可自行修改。
$ i5 B8 Y2 X- d7 M% ~) y0 T例外端口可以添加。可以将一些游戏端口添加进去。( @/ o6 H/ m5 A$ H( R% G
比如需要例外UDP 53,100---200,3777,14555-14559* X) x# P5 I9 T+ F
将8 n4 Z+ h) @7 N }: M9 {
iptables -t mangle -I LMT -s 192.168.1.0/24 -p udp -m mport --dports 53 -j RETURN
. d0 }4 J2 M F* F5 R, |7 J" e) P# C改成" s& S( K9 i$ P9 Z9 M
iptables -t mangle -I LMT -s 192.168.1.0/24 -p udp -m mport --dports 53,100:200,3777,14555:14559 -j RETURN1 G W' i- [4 h
就OK了。
7 M/ z% X" @6 {& b; U X欢迎各位测试
% b8 F4 M. P0 s* ?5 B( U& |# `/ _7 ^# ^9 K, A
#!/bin/sh
$ K& z2 T$ y7 m" F( m3 W0 U#变量初始化
) ~5 w& [; e/ N. }% u$ V) z& LUP="40kbps"
r% j) ]/ M% _4 o1 t8 sDOWN="180kbps"
3 a) w% s. r( Z0 m4 G8 KUP2R="14kbps"
( r% ?3 G+ \2 o# `+ P; r$ \UP2C="20kbps"' B/ H9 I0 D$ R/ w% a+ g
UP3R="1kbps"% |* r4 o+ x, V3 H
UP3C="10kbps"
8 J; z0 Y7 j* e6 Y4 YDOWN2R="60kbps"' i6 G) _" Q [- H! G/ T {. N% }: S
DOWN2C="150kbps". p; m; s: J8 B; T6 O9 R
DOWN3R="10kbps"* {, _" W3 x' ~% O( S+ a! k, l
DOWN3C="80kbps"( q" o" d2 |2 o# v- @0 a* Q
UPLOADR="1kbps"
% W9 B% O! j$ t6 w; BDOWNLOADR="10kbps"( @- t. k( ]8 K/ G6 w# l: c5 A4 H
UPLOADC="6kbps"
4 Q! M. q/ \0 O8 g% X3 NDOWNLOADC="80kbps"/ z3 k) P) m1 e. Z& O/ w# F1 s# z
UIP="192.168.1."
& g1 ? ^) T6 g: T( H5 ~5 V" oNET="192.168.1.0/24"
) h: o% y4 b: GUPSP=:128& e1 f# | z+ O$ k E
DOWNSP=:512+ _$ e' I* ^3 h2 z1 S6 H) t" y% \
IPS="2"5 H, j$ W( D$ M- I" y
IPE="8"( ]& ]! F6 ^1 R6 I6 z z0 l
/ H2 E: b d1 M( y& v' M$ w6 F) Z#装载核心模块,创建QOS专用链
2 D# e# `5 `8 j0 ^insmod imq# ~2 w9 i! j6 H. S4 U! v
insmod ipt_IMQ$ x3 m6 `( { G7 r5 X5 a
ifconfig imq1 up
$ f# C R9 Q: H4 M: W: f# hifconfig imq0 up! Z4 y7 w( Q/ y, I$ n# m
insmod ipt_length.o
" l7 K/ ~& J0 O" U5 w+ eiptables -t mangle -N QOSDOWN
8 y4 i W' }" }' w9 Riptables -t mangle -N QOSUP
. |3 F8 `2 S. j6 V! j- ^iptables -t mangle -I FORWARD -d $NET -j QOSDOWN3 g- k) y1 |4 `7 H& K6 h7 d3 }
iptables -t mangle -I FORWARD -s $NET -j QOSUP; Q" Y7 _) z5 p1 Z
iptables -t mangle -A QOSDOWN -j IMQ --todev 0
. m5 Z; i5 m! y3 y) u* ^3 Giptables -t mangle -A QOSUP -j IMQ --todev 1
, \3 Y6 A, j- F; t* h6 ~5 Y3 H% A$ H
#根队列初始化) b; f9 }& j9 n
tc qdisc del dev imq0 root
' r, J/ R$ [) p6 Wtc qdisc del dev imq1 root
1 v, ^% _5 i/ P, F) r& ~7 ytc qdisc add dev imq0 root handle 1: htb: c* ?; r+ A5 O3 p: w
tc qdisc add dev imq1 root handle 1: htb& u' m. D- e% s5 v
tc class add dev imq1 parent 1: classid 1:1 htb rate $UP
/ ^ X: Y% W" Q9 x. m: t2 |tc class add dev imq0 parent 1: classid 1:1 htb rate $DOWN' O+ C# Y4 E6 Q# h- }1 o/ p
" i* S9 k, T- G2 ]* r
#特殊队列(小包,http)初始化
- p2 A" S3 w) y' S% T3 V( n: {tc class add dev imq0 parent 1:1 classid 1:2 htb rate $DOWN2R ceil $DOWN2C prio 0. t# h {* s. H: l
tc class add dev imq0 parent 1:1 classid 1:3 htb rate $DOWN3R ceil $DOWN2C prio 7
; i9 X: ]8 I4 e+ etc filter add dev imq0 parent 1:0 protocol ip handle 2 fw flowid 1:2/ @( n y- X3 Z
tc filter add dev imq0 parent 1:0 protocol ip handle 3 fw flowid 1:3
$ F' {$ L/ j, h7 B+ j+ @) X7 p* `+ Giptables -t mangle -A QOSDOWN -j BCOUNT
- l7 A! P; Q0 b) V" \iptables -t mangle -A QOSDOWN -m length --length $DOWNSP -j MARK --set-mark-return 2, h. T( V+ {% N. O: U' j% d9 o4 i
iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 22 n0 Q! {5 r: V, }* D6 R- F. {, P
iptables -t mangle -A QOSDOWN -p tcp -m mport --sports 80,443 -m bcount --range 204801: -j MARK --set-mark-return 3
1 S: A/ W9 ?- |9 {6 ~tc class add dev imq1 parent 1:1 classid 1:2 htb rate $UP2R ceil $UP2C prio 0: _2 F9 |+ c6 z/ v. n, k
tc class add dev imq1 parent 1:1 classid 1:3 htb rate $UP3R ceil $UP3C prio 7
- a1 \3 ` Z" N! ?" X# Htc filter add dev imq1 parent 1:0 protocol ip handle 2 fw flowid 1:22 V: W* i3 f3 A- S& k/ O
tc filter add dev imq1 parent 1:0 protocol ip handle 3 fw flowid 1:3
/ n& e# n' I7 k8 v. K: [2 \( ^iptables -t mangle -A QOSUP -j BCOUNT
- D) p2 Q/ N1 j. k% giptables -t mangle -A QOSUP -m length --length :128 -j MARK --set-mark-return 2& x& W- L* }- s; [% P/ V
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204800 -j MARK --set-mark-return 2 j3 a6 A2 `6 [' [* c
iptables -t mangle -A QOSUP -p tcp -m mport --dports 80,443 -m bcount --range :204801 -j MARK --set-mark-return 33 y) g8 z2 y4 k7 Q& [
) j* U4 z6 E0 h' w. X' P# m#特殊IP限速(未给出)
3 Y) Q: \8 c' m
5 B0 L) ]* L) B# K. v) }#所有普通IP单独限速1 l! l3 n5 U3 I! c7 w# P- H2 w( l
i=$IPS;
( A+ J0 j, L% ^1 v$ A3 C7 Wwhile [ $i -le $IPE ]
& \9 Z7 x' ?/ l; zdo3 I( c3 X! q0 O3 i H
tc class add dev imq1 parent 1:1 classid 1:1$i htb rate $UPLOADR ceil $UPLOADC prio 2- q( ?7 @( _4 {' p2 n! L
tc qdisc add dev imq1 parent 1:1$i handle 1$i: sfq perturb 15% p9 s4 X& ]& f! T+ ?
tc filter add dev imq1 parent 1:0 protocol ip handle 1$i fw classid 1:1$i 1 P# I8 v4 y6 h+ K4 h! m, u
tc class add dev imq0 parent 1:1 classid 1:1$i htb rate $DOWNLOADR ceil $DOWNLOADC prio 2
& k& X7 t" H( _) a6 r r2 }tc qdisc add dev imq0 parent 1:1$i handle 1$i: sfq perturb 15
Z8 A9 m8 T* T h0 U, `4 }tc filter add dev imq0 parent 1:0 protocol ip handle 1$i fw classid 1:1$i _, W- O- i8 K$ d
iptables -t mangle -A QOSUP -s $UIP$i -j MARK --set-mark-return 1$i
3 ` z+ \8 a& w% Q8 Riptables -t mangle -A QOSDOWN -d $UIP$i -j MARK --set-mark-return 1$i
8 D/ s. n' L) V& g8 [5 j h- H2 ii=`expr $i + 1`
4 f: t' ^& F- s* f# D$ \8 ^% rdone/ U( S) ?; x) ?: O6 R8 u" W
1 k" y) x8 t4 ]) i+ T#每IP限制TCP连接数50,UDP连接数80,并且对53,80等端口例外(该模块可以单独使用)- a9 l/ F( U1 h& T# X- X
iptables -t mangle -N LMT
; `, O( j6 d+ @6 Z5 a! `% `iptables -t mangle -I PREROUTING -i br0 -j LMT+ X5 n0 i' l+ e- ?: H
iptables -t mangle -A LMT -p tcp --syn -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP( G$ X3 Y. s2 I$ r
iptables -t mangle -A LMT -p udp -m udplimit --udplimit-above 80 --udplimit-mask 32 -j DROP
" L: b% h7 @; v0 n$ l* Ciptables -t mangle -I LMT -s 192.168.1.0/24 -p udp -m mport --dports 53 -j RETURN4 L% y3 t5 ]/ n2 h
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 |