1
Linux 討論版 / ebtables set mark 與 tc 的搭配來進行 QoS,無法管制下載?
« 於: 2013-12-30 17:08 »
各位好!
通常 QoS 是利用 tc 搭配 iptables 指令來進行的,但是因為有 MAC range 的需求,因此才測試 ebtables 能否達成目標。
在實驗上傳時奇妙的成功了,可以管制成想要的速度;但下載卻不行,百思不得其解因此前來求教!!
我的設定如下:
假設本機 PC 的 MAC address 是 01:23:45:54:32:10
而WAN 端有一台 PC 其 MAC address 是 98:76:54:45:67:89
TC 設定了 3個 queue,預設走第2條 queue。
class htb 10:100 root rate 102400Kbit ceil 102400Kbit burst 52992b cburst 52992b
class htb 10:1 parent 10:100 leaf 11: prio 1 rate 51200Kbit ceil 102400Kbit burst 52992b cburst 52992b
class htb 10:2 parent 10:100 leaf 21: prio 2 rate 34128Kbit ceil 51200Kbit burst 27289b cburst 44423b
class htb 10:3 parent 10:100 leaf 31: prio 3 rate 10000Kbit ceil 34128Kbit burst 18723b cburst 35Kb
情境1: 管制上傳的速度,以本機PC的 MAC address 做為條件,讓本機的PC 上傳走第3條 queue
因此我下了這道指令
並使用下面的指令來觀看 rule 是否成立
可以看到第 3 條 queue 的資訊關於packet 數那裡,從本來的 Sent 0 bytes 0 pkt 變成有數值,代表上傳的確有走這條 queue ,且速度上也有下降。
因此這個情境的實驗算是成功的! 雖然我不懂的是為什麼下在 INPUT 有效...OUTPUT 卻無效
p.s. 這樣以 MAC range 做為條件也OK
情境2.1: 管制下載的速度,以 WAN 端外面 PC 的MAC address 做為條件,讓下載時走第1條 queue
同樣的設了 ebtables rule
在這裡的 INPUT 不管改成 OUTPUT, PREROUTING, POSTROUTING, FORWARD, BROUTING
不管搭配了 -s -d,都沒有任何的改變,還是走預設的 queue 2...
情境2.2: 管制下載的速度,以本機PC的 MAC address 做為條件,讓下載時走第1條 queue
同樣設了 ebtables rule,同樣試了所有的 chain,也都無法改變下載時走的 queue
不知各位前輩有沒有甚麼意見/方向可以供我參考? 謝謝~!!
通常 QoS 是利用 tc 搭配 iptables 指令來進行的,但是因為有 MAC range 的需求,因此才測試 ebtables 能否達成目標。
在實驗上傳時奇妙的成功了,可以管制成想要的速度;但下載卻不行,百思不得其解因此前來求教!!
我的設定如下:
假設本機 PC 的 MAC address 是 01:23:45:54:32:10
而WAN 端有一台 PC 其 MAC address 是 98:76:54:45:67:89
TC 設定了 3個 queue,預設走第2條 queue。
class htb 10:100 root rate 102400Kbit ceil 102400Kbit burst 52992b cburst 52992b
class htb 10:1 parent 10:100 leaf 11: prio 1 rate 51200Kbit ceil 102400Kbit burst 52992b cburst 52992b
class htb 10:2 parent 10:100 leaf 21: prio 2 rate 34128Kbit ceil 51200Kbit burst 27289b cburst 44423b
class htb 10:3 parent 10:100 leaf 31: prio 3 rate 10000Kbit ceil 34128Kbit burst 18723b cburst 35Kb
情境1: 管制上傳的速度,以本機PC的 MAC address 做為條件,讓本機的PC 上傳走第3條 queue
因此我下了這道指令
代碼: [選擇]
ebtables -A INPUT -s 01:23:45:54:32:10 -j mark --set-mark 3
並使用下面的指令來觀看 rule 是否成立
代碼: [選擇]
tc -s class show dev eth2.2
可以看到第 3 條 queue 的資訊關於packet 數那裡,從本來的 Sent 0 bytes 0 pkt 變成有數值,代表上傳的確有走這條 queue ,且速度上也有下降。
因此這個情境的實驗算是成功的! 雖然我不懂的是為什麼下在 INPUT 有效...OUTPUT 卻無效
p.s. 這樣以 MAC range 做為條件也OK
代碼: [選擇]
ebtables -A INPUT -s 01:23:45:00:00:00/FF:FF:FF:00:00:00 -j mark --set-mark 3
情境2.1: 管制下載的速度,以 WAN 端外面 PC 的MAC address 做為條件,讓下載時走第1條 queue
同樣的設了 ebtables rule
代碼: [選擇]
ebtables -A INPUT -s 98:76:54:45:67:89 -j mark --set-mark 1
在這裡的 INPUT 不管改成 OUTPUT, PREROUTING, POSTROUTING, FORWARD, BROUTING
不管搭配了 -s -d,都沒有任何的改變,還是走預設的 queue 2...
情境2.2: 管制下載的速度,以本機PC的 MAC address 做為條件,讓下載時走第1條 queue
同樣設了 ebtables rule,同樣試了所有的 chain,也都無法改變下載時走的 queue
代碼: [選擇]
ebtables -A INPUT -d 01:23:45:54:32:10 -j mark --set-mark 1
不知各位前輩有沒有甚麼意見/方向可以供我參考? 謝謝~!!