歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux流量控制

Linux流量控制   在如今的網絡界,也許TC知道的人並不多了,這篇文章做留戀吧。   以前研究TC時記錄下的講解與配置文件。   eth1:192.168.1.1,內網口  業務需求:保證正常的網頁浏覽,FTP,SMTP,POP3,對其它的所有應用加以限制,以免影響正常業務的使用。  1、讓交互數據包保持較低的延遲時間,也就是說上載或下載文件不會打擾SSH/telnet等。  2、上載或下載期間有合理的速率用於網頁浏覽,即使http屬於一種大量數據傳輸,也不應受其它傳輸影響太大  3、對FTP-data限速,不會占用所有帶寬  4、對SMTP,pop3限速  5、對未分類的進行限制,以免影響  6、保證上載不會影響下載,上載數據流會影響下載的速率,這是相當普遍的現象。  7、對每個IP的下載速率進行限制  8、取得空閒帶寬的優先級別如:交互數據,FTP-data,smtp,pop3;網頁浏覽,其它業務優先級別最低    二、方法: [/color6] 1、(eth0)使用HTB分成五類:如下圖  +---------+  | root 1: |  +---------+  |  +--------------------------------+  | class 1:1 |  +--------------------------------+  | | | | | |  +----+ +----+ +----+ +----+ +----+  |1:11| |1:12| |1:13| |1:14| |1:15|  +----+ +----+ +----+ +----+ +----+  classid 1:11:  1)這個類優先權最高。擁有最低的延遲並最先取得空閒帶寬,因此要設置這個類的峰值速率。  ssh、telnet、dns、quake3、irc,ftp控制,smtp命令和帶有SYN標記的數據包都應屬於這一類。  2)為了保證上行數據流不會傷害下行流,我們還要把ACK數據包排在隊列前面。這就是當發生大批量數據流的時  候,雙向傳輸均受到嚴重影響的原因。因為下行數據的ACK必須同上行流進行競爭,並在處理過程中被延遲。  3)限制上載速率:把上載速率限制在比可用帶寬稍小一些的位置上,於是你的MODEM中就不會形成隊列了。  4)排除了下行隊列(除了偶爾的突發),保證交互數據包永遠排在上行隊列的最前面。  classid 1:12:大批量傳輸的類。主要用來處理浏覽網頁的數據包,目標端口80,8080,443,8443的包。  classid 1:13:此類是擁用最大吞吐TOS位的數據包。用於處理目的地址為xxxx的FTP-data。  classid  1:14:這裡是郵件(SMTP、pop3)相關和TOS要求最小成本的數據流。用於處理目的地址為xxxx的smtp,pop3服務  classid 1:15:最後是經過NAT進行大批量傳輸的機器,以保證他們不會妨礙正常服務。  2、(eth0)限制下載速率:。丟掉那些太快到來的數據包,不讓他們導致TCP/IP的速率低於我們期望的速率。因  為我們不希望輕易地丟棄數據包,所以我們要配置“burst”來容納突發傳輸。  3、(eth1)限制下載速率:對每一個IP限制最高下載速率  三、 [/color6]1、隊列處理  #腳本:用384kbps作為峰值速率,調整CEIL為上行速率的75%。  #Set the following values to somewhat lesss than your actual download and uplink speed.  DOWNLINK=2000  UPLINK=384  #清空已有的隊列,並把出錯消息清空  #clean existing down and uplink qdiscs,put the errors to /dev/null  tc qdisc del dev eth0 root 2> /dev/null > /dev/null  tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null  tc qdisc del dev eth1 root 2> /dev/null > /dev/null  ########################################uplink###########################################  #建立HTB父類,默認數據由1:15這個類通走  #install root HTB,point default traffic to 1:15:  tc qdisc add dev eth0 root handle 1: htb default 15  #設定uplink的最大速率。  #shape everything at $UPLINK speed -this prevents huge queues in your DSL modem which destroy  latency:  # main class  tc class add dev eth0 parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit  #分類,1:11為最高優先級別,stmp,pop3,ftp-data次之,網頁浏覽再次之。並對每個類限制了最高速率。  #high prio class 1:11:  tc class add dev eth0 parent 1:1 classid 1:11 htb rate 128kbit ceil 128kbit prio 0  tc class add dev eth0 parent 1:1 classid 1:12 htb rate 128kbit ceil ${UPLINK}kbit prio 2  tc class add dev eth0 parent 1:1 classid 1:13 htb rate 32kbit ceil ${UPLINK}kbit prio 1  tc class add dev eth0 parent 1:1 classid 1:14 htb rate 32kbit ceil ${UPLINK}kbit prio 1  #bulk & default class 1:15 -gets slightly less traffic,and a lower priority:  tc class add dev eth0 parent 1:1 classid 1:15 htb rate 16kbit ceil ${UPLINK}kbit prio 3  可以在類下面再附加上另一個隊列規定,以保證帶寬的公平使用:  #bost get Stochastic Fairness:  tc qdisc add dev eth0 parent 1:12 handle 12: sfq perturb 10  tc qdisc add dev eth0 parent 1:13 handle 13: sfq perturb 10  tc qdisc add dev eth0 parent 1:14 handle 14: sfq perturb 10  tc qdisc add dev eth0 parent 1:15 handle 15: sfq perturb 10  2、分類:  上面的隊列處理中等於把所有發出的數據包都送給了1:15  (tc qdisc add dev eth0 root handle 1: htb default 15)。  現在應該需要告訴機器那些數據包走哪條路。設置過濾器以便用iptables對數據包進行分類。  可以通過RETURN方法避免遍歷所有的規則。  #TOS Mininum Delay (ssh,telnet) in 1:11:  tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11  #80,8080,443 in 1:12  tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12  #ftp-data in 1:13  tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:13  #smtp,pop3 in 1:14    tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:14  #  tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:15  這樣數據包會有一個特定的FWMARK標記值(hanlde x fw),表明它應該送給哪個類( classid x)。    附上一個配置腳本:   ###/!sbin/bash ############ TC control [HTB] ######### #varible setting eth=eth0 S_NET=192.168.0.1 #ISP distribule IP INTER_IP=1.2.3.4 ############SNAT####################### #iptables -t nat -F #iptables -t nat -I POSTROUTING -s $S_NET -o $eth -j SNAT --to-source $INTER_IP #iptables -t nat -A POSTROUTING -s $S_NET -o $eth -j MASQUERADE #clean existing down and uplink qdiscs,put the errors to /dev/null tc qdisc del dev eth0 root 2> /dev/null > /dev/null tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null tc qdisc del dev eth1 root 2> /dev/null > /dev/null #root class tc qdisc add dev $eth root handle 1: htb default 10 #classid tc class add dev $eth parent 1:  classid 1:1  htb rate 2Mbit ceil 3Mbit tc class add dev $eth parent 1:1 classid 1:11 htb rate 80Kbit ceil 100Kbit prio 1 tc class add dev $eth parent 1:1 classid 1:12 htb rate 500Kbit ceil 550Kbit prio 2 tc class add dev $eth parent 1:1 classid 1:13 htb rate 400Kbit ceil 450Kbit prio 3 tc class add dev $eth parent 1:1 classid 1:14 htb rate 400Kbit ceil 450Kbit prio 4 #bost get Stochastic Fairness: tc qdisc add dev $eth parent 1:12 handle 12: sfq perturb 10 tc qdisc add dev $eth parent 1:13 handle 13: sfq perturb 10 tc qdisc add dev $eth parent 1:14 handle 14: sfq perturb 10 #TOS Mininum Delay (ssh,telnet) in 1:11: tc filter add dev $eth parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11 #80,8080,443 in 1:12 tc filter add dev $eth parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12 #ftp-data in 1:13 tc filter add dev $eth parent 1:0 protocol ip prio 3 handle 3 fw classid 1:13 #smtp,pop3 in 1:14 tc filter add dev $eth parent 1:0 protocol ip prio 4 handle 4 fw classid 1:14 ###     ############IPTABLES handle############ #clear mangle rules iptables -t mangle -F # ssh,telnet iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 22 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 23 -j MARK --set-mark 1 #80,8080,443 iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --syn --dport 80  -j MARK --set-mark 2 iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --syn --dport 8080  -j MARK --set-mark 2 iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --syn --dport 443  -j MARK --set-mark 2 #ftp-data iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 21 -j MARK --set-mark 3 iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 22 -j MARK --set-mark 3 #smtp,pop3 iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 25  -j MARK --set-mark 4 iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 110 -j MARK --set-mark 4 ###########SHOW TC MANGLE############## tc qdisc show dev $eth tc class show dev $eth tc filter show dev $eth iptables -t mangle -L PREROUTING ##END echo "[+] setting TC(htb) successful"
Copyright © Linux教程網 All Rights Reserved