linux閘道器下的TC控速

jinqibingl發表於2015-02-13
控制上傳下載速度理論方面的相關記錄
1、對於TC限速配置方面,最關鍵的要明白,TC限速實際上是在分析每個經過的IP資料包,根據我們給定的限速規則,將不同的IP資料包歸入到不同的分類中,也可以理解為不同的通道。
2、在內部網,讓多臺主機透過一個IP地址上網的時候,需要進行NAT轉發,最常用的是MASQUERADE的IP地址偽裝,這解決了內部網多臺主機,透過一個寬頻或者專線給定的IP地址,實現同時上網的要求。要想讓內部網多臺主機同時上網,只要閘道器做給定IP的IP地址偽裝,就可以完成開通上網的動作。
3、在閘道器內部的NAT轉換時,基本的做法是將內部網上傳出去的IP資料包中的源IP地址和埠,更改為閘道器指定的閘道器IP地址和臨時的一個埠號,這樣就形成一個IP+埠號的地址對,這個地址對被暫時記錄到了閘道器的NAT轉發表中,直到任務完成,這個地址對才被刪除,這是基本的做法,還有其他的比如完全圓錐形NAT等,這部分可以參考網上的NAT原理。注意,在閘道器上NAT轉換的時候,給的是一個臨時埠,並不是特定的埠,這樣才能解決多臺主機或者一臺主機多上網任務情況下,需要多個資料傳輸的問題,也就是說一臺主機在上網同時打遊戲的情況下,可以在閘道器開通多個地址對,也就是說IP地址一樣,但是埠不同,這樣形成的地址對不一樣,才能實現上傳和下載的資料不會混亂。
4、閘道器的架構:一般理解為 eth0--核心NAT--eth1,這樣的過程,當然這是透過閘道器的資料,而不是進入閘道器的資料。也就是說,所有資料包要注意考慮經過核心後進行NAT轉換後,包頭的IP地址是怎麼變化的。從內網到外網的資料包,是源地址IP被改為閘道器外網口的IP地址+臨時的埠,從外網到內網的資料包,其目的地址IP是閘道器的外網IP+之前給的臨時埠,NAT轉換時,根據NAT表中的臨時記錄,將該資料包的目的IP地址改為內網指定主機的IP及相應的埠,並在內網口釋出。
5、控制速度來說,只能控制對應網路卡的資料傳送速度,其實是對IP資料包傳送規則進行了重新整理,而無法對接受資料包進行整理,所以需要注意,限制只能限制對應網路卡的傳送速度,而無法控制接受速度。
6、這樣就可以知道,我們要控制下載速度,那麼應該是控制閘道器內網口的傳送速度,而控制上傳速度就是控制閘道器外網口的傳送速度。
7、對控制下載速度而言,由於資料包透過內網口的時候,已經由閘道器核心進行了NAT轉換,所以特定的主機接收到的資料包,其目的地址IP已經是該主機的IP。
8、而對控制上傳速度而言,在資料包透過外網口的時候,是資料包的特徵應該是源地址IP全部變成了外網口的IP,目的IP地址不變。
9、根據透過網口的資料包特徵,可以知道,在控制下載速度的時候,我們可以在TC裡面,直接使用U32 選擇器,因為目的IP地址是特定的,也就是我們需要控制速度的主機IP,所以使用u32 match ip dst 192.168.1.20,可以這樣寫。但是在控制上傳速度的時候,U32的控制寫法就無法控制了,因為目的IP地址很多,源地址IP已經被改成閘道器IP,控制不起來。所以在控制上傳速度的時候,一般可以用IPTABLES PREROUTINg 的時候,用mangle給該資料包打上一個MARK標識,然後在該資料包透過外網口的時候,用FW規則來匹配MARK標識,根據FW規則而將指定的資料包歸入到相應的分類中。
10、另外要注意,所有已經啟用的網路卡,有一個預設的qdisc佇列,這佇列是不用刪除的,只要你另外建立佇列,這個預設佇列就消失了。你的指令碼執行一次後,就會在閘道器上啟用,但是閘道器重啟後,就會消失,所以要將TC指令碼放置在linux閘道器的開機啟動中,一般來說放置在rc.local中,我的推薦是將上傳限速和下載限速分開兩個指令碼,然後將連結放置到rc.local中,這樣更為方便。
示例:


上傳控制
iptables -t mangle -A PREROUTING -s 192.168.1.20 -j MARK --set-mark 1  打上標識1
iptables -t mangle -A PREROUTING -d 192.168.10.20 -j MARK --set-mark 2   這樣可以給傳送到特定IP的資料包打上標識2
tc filter add dev eth0  parent 1: protocol ip prio 1 handle 1 fw classid 1:1 FW過濾器,匹配標識1,歸入分類1:1
tc filter add dev eth0  parent 1: protocol ip prio 1 handle 2 fw classid 1:2 FW過濾器,匹配標識2,歸入分類1:2
下載控制
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.20 flowid 1:1 將下載到192.168.1.20的資料包,歸入分類1:1

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9606200/viewspace-1435666/,如需轉載,請註明出處,否則將追究法律責任。

相關文章