Re: [問答] 管制頻寬問題??

看板Network作者 (kuangs)時間12年前 (2013/01/30 16:41), 編輯推噓9(9018)
留言27則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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)

01/30 18:38, , 1F
XD,我很久沒碰 tc 指定了,書在公司明天再幫你看IMQ。
01/30 18:38, 1F

01/30 18:41, , 2F
如果你有空的話,可以找一下 http://0rz.tw/qYf21
01/30 18:41, 2F

01/30 18:41, , 3F
這本算是國內書中 netfilter 說的比較有內容的…
01/30 18:41, 3F

01/30 18:42, , 4F
也算是 IMQ 我唯一看過國內書有寫到,還蠻詳細的…
01/30 18:42, 4F

01/30 18:46, , 5F
至於qdisc/class/filter的關係,他們可以說是一體有關聯
01/30 18:46, 5F

01/30 18:46, , 6F
http://0rz.tw/XVs6v 我記得有中文版,你找一下。
01/30 18:46, 6F

01/30 18:46, , 7F
關鍵字就用 tc 或 traffic control 就 ok 了。
01/30 18:46, 7F

01/30 18:52, , 8F
1. class 可以只設定第一層,上面要有 qdisc
01/30 18:52, 8F

01/30 18:53, , 9F
我沒設定過rate為0,你可以試試,應該跟你想的一樣
01/30 18:53, 9F

01/30 18:55, , 10F
剩下的四五我再來弄lab(有時間的話),記得書要找第二版的
01/30 18:55, 10F

01/30 18:56, , 11F
第一版沒有tc..另外旗標也有一本但絕版,圖書館借一下
01/30 18:56, 11F

01/30 18:58, , 12F
不過旗標那本主要是說tc,以htb為例,你懂了就不用找
01/30 18:58, 12F

01/30 19:02, , 13F
另外 --set-mark 30 只有 50~100蠻正常的啊,你跑進了
01/30 19:02, 13F

01/30 19:02, , 14F
handle 30 裡面
01/30 19:02, 14F

01/30 19:03, , 15F
handle 30 fw classid 10:30 → mark30的跑進10:30
01/30 19:03, 15F

01/30 19:04, , 16F
classid 10:30 htb rate 50kbps ceil 100kbps 就跑到這了
01/30 19:04, 16F

01/30 19:06, , 17F
另外如果你是要幫client QOS且上線,sfq 找一下
01/30 19:06, 17F

01/30 19:06, , 18F
htb 有他的缺點在,你可以用 client 端開p2p然後ping就知
01/30 19:06, 18F

01/30 19:07, , 19F
會有種先佔先贏的fu,sfq 則是固定時間重新分配client上
01/30 19:07, 19F

01/30 19:07, , 20F
的連線。
01/30 19:07, 20F

01/30 19:11, , 21F
說錯,把htb換成fifo...= =",牙痛一直沒辦法專注
01/30 19:11, 21F

01/31 09:47, , 22F
謝謝大大精闢的解說!!我會再來試試看的
01/31 09:47, 22F

02/01 02:14, , 23F
http://ppt.cc/kl2b ifb 為imq之繼任者 且為linux所支援
02/01 02:14, 23F

02/01 02:15, , 24F
做法是在ingress建立一個virtual interface
02/01 02:15, 24F

02/01 02:16, , 25F
將封包利用policer導到該interface(例ifb0)
02/01 02:16, 25F

02/01 02:17, , 26F
然後在ifb0上做traffic control即可
02/01 02:17, 26F

02/01 04:13, , 27F
樓上水唷
02/01 04:13, 27F
文章代碼(AID): #1H2Dp4Lz (Network)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1H2Dp4Lz (Network)