国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
用tc iptables HTB解決ADSL寬帶速度瓶頸技術(shù)[zt]
from site : http://www.zhuoda.org/hofman/54936.html 

用tc+iptables+HTB解決ADSL寬帶速度瓶頸技術(shù)[zt]
自己寫的tc2,共享給大家,希望聽(tīng)聽(tīng)大家的高見(jiàn),以待完善.覺(jué)得好的,就幫忙頂一下,以便更多的人共同探索,發(fā)現(xiàn)問(wèn)題,解決問(wèn)題,總結(jié)問(wèn)題.謝謝.

代碼:
#!/bin/bash
#腳本文件名: tc2
#########################################################################################
#用TC(Traffic Control)解決ADSL寬帶速度技術(shù) Ver. 1.0   by KindGeorge 2004.12.27        #
#########################################################################################
#此腳本經(jīng)過(guò)實(shí)驗(yàn)通過(guò),更多的信息請(qǐng)參閱http://lartc.org
#tc+iptables+HTB+SFQ
#
#一.什么是ADSL? ADSL(Asymmetric Digital Subscriber Loop,非對(duì)稱數(shù)字用戶環(huán)路)
#用最簡(jiǎn)單的話的講,就是采用上行和下行不對(duì)等帶寬的基于ATM的技術(shù).
#舉例,我們最快的其中一條ADSL帶寬是下行3200Kbit,上行只有320Kbit.帶寬通常用bit表示.
#
#1、下行3200K 意味著什么?
#因?yàn)?1Byte=8Bit ,一個(gè)字節(jié)由8個(gè)位(bit)組成,一般用大寫B(tài)表示Byte,小寫b表示Bit.
#所以 3200K=3200Kbps=3200K bits/s=400K bytes/s.
#2、 上行320K 意味著什么?
# 320K=320Kbps=320K bits/s=40K bytes/s.
#就是說(shuō),個(gè)人所能獨(dú)享的最大下載和上傳速度,整條線路在沒(méi)任何損耗,最理想的時(shí)候,
#下載只有400K bytes/s,上傳只有最大40K bytes/s的上傳網(wǎng)速.
#這些都是理想值,但現(xiàn)實(shí)總是殘酷的,永遠(yuǎn)沒(méi)有理想中那么好.至少也有損耗,何況內(nèi)部網(wǎng)有幾十臺(tái)
#電腦一起瘋狂上網(wǎng).
#
#3.ADSL上傳速度對(duì)下載的影響
#(1)TCP/IP協(xié)議規(guī)定,每一個(gè)封包,都需要有acknowledge訊息的回傳,也就是說(shuō),傳輸?shù)馁Y料,
#需要有一個(gè)收到資料的訊息回復(fù),才能決定后面的傳輸速度,並決定是否重新傳輸遺失
#的資料。上行的帶寬一部分就是用來(lái)傳輸這些acknowledge(確認(rèn))資料?,当砷e懈涸毓?
#大的時(shí)候,就會(huì)影響acknowledge資料的傳送速度,并進(jìn)而影響到下載速度。這對(duì)非對(duì)稱
#數(shù)字環(huán)路也就是ADSL這種上行帶寬遠(yuǎn)小于下載帶寬的連接來(lái)說(shuō)影響尤為明顯。
#(2)試驗(yàn)證明,當(dāng)上傳滿載時(shí),下載速度變?yōu)樵瓉?lái)速度的40%,甚至更低.因?yàn)樯陷d文件(包括ftp
#上傳,發(fā)郵件smtp),如果較大,一個(gè)人的通訊量已經(jīng)令整條adsl變得趨向飽和,那么所有的數(shù)據(jù)
#包只有按照先進(jìn)先出的原則進(jìn)行排隊(duì)和等待.這就可以解釋為什么網(wǎng)內(nèi)其中有人用ftp上載文件,
#或發(fā)送大郵件的時(shí)候,整個(gè)網(wǎng)速變得很慢的原因。
#
#二.解決ADSL速度之道
#1. 為解決這些速度問(wèn)題,我們按照數(shù)據(jù)流和adsl的特點(diǎn),對(duì)經(jīng)過(guò)線路的數(shù)據(jù)進(jìn)行了有規(guī)則的分流.
#把本來(lái)在adsl modem上的瓶頸轉(zhuǎn)移到我們linux路由器上,可以把帶寬控制的比adsl modem上的小一點(diǎn),
#這樣我們就可以方便的用tc技術(shù)對(duì)經(jīng)過(guò)的數(shù)據(jù)進(jìn)行分流和控制.
#我們的想象就象馬路上的車道一樣,有高速道,還有小車道,大車道.需要高速的syn,ack,icmp等走
#高速道,需要大量傳輸?shù)膄tp-data,smtp等走大車道,不能讓它堵塞整條馬路.各行其道.
#2. linux下的TC(Traffic Control)就有這樣的作用.只要控制得當(dāng),一定會(huì)有明顯的效果.
#tc和iptables結(jié)合是最好的簡(jiǎn)單運(yùn)用的結(jié)合方法.
#我們?cè)O(shè)置過(guò)濾器以便用iptables對(duì)數(shù)據(jù)包進(jìn)行分類,因?yàn)閕ptables更靈活,而且你還可以為每個(gè)規(guī)則設(shè)
#置計(jì)數(shù)器. iptables用mangle鏈來(lái)mark數(shù)據(jù)包,告訴了內(nèi)核,數(shù)據(jù)包會(huì)有一個(gè)特定的FWMARK標(biāo)記值(hanlde x fw),
#表明它應(yīng)該送給哪個(gè)類( classid x : x),而prio是優(yōu)先值,表明哪些重要數(shù)據(jù)應(yīng)該優(yōu)先通過(guò)哪個(gè)通道.
#首先選擇隊(duì)列,cbq和htb是不錯(cuò)的選擇,經(jīng)過(guò)實(shí)驗(yàn),htb更為好用,所以以下腳本采用htb來(lái)處理
#3. 一般系統(tǒng)默認(rèn)的是fifo的先進(jìn)先出隊(duì)列,就是說(shuō)數(shù)據(jù)包按照先來(lái)先處理的原則,如果有一個(gè)大的數(shù)
#據(jù)包在前面,#那么后面的包只能等前面的發(fā)完后才能接著發(fā)了,這樣就算后面即使是一個(gè)小小的ack包,
#也要等待了,這樣上傳就影響了下載,就算你有很大的下載帶寬也無(wú)能為力.
#HTB(Hierarchical Token Bucket, 分層的令牌桶)
#更詳細(xì)的htb參考 http://luxik.cdi.cz/~devik/qos/htb/
#HTB就象CBQ一樣工作,但是并不靠計(jì)算閑置時(shí)間來(lái)整形。它是一個(gè)分類的令牌桶過(guò)濾器。它只有很少的參數(shù)
#他的分層(Hierarchical)能夠很好地滿足這樣一種情況:你有一個(gè)固定速率的鏈路,希望分割給多種不同的
#用途使用,為每種用途做出帶寬承諾并實(shí)現(xiàn)定量的帶寬借用。
#4. 結(jié)構(gòu)簡(jiǎn)圖:
#~~~~~~ |
#~~~~~ __1:__
#~~~~ |~~~~~ |
#~  _ _ _1:1~~~ 1:2_ _ _ _ _ _ _ _
#  | ~ ~ |  ~ ~ ~ |  ~ ~ | ~ ~ | ~ ~ |
#1:11~1:12~~1:21~1:22~1:23~1:24
#優(yōu)先順序是1:11 1:12   1:21 1:22  1:23 1:24
#
#--------------------------------------------------------------------------------------------
#5.根據(jù)上面的例子,開(kāi)始腳本  
#通常adsl用pppoe連接,的得到的是ppp0,所以公網(wǎng)網(wǎng)卡上綁了ppp0
#關(guān)于參數(shù)的說(shuō)明
#(1)rate: 是一個(gè)類保證得到的帶寬值.如果有不只一個(gè)類,請(qǐng)保證所有子類總和是小于或等于父類.
#(2)ceil: ceil是一個(gè)類最大能得到的帶寬值.
#(3)prio: 是優(yōu)先權(quán)的設(shè)置,數(shù)值越大,優(yōu)先權(quán)越小.如果是分配剩余帶寬,就是數(shù)值小的會(huì)最優(yōu)先取得剩余
#的空閑的帶寬權(quán).
#具體每個(gè)類要分配多少rate,要根據(jù)實(shí)際使用測(cè)試得出結(jié)果.
#一般大數(shù)據(jù)的話,控制在50%-80%左右吧,而ceil最大建議不超過(guò)85%,以免某一個(gè)會(huì)話占用過(guò)多的帶寬.
#rate可按各類所需分配,
#1:11 是很小而且最重要的數(shù)據(jù)包通道,當(dāng)然要分多點(diǎn).甚至必要時(shí)先全部占用,不過(guò)一般不會(huì)的.所以給全速.
#1:12 是很重要的數(shù)據(jù)道,給多點(diǎn),最少給一半,但需要時(shí)可以再多一點(diǎn).
#rate 規(guī)劃 1:2 = 1:21 + 1:22 + 1:23 + 1:24  一般總數(shù)在50%-80%左右
#1:21 http,pop是最常用的啦,為了太多人用,而導(dǎo)致堵塞,我們不能給得太多,也不能太少.
#1:22 我打算給smtp用,優(yōu)先低于1:21 以防發(fā)大的附件大量占用帶寬,
#1:23 我打算給ftp-data,和1:22一樣,很可能大量上傳文件,所以rate不能給得太多,而當(dāng)其他有剩時(shí)可以給大些,ceil設(shè)置大些
#1:24 是無(wú)所謂通道,就是一般不是我們平時(shí)工作上需要的通道了,給小點(diǎn),防止這些人在妨礙有正常工作需要的人
#上行 uplink 320K,設(shè)置稍低于理論值
DEV="ppp0"
UPLINK=300
#下行downlink 3200 k 大概一半左右,以便能夠得到更多的并發(fā)連接
DOWNLINK=1500

echo "==================== Packetfilter and Traffic Control 流量控制 By 網(wǎng)絡(luò)技術(shù)部 Ver. 1.0===================="

start_routing() {
   echo -n "隊(duì)列設(shè)置開(kāi)始start......"
   #1.增加一個(gè)根隊(duì)列,沒(méi)有進(jìn)行分類的數(shù)據(jù)包都走這個(gè)1:24是缺省類:
   tc qdisc add dev $DEV root handle 1: htb default 24
   #1.1增加一個(gè)根隊(duì)下面主干類1: 速率為$UPLINK k
   tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit prio 0

   #1.1.1 在主干類1下建立第一葉子類,這是一個(gè)最高優(yōu)先權(quán)的類.需要高優(yōu)先和高速的包走這條通道,比如SYN,ACK,ICMP等
   tc class add dev $DEV parent 1:1 classid 1:11 htb rate $[$UPLINK]kbit ceil ${UPLINK}kbit prio 1
   #1.1.2 在主類1下建立第二葉子類 ,這是一個(gè)次高優(yōu)先權(quán)的類。比如我們重要的crm數(shù)據(jù).
   tc class add dev $DEV parent 1:1 classid 1:12 htb rate $[$UPLINK-150]kbit ceil ${UPLINK-50}kbit prio 2

   #1.2 在根類下建立次干類 classid 1:2 。此次干類的下面全部?jī)?yōu)先權(quán)低于主干類,以防重要數(shù)據(jù)堵塞.
   tc class add dev $DEV parent 1: classid 1:2 htb rate $[$UPLINK-150]kbit prio 3

   #1.2.1 在次干類下建立第一葉子類,可以跑例如http,pop等.
   tc class add dev $DEV parent 1:2 classid 1:21 htb rate 100kbit ceil $[$UPLINK-150]kbit prio 4

   #1.2.2 在次干類下建立第二葉子類。不要太高的速度,以防發(fā)大的附件大量占用帶寬,例如smtp等
   tc class add dev $DEV parent 1:2 classid 1:22 htb rate 30kbit ceil $[$UPLINK-160]kbit prio 5

   #1.2.3 在次干類下建立第三葉子類。不要太多的帶寬,以防大量的數(shù)據(jù)堵塞網(wǎng)絡(luò),例如ftp-data等,
   tc class add dev $DEV parent 1:2 classid 1:23 htb rate 15kbit ceil $[$UPLINK-170]kbit prio 6

   #1.2.4 在次干類下建立第四葉子類。無(wú)所謂的數(shù)據(jù)通道,無(wú)需要太多的帶寬,以防無(wú)所謂的人在阻礙正務(wù).
   tc class add dev $DEV parent 1:2 classid 1:24 htb rate 5kbit ceil $[$UPLINK-250]kbit prio 7

        #在每個(gè)類下面再附加上另一個(gè)隊(duì)列規(guī)定,隨機(jī)公平隊(duì)列(SFQ),不被某個(gè)連接不停占用帶寬,以保證帶寬的平均公平使用:
   #SFQ(Stochastic Fairness Queueing,隨機(jī)公平隊(duì)列),SFQ的關(guān)鍵詞是“會(huì)話”(或稱作“流”) ,
   #主要針對(duì)一個(gè)TCP會(huì)話或者UDP流。流量被分成相當(dāng)多數(shù)量的FIFO隊(duì)列中,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)會(huì)話。
   #數(shù)據(jù)按照簡(jiǎn)單輪轉(zhuǎn)的方式發(fā)送, 每個(gè)會(huì)話都按順序得到發(fā)送機(jī)會(huì)。這種方式非常公平,保證了每一
   #個(gè)會(huì)話都不會(huì)沒(méi)其它會(huì)話所淹沒(méi)。SFQ之所以被稱為“隨機(jī)”,是因?yàn)樗⒉皇钦娴臑槊恳粋€(gè)會(huì)話創(chuàng)建
   #一個(gè)隊(duì)列,而是使用一個(gè)散列算法,把所有的會(huì)話映射到有限的幾個(gè)隊(duì)列中去。
   #參數(shù)perturb是多少秒后重新配置一次散列算法。默認(rèn)為10
   tc qdisc add dev $DEV parent 1:11 handle 111: sfq perturb 5
   tc qdisc add dev $DEV parent 1:12 handle 112: sfq perturb 5
   tc qdisc add dev $DEV parent 1:21 handle 121: sfq perturb 10
   tc qdisc add dev $DEV parent 1:22 handle 122: sfq perturb 10
   tc qdisc add dev $DEV parent 1:23 handle 133: sfq perturb 10
   tc qdisc add dev $DEV parent 1:24 handle 124: sfq perturb 10
   echo "隊(duì)列設(shè)置成功.done."
   echo -n "設(shè)置包過(guò)濾 Setting up Filters......"
   #這里設(shè)置過(guò)濾器,handle 是iptables作mark的值,讓被iptables 在mangle鏈做了mark的不同的值選擇不同的通
   #道classid,而prio 是過(guò)濾器的優(yōu)先級(jí)別.
   tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
   tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
   tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21
   tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22
   tc filter add dev $DEV parent 1:0 protocol ip prio 5 handle 5 fw classid 1:23
   tc filter add dev $DEV parent 1:0 protocol ip prio 6 handle 6 fw classid 1:24
   echo "設(shè)置過(guò)濾器成功.done."

          

########## downlink ##########################################################################
#6. 下行的限制:
#設(shè)置入隊(duì)的規(guī)則,是因?yàn)榘岩恍┙?jīng)常會(huì)造成下載大文件的端口進(jìn)行控制,不讓它們來(lái)得太快,導(dǎo)致堵塞.來(lái)得太快
#的就直接drop,就不會(huì)浪費(fèi)和占用機(jī)器時(shí)間和力量去處理了.
#(1). 把下行速率控制在大概1000-1500k左右,因?yàn)檫@個(gè)速度已經(jīng)足夠用了,以便能夠得到更多的并發(fā)下載連接

tc qdisc add dev $DEV handle ffff: ingress

tc filter add dev $DEV parent ffff: protocol ip prio 50 handle 8 fw police rate ${DOWNLINK}kbit burst 10k drop flowid :8
}
#(2).如果內(nèi)部網(wǎng)數(shù)據(jù)流不是很瘋狂的話,就不用做下載的限制了,用#符號(hào)屏蔽上面兩行即可.
#(3).如果要對(duì)任何進(jìn)來(lái)數(shù)據(jù)的數(shù)據(jù)進(jìn)行限速的話,可以用下面這句:
#tc filter add dev $DEV parent ffff: protocol ip prio 10 u32 match ip src 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1

###############################################################################################
#7. 開(kāi)始給數(shù)據(jù)包打標(biāo)記,往PREROUTING鏈中添加mangle規(guī)則:
start_mangle() {
      
   echo -n "開(kāi)始給數(shù)據(jù)包打標(biāo)記......start mangle mark......"

#(1)把出去的不同類數(shù)據(jù)包(為dport)給mark上標(biāo)記1--6.讓它走不同的通道
#(2)把進(jìn)來(lái)的數(shù)據(jù)包(為sport)給mark上標(biāo)記8,讓它受到下行的限制,以免速度太過(guò)快而影響全局.
#(3)每條規(guī)則下根著return的意思是可以通過(guò)RETURN方法避免遍歷所有的規(guī)則,加快了處理速度
##設(shè)置TOS的處理:
#iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 1
#iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN
#iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 4
#iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN
#iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 5
#iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN

##提高tcp初始連接(也就是帶有SYN的數(shù)據(jù)包)的優(yōu)先權(quán)是非常明智的:
iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN

######icmp,想ping有良好的反應(yīng),放在第一類吧.
iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p icmp -j RETURN

# small packets (probably just ACKs)長(zhǎng)度小于64的小包通常是需要快些的,一般是用來(lái)確認(rèn)tcp的連接的,
#讓它跑快些的通道吧.也可以把下面兩行屏蔽,因?yàn)樵傧旅嬗懈喔骷?xì)的端口分類.
iptables -t mangle -A PREROUTING -p tcp -m length --length :64 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp -m length --length :64 -j RETURN

#ftp放第2類,因?yàn)橐话闶切“? ftp-data放在第5類,因?yàn)橐话闶谴罅繑?shù)據(jù)的傳送.
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j MARK --set-mark 5
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j RETURN
##提高ssh數(shù)據(jù)包的優(yōu)先權(quán):放在第1類,要知道ssh是交互式的和重要的,不容待慢哦
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 22 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 22 -j RETURN
#
##smtp郵件:放在第4類,因?yàn)橛袝r(shí)有人發(fā)送很大的郵件,為避免它堵塞,讓它跑4道吧
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j RETURN
#iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j MARK --set-mark 8
#iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j RETURN
## name-domain server:放在第1類,這樣連接帶有域名的連接才能快速找到對(duì)應(yīng)的地址,提高速度的一法
iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j RETURN
#
## http:放在第3類,是最常用的,最多人用的,
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j RETURN
##pop郵件:放在第3類
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j RETURN
## https:放在第3類
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j RETURN
## Microsoft-SQL-Server:放在第2類,我這里認(rèn)為較重要,一定要保證速度的和優(yōu)先的.
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1433 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1433 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 1433 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 1433 -j RETURN

## voip用, 提高,語(yǔ)音通道要保持高速,才不會(huì)斷續(xù).
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1720 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1720 -j RETURN
iptables -t mangle -A PREROUTING -p udp -m udp --dport 1720 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp -m udp --dport 1720 -j RETURN

## vpn ,用作voip的,也要走高速路,才不會(huì)斷續(xù).
iptables -t mangle -A PREROUTING -p udp -m udp --dport 7707 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp -m udp --dport 7707 -j RETURN

## 放在第1類,因?yàn)槲矣X(jué)得它在我心中很重要,優(yōu)先.
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 7070 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 7070 -j RETURN

## WWW caching service:放在第3類
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j RETURN

##提高本地?cái)?shù)據(jù)包的優(yōu)先權(quán):放在第1
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j RETURN

iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p icmp -j RETURN

#本地small packets (probably just ACKs)
iptables -t mangle -A OUTPUT -p tcp -m length --length :64 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp -m length --length :64 -j RETURN

#(4). 向PREROUTING中添加完mangle規(guī)則后,用這條規(guī)則結(jié)束PREROUTING表:
##也就是說(shuō)前面沒(méi)有打過(guò)標(biāo)記的數(shù)據(jù)包將交給1:24處理。
##實(shí)際上是不必要的,因?yàn)?:24是缺省類,但仍然打上標(biāo)記是為了保持整個(gè)設(shè)置的協(xié)調(diào)一致,而且這樣
#還能看到規(guī)則的包計(jì)數(shù)。

iptables -t mangle -A PREROUTING -i $DEV -j MARK --set-mark 6
echo "標(biāo)記完畢! mangle mark done!"
}
#-----------------------------------------------------------------------------------------------------

#8.取消mangle標(biāo)記用的自定義函數(shù)
stop_mangle() {
  
   echo -n "停止數(shù)據(jù)標(biāo)記 stop mangle table......"
   ( iptables -t mangle -F && echo "ok." ) || echo "error."
}

#9.取消隊(duì)列用的  
stop_routing() {
   echo -n "(刪除所有隊(duì)列......)"
   ( tc qdisc del dev $DEV root && tc qdisc del dev $DEV ingress && echo "ok.刪除成功!" ) || echo "error."
}

#10.顯示狀態(tài)
status() {
   echo "1.show qdisc $DEV  (顯示上行隊(duì)列):----------------------------------------------"
   tc -s qdisc show dev $DEV
   echo "2.show class $DEV  (顯示上行分類):----------------------------------------------"
   tc class show dev $DEV
   echo "3. tc -s class show dev $DEV (顯示上行隊(duì)列和分類流量詳細(xì)信息):------------------"
   tc -s class show dev $DEV
   echo "說(shuō)明:設(shè)置總隊(duì)列上行帶寬 $UPLINK k."
   echo "1. classid 1:11 ssh、dns、和帶有SYN標(biāo)記的數(shù)據(jù)包。這是最高優(yōu)先權(quán)的類包并最先類 "
   echo "2. classid 1:12 重要數(shù)據(jù),這是較高優(yōu)先權(quán)的類。"
   echo "3. classid 1:21 web,pop 服務(wù) "
   echo "4. classid 1:22 smtp服務(wù) "
   echo "5. classid 1:23 ftp-data服務(wù) "
   echo "6. classid 1:24 其他服務(wù) "
}

#11.顯示幫助
usage() {
   echo "使用方法(usage): `basename $0` [start | stop | restart | status | mangle ]"
   echo "參數(shù)作用:"
   echo "start   開(kāi)始流量控制"
   echo "stop    停止流量控制"
   echo "restart 重啟流量控制"
   echo "status  顯示隊(duì)列流量"
   echo "mangle  顯示mark標(biāo)記"
}

#----------------------------------------------------------------------------------------------
#12. 下面是腳本運(yùn)行參數(shù)的選擇的控制
#
kernel=`eval kernelversion`
case "$kernel" in
   2.2)
      echo " (!) Error: won't do anything with 2.2.x 不支持內(nèi)核2.2.x"
      exit 1
      ;;
    
   2.4|2.6)
      case "$1" in
         start)
       ( start_routing && start_mangle && echo "開(kāi)始流量控制! TC started!" ) || echo "error."
            
       exit 0
       ;;

    stop)
       ( stop_routing && stop_mangle && echo "停止流量控制! TC stopped!" ) || echo "error."
      
       exit 0
       ;;
    restart)
       stop_routing
       stop_mangle
       start_routing
       start_mangle
      
       echo "流量控制規(guī)則重新裝載!"
       ;;
    status)
       status
       ;;
      
    mangle)
       echo "iptables -t mangle -L (顯示目前mangle表表標(biāo)記詳細(xì)):"
       iptables -t mangle -nL
       ;;

      
    *) usage
       exit 1
       ;;
      esac
      ;;

   *)
      echo " (!) Error: Unknown kernel version. check it !"
      exit 1
      ;;
esac
#三.結(jié)束語(yǔ)
#1. 如果要支持htb,請(qǐng)到相關(guān)網(wǎng)站下載有關(guān)補(bǔ)丁.
#此腳本是參考http://lartc.org 和 http://luxik.cdi.cz/~devik/qos/htb/ 和http://www.docum.org/docum.org
#和聽(tīng)取chinaunix.net的C++版主JohnBull的"Linux的高級(jí)路由和流量控制北京沙龍講座錄音
#及關(guān)于<<Linux的高級(jí)路由和流量控制HOWTO中文版>>,經(jīng)過(guò)不斷調(diào)試得出的總結(jié)結(jié)果,在此感謝所有作出貢獻(xiàn)的人.
#2. iptables,在http://www.iptables.org/ .iptables v1.2.7a 和tc是Red hat linux 9.0下自帶的版本.
#3. 此腳本已經(jīng)在Red Hat Linux 9.0內(nèi)核2.4.20上,內(nèi)網(wǎng)約70臺(tái)頻繁上網(wǎng)機(jī)器的環(huán)境下運(yùn)行數(shù)月,事實(shí)證明良好.
#4. 如果ADSL帶寬不同或有變,調(diào)節(jié)相關(guān)rate參數(shù)及ceil參數(shù)即可.
#5. 還有,如果結(jié)合IMQ,IMQ(Intermediate queueing device,中介隊(duì)列設(shè)備)把上行和下行都進(jìn)行分類控制
#就更理想了,但要支持IMQ,就要重新編譯內(nèi)核.關(guān)于補(bǔ)丁和更多的文檔請(qǐng)參閱imq網(wǎng)站http://www.linuximq.net/
#6. 歡迎交流yahoo messegsender: kindgeorge#yahoo.com此腳本將有待不斷完善.
#7. 除了ADSL外,還可以進(jìn)行其他寬帶的控制.
#8. 如果看誰(shuí)老是在網(wǎng)內(nèi)搞鬼,經(jīng)常占滿帶寬,就把它列為黑名單,并派到"無(wú)所謂的數(shù)據(jù)通道",以防無(wú)所謂的人
#在阻礙正務(wù): iptables -t mangle -I PREROUTING 1 -s 192.168.xxx.xxx -j MARK --set-mark 6
#            iptables -t mangle -I PREROUTING 2 -s 192.168.xxx.xxx -j RETURN
#9.使用方法: 整篇文檔拷貝后,chmod +x tc2 ,
#執(zhí)行腳本: ./tc2 start (或其他參數(shù)start | stop | restart | status | mangle )即可
#如果想每次在ppp啟動(dòng)時(shí)就啟動(dòng),則在/etc/ppp/ip-up 文件里面加上一句: /路徑/tc2 restart
echo "script done!"
exit 1
#end----------------------------------------------------------------------------------------




結(jié)合web界面的流量監(jiān)測(cè)就更完美了.
進(jìn)行流量監(jiān)測(cè)相關(guān)例子可以參閱:http://bbs.chinaunix.net/forum/viewtopic.php?t=480511
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
lvs實(shí)現(xiàn)持久連接
TC(HTB)+iptables作流量控制2 -
iptables 使用總結(jié)
Linux iptables + TC做網(wǎng)關(guān)腳本 - linux/unix技術(shù)專區(qū) - 操...
iptables全面詳解(圖文并茂含命令指南)
iptables實(shí)戰(zhàn)記錄
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服