作者kuangs (kuangs)
看板Network
標題Re: [問答] 管制頻寬問題??
時間Wed Jan 30 16:41:38 2013
※ 引述《kuangs (kuangs)》之銘言:
: 小弟正在嘗試 利用Linux 來當路由器
: 配置為
: eth0 eth1 出Internet
: eth2 eth3 給LAN 使用
: 使用狀況良好 目前想開始限制頻寬
: 網路上查了一些資料 Iproute 的tc 指令可以達到這個功能
: 也親自動手操作了 但是碰到一個問題
: 如果今天我想讓eth0 & eth1 的總頻寬 限制為2M
: 也就是說當eth0 無人使用時 eth1 的頻寬可以到2M
: eth0 和 eth1 同時使用時 兩條加起來也只能到2M
: 似乎無法達成??
: tc指令只能限制單一網卡(OR 可以達成但我沒試出來??)
: 請問我該怎麼做??
在這裡先謝謝回應的大大!!!
我去找了IMQ 的相關資料 自己也動手做了設定
證實了IMQ的確可以 達到一次管理多個介面的能力
由於我是利用網路上的範例去做修改
所以有幾個地方知道怎麼設定卻不知原理
也沒找到關於TC指令的解說
導致與實際上需要的功能有落差
附上我的指令碼 一起討論 含網頁註解
-----------------------------------------------------------------------------
#一開始就清除所有的佇列規則並且忽略錯誤訊息(2>/dev/null)
tc qdisc del dev imq9 root 2>/dev/null
#定義最頂層(根)佇列規則,並指定 default 類別編號
tc qdisc add dev imq9 root handle 10: htb default 20
# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev imq9 parent 10: classid 10:1 htb rate 300kbps ceil 300kbps
# 定義第二層葉類別(rate 保證頻寬,ceil 最大頻寬,prio 優先權)
tc class add dev imq9 parent 10:1 classid 10:10 htb rate 160kbps ceil 200kbps prio 0
tc class add dev imq9 parent 10:1 classid 10:20 htb rate 90kbps ceil 150kbps prio 1
tc class add dev imq9 parent 10:1 classid 10:30 htb rate 50kbps ceil 100kbps prio 2
#------定義各葉類別的佇列規則---------------
#parent 類別編號,handle 葉類別佇列規則編號
#因上面已經用htb來頻寬管理了故後面用簡單無qos的佇列規則piffo即可
tc qdisc add dev imq9 parent 10:10 handle 101: pfifo
tc qdisc add dev imq9 parent 10:20 handle 102: pfifo
tc qdisc add dev imq9 parent 10:30 handle 103: pfifo
#---------------set filter--------------------------
#FW可以依標籤將封包分類
#指定貼有 10 標籤 (handle) 的封包,歸類到 10:10 類別,以此類推
tc filter add dev imq9 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev imq9 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
#---------------set iptables mangle-----------------
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 9
iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 9
--------------------------------------------------------------------------
1.tc class 可以只設定第一層而不設定第二層嗎??
2.保證頻寬可否為 0 意思是不給使用者保證頻寬
3.原本的範例有這條
iptables -t mangle -A POSTROUTING -d 192.168.1.123 -j MARK --set-mark 30
但是我並沒有下 改成 把eth0 導向 imq9 所以沒有handle 的問題
產生下面兩個問題
a.qdisc 這一層的功用是如何?? 測試過如果沒有三個指令都下無法限制流量
b.filter 同上 如果沒有兩個指令都設定無法限制流量
c.由於沒有設定handle 所以應該不會跑進filter 和 qdisc ???
但是結果下載速度卻只有50K~100K
跑進
tc class add dev imq9 parent 10:1 classid 10:30 htb rate 50kbps ceil 100kbps prio 2
這是甚麼原因??
依照指令碼去執行 得到結果 下載約55~70K
原本無限速 下載約300K
不好意思 !!小第資質不好 在等大大們的指教前
還是會去網路上找資料 但網路上都是講求速成
小第想要了解原理 與正確用法 還請大大們多多幫忙
※ 編輯: kuangs 來自: 218.211.253.68 (01/30 16:57)
1F:推 asadfish:XD,我很久沒碰 tc 指定了,書在公司明天再幫你看IMQ。 01/30 18:38
3F:→ asadfish:這本算是國內書中 netfilter 說的比較有內容的… 01/30 18:41
4F:→ asadfish:也算是 IMQ 我唯一看過國內書有寫到,還蠻詳細的… 01/30 18:42
5F:推 asadfish:至於qdisc/class/filter的關係,他們可以說是一體有關聯 01/30 18:46
7F:→ asadfish:關鍵字就用 tc 或 traffic control 就 ok 了。 01/30 18:46
8F:推 asadfish:1. class 可以只設定第一層,上面要有 qdisc 01/30 18:52
9F:→ asadfish:我沒設定過rate為0,你可以試試,應該跟你想的一樣 01/30 18:53
10F:推 asadfish:剩下的四五我再來弄lab(有時間的話),記得書要找第二版的 01/30 18:55
11F:→ asadfish:第一版沒有tc..另外旗標也有一本但絕版,圖書館借一下 01/30 18:56
12F:推 asadfish:不過旗標那本主要是說tc,以htb為例,你懂了就不用找 01/30 18:58
13F:推 asadfish:另外 --set-mark 30 只有 50~100蠻正常的啊,你跑進了 01/30 19:02
14F:→ asadfish:handle 30 裡面 01/30 19:02
15F:→ asadfish:handle 30 fw classid 10:30 → mark30的跑進10:30 01/30 19:03
16F:→ asadfish:classid 10:30 htb rate 50kbps ceil 100kbps 就跑到這了 01/30 19:04
17F:→ asadfish:另外如果你是要幫client QOS且上線,sfq 找一下 01/30 19:06
18F:→ asadfish:htb 有他的缺點在,你可以用 client 端開p2p然後ping就知 01/30 19:06
19F:→ asadfish:會有種先佔先贏的fu,sfq 則是固定時間重新分配client上 01/30 19:07
20F:→ asadfish:的連線。 01/30 19:07
21F:推 asadfish:說錯,把htb換成fifo...= =",牙痛一直沒辦法專注 01/30 19:11
22F:→ kuangs:謝謝大大精闢的解說!!我會再來試試看的 01/31 09:47
24F:→ zelda312:做法是在ingress建立一個virtual interface 02/01 02:15
25F:→ zelda312:將封包利用policer導到該interface(例ifb0) 02/01 02:16
26F:→ zelda312:然後在ifb0上做traffic control即可 02/01 02:17
27F:推 asadfish:樓上水唷 02/01 04:13