看板 Network 關於我們 聯絡資訊
※ 引述《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)
asadfish:XD,我很久沒碰 tc 指定了,書在公司明天再幫你看IMQ。 01/30 18:38
asadfish:如果你有空的話,可以找一下 http://0rz.tw/qYf21 01/30 18:41
asadfish:這本算是國內書中 netfilter 說的比較有內容的… 01/30 18:41
asadfish:也算是 IMQ 我唯一看過國內書有寫到,還蠻詳細的… 01/30 18:42
asadfish:至於qdisc/class/filter的關係,他們可以說是一體有關聯 01/30 18:46
asadfish:http://0rz.tw/XVs6v 我記得有中文版,你找一下。 01/30 18:46
asadfish:關鍵字就用 tc 或 traffic control 就 ok 了。 01/30 18:46
asadfish:1. class 可以只設定第一層,上面要有 qdisc 01/30 18:52
asadfish:我沒設定過rate為0,你可以試試,應該跟你想的一樣 01/30 18:53
asadfish:剩下的四五我再來弄lab(有時間的話),記得書要找第二版的 01/30 18:55
asadfish:第一版沒有tc..另外旗標也有一本但絕版,圖書館借一下 01/30 18:56
asadfish:不過旗標那本主要是說tc,以htb為例,你懂了就不用找 01/30 18:58
asadfish:另外 --set-mark 30 只有 50~100蠻正常的啊,你跑進了 01/30 19:02
asadfish:handle 30 裡面 01/30 19:02
asadfish:handle 30 fw classid 10:30 → mark30的跑進10:30 01/30 19:03
asadfish:classid 10:30 htb rate 50kbps ceil 100kbps 就跑到這了 01/30 19:04
asadfish:另外如果你是要幫client QOS且上線,sfq 找一下 01/30 19:06
asadfish:htb 有他的缺點在,你可以用 client 端開p2p然後ping就知 01/30 19:06
asadfish:會有種先佔先贏的fu,sfq 則是固定時間重新分配client上 01/30 19:07
asadfish:的連線。 01/30 19:07
asadfish:說錯,把htb換成fifo...= =",牙痛一直沒辦法專注 01/30 19:11
kuangs:謝謝大大精闢的解說!!我會再來試試看的 01/31 09:47
zelda312:http://ppt.cc/kl2b ifb 為imq之繼任者 且為linux所支援 02/01 02:14
zelda312:做法是在ingress建立一個virtual interface 02/01 02:15
zelda312:將封包利用policer導到該interface(例ifb0) 02/01 02:16
zelda312:然後在ifb0上做traffic control即可 02/01 02:17
asadfish:樓上水唷 02/01 04:13