Linux流量控制

來源:互聯網
上載者:User

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 settingeth=eth0S_NET=192.168.0.1#ISP distribule IPINTER_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/nulltc qdisc del dev eth0 root 2> /dev/null > /dev/nulltc qdisc del dev eth0 ingress 2> /dev/null > /dev/nulltc qdisc del dev eth1 root 2> /dev/null > /dev/null#root classtc qdisc add dev $eth root handle 1: htb default 10#classidtc class add dev $eth parent 1:  classid 1:1  htb rate 2Mbit ceil 3Mbittc class add dev $eth parent 1:1 classid 1:11 htb rate 80Kbit ceil 100Kbit prio 1tc class add dev $eth parent 1:1 classid 1:12 htb rate 500Kbit ceil 550Kbit prio 2tc class add dev $eth parent 1:1 classid 1:13 htb rate 400Kbit ceil 450Kbit prio 3tc 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 10tc qdisc add dev $eth parent 1:13 handle 13: sfq perturb 10tc 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:12tc filter add dev $eth parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12#ftp-data in 1:13tc filter add dev $eth parent 1:0 protocol ip prio 3 handle 3 fw classid 1:13#smtp,pop3 in 1:14tc filter add dev $eth parent 1:0 protocol ip prio 4 handle 4 fw classid 1:14###  ############IPTABLES handle#############clear mangle rulesiptables -t mangle -F# ssh,telnetiptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 22 -j MARK --set-mark 1iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 23 -j MARK --set-mark 1#80,8080,443iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --syn --dport 80  -j MARK --set-mark 2iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --syn --dport 8080  -j MARK --set-mark 2iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --syn --dport 443  -j MARK --set-mark 2#ftp-dataiptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 21 -j MARK --set-mark 3iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 22 -j MARK --set-mark 3#smtp,pop3iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 25  -j MARK --set-mark 4iptables -t mangle -A PREROUTING -s $S_NET  -p tcp --dport 110 -j MARK --set-mark 4###########SHOW TC MANGLE##############tc qdisc show dev $ethtc class show dev $ethtc filter show dev $ethiptables -t mangle -L PREROUTING##ENDecho "[+] setting TC(htb) successful"

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.