達成頻寬控管功能了!!!!! 作者: 阿忠 (211.75.241.---) 日期: 01/09/03 20:25 依照大哥所翻譯的文章內容來看,cbq是適合正式的ip不能經過NAT的 有NAT的伺服器是不能兼做CBQ 頻寬控管。 IN<--->ETH0--LINUX(防火牆)---ETH1<----->客戶端(正式的IP) 而經過設定頻寬控管後如(上傳): 如下圖 IN<---ETH0(佇列)--LINUX(防火牆)---ETH1(佇列)<-----客戶端(正式的IP) 所以抓取以封包的程式 如:tc filter add dev eth0 parent 20:0 protocol ip prio 100 u32 \ match ip src 150.151.23.24 flowid 20:100 如封包經過防火牆到達佇列時要比對來源ip match ip src 就可將比對到的封包頡取出來,送入20:100的佇列當中 而經過設定頻寬控管後如(下傳): 如下圖 IN--->ETH0(佇列)--LINUX(防火牆)---ETH1(佇列)----->客戶端(正式的IP) 所以抓取以封包的程式 如:tc filter add dev eth1 parent 10:0 protocol ip prio 100 u32 \ match ip src 150.151.23.24 flowid 10:100 如封包經過防火牆到達佇列時要比對來源ip match ip dst 就可將比對到的封包頡取出來,送入20:100的佇列當中 所以頻寬控管只能設在路由器(route)無法兼做偽裝。 ----------------如要兼做(NAT)偽裝-------------------------------------- 而經過設定頻寬控管後如(上傳): 動機: 我的做法是:既然使用u32分類器來比對上傳的ip封包而受制 於封包偽裝的動作比u32分類器比對ip還快一步執行的話。 那就不要用這一個ip比對方式換一個 既然受制防火牆(nat)那就用防火牆來比對來源ip封包 FW 依照大哥所翻的文章第11.1項 FW 分類器 iptables -I PREROUTING -t mangle -p tcp -d HostA \ -j MARK --set-mark 1 tc filter add dev eth0 protocol ip parent 1:0 prio 1 \ handle 1 fw classid 1:1 來設定其測試結果控頻寬功能照我們所設定的k數在上傳 底下是以u32來比對區塊圖 如下圖 IN<---ETH0(佇列)--LINUX(防火牆NAT)---ETH1(佇列)<-----客戶端(虛凝IP) 所以抓取以封包的程式 如:tc filter add dev eth0 parent 20:0 protocol ip prio 100 u32 \ match ip src 192.168.1.50 flowid 20:100 如封包經過防火牆到達佇列時要比對來源ip match ip src 就可將比對到的封包頡取出來,送入20:100的佇列當中 但它是無法抓取到192.168.1.50的IP封包的只會從ROOT佇類通過而無法轉交下層的佇 類。 因為封包巳經先偽裝後再經過佇類程式。 ***我有將來源ip192.168.1.50換為match ip src 211.***.***.37 (eth0的正式ip) 就可頡取到封包送到root佇類而轉交到20:100佇類當中 *****所以它所抓取到的封包是經過偽裝後的封包 而經過設定頻寬控管後如(下傳): 如下圖 IN--->ETH0(佇列)--LINUX(防火牆)---ETH1(佇列)----->客戶端(正式的IP) 所以抓取以封包的程式 如:tc filter add dev eth1 parent 10:0 protocol ip prio 100 u32 \ match ip dst 192.168.1.50 flowid 10:100 如封包經過防火牆到達佇列時要比對來源ip match ip dst 就可將比對到的封包頡取出來,送入20:100的佇列當中 *****這部份:就沒有問題一切正常受頻寬控制中 以下的例子是在我的電腦上所執行當中 歡迎大哥收入巧心得中 還希望大哥有空的話,多多翻些原文的文章,給我們這些不識英文的小子,能有一窺 linux領域的管道。謝謝 #!/bin/bash # unded 敘述拿掉那麼該類別就能夠借取其它類別的頻寬來用。 # eth0 為上傳 # eth1 為下傳 #下例為上傳:宣告佇列戒律 tc qdisc add dev eth0 root handle 10: cbq bandwidth 64Kbit avpkt 1000 #宣告頂層的類別為: 10:0 tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 64Kbit rate 512Kbit allot 1514 weight 3Kbit prio 8 maxburst 20 avpkt 1000 #宣告客戶類別,及其頻寬大小 id:為10:300 # 忠的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:300 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 滋的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:100 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 修的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:110 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 雨仰的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:120 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 雪的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:130 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 阿賓的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:140 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 張太的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:150 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 煌的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:160 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 婷的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:180 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 裕的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:190 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 郵件主機的上傳頻寬 tc class add dev eth0 parent 10:1 classid 10:200 cbq bandwidth 64Kbit rate 18Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded #------------------------------------------------------------------------- # 宣告管理佇列 tc qdisc add dev eth0 parent 10:300 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:100 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:110 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:120 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:130 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:140 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:150 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:160 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:180 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:190 sfq quantum 1514b perturb 15 tc qdisc add dev eth0 parent 10:200 sfq quantum 1514b perturb 15 #----------------------------------------------------------------------- # 向核心解釋什麼樣的封包屬於什麼樣別: # 忠的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 30 fw classid 10:300 iptables -I PREROUTING -t mangle -s 192.168.2.50 -j MARK --set-mark 30 # 滋的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 1 fw classid 10:100 iptables -I PREROUTING -t mangle -s 192.168.1.10 -j MARK --set-mark 1 # 修的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 2 fw classid 10:110 iptables -I PREROUTING -t mangle -s 192.168.1.11 -j MARK --set-mark 2 # 雨仰的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 3 fw classid 10:120 iptables -I PREROUTING -t mangle -s 192.168.1.12 -j MARK --set-mark 3 # 雪的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 4 fw classid 10:130 iptables -I PREROUTING -t mangle -s 192.168.1.13 -j MARK --set-mark 4 # 阿賓的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 5 fw classid 10:140 iptables -I PREROUTING -t mangle -s 192.168.1.14 -j MARK --set-mark 5 # 張太的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 6 fw classid 10:150 iptables -I PREROUTING -t mangle -s 192.168.1.15 -j MARK --set-mark 6 # 煌的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 7 fw classid 10:160 iptables -I PREROUTING -t mangle -s 192.168.1.16 -j MARK --set-mark 7 # 婷的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 8 fw classid 10:180 iptables -I PREROUTING -t mangle -s 192.168.1.18 -j MARK --set-mark 8 # 裕的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 9 fw classid 10:190 iptables -I PREROUTING -t mangle -s 192.168.1.19 -j MARK --set-mark 9 # 郵件主機的封包設定及頡取 tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle10 fw classid 10:200 iptables -I PREROUTING -t mangle -s 192.168.1.60 -j MARK --set-mark 10 #-------------------------------------------------------------------- # 下載部份:eth1 # unded 敘述拿掉那麼該類別就能夠借取其它類別的頻寬來用。 #下例為下傳:宣告佇列戒律 tc qdisc add dev eth1 root handle 20: cbq bandwidth 512Kbit avpkt 1000 #宣告頂層的類別為: 20:0 tc class add dev eth1 parent 20:0 classid 20:1 cbq bandwidth 512Kbit rate 512Kbit allot 1514 weight 3Kbit prio 8 maxburst 20 avpkt 1000 #宣告客戶類別,及其頻寬大小 id:為10:100 # 忠的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:300 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 滋的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:100 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 修的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:110 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 雨仰的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:120 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 雪的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:130 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 阿賓的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:140 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 張太的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:150 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 煌的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:160 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 婷的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:180 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 裕的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:190 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 郵件主機的下傳頻寬 tc class add dev eth1 parent 20:1 classid 20:200 cbq bandwidth 512Kbit rate 80Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded # 宣告管理佇列 tc qdisc add dev eth1 parent 20:100 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:110 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:120 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:130 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:140 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:150 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:160 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:180 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:190 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:200 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 20:300 sfq quantum 1514b perturb 15 # 向核心解釋什麼樣的封包屬於什麼樣別: tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.50 flowid 20:300 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.10 flowid 20:100 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.11 flowid 10:110 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.12 flowid 20:120 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.13 flowid 20:130 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.14 flowid 20:140 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.15 flowid 20:150 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.16 flowid 20:160 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.18 flowid 10:180 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.19 flowid 10:190 tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.1.60 flowid 20:200 對了小弟還有二個問題想請教 1. iptables -I PREROUTING -t mangle -p tcp -d HostA \ -j MARK --set-mark 1 能否解釋上面這個指令 2. 如果我用iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE 來引導一群電腦上網的話。 我只開放10台ip從192.168.1.1--192.168.11的話不讓他們使用 我們規定的ip,以外的ip全檔下來的話 iptables的要怎麼下呢? 如要一個ip配合一個mac位置其於全檔下來又如何下呢 謝謝大哥指導 回覆本文 Re: 達成頻寬控管功能了!!!!! 作者: netman (---.seed.net.tw) 日期: 01/09/03 20:59 太好了﹗恭喜﹗我可以將文章收錄進‘技巧心得’裡面嗎﹖還是您可以另外提供一個 HTML 版本給我﹖ 至於您的問題﹕ 1) 就是為封包加上一個為 1 的標籤而已﹐這個標籤可以共其它封包處理程式﹐如 cbq 使用。 2) 我想您要逐行來寫了﹐或是玩玩 subnet 聚集﹕ 第一行是關於 192.168.1.0/29 的﹐ 第二行是關於 192.168.1.9 的﹐ 第三行是關於 192.168.1.10 的﹐ 第四行數關於 192.168.1.11 的。 不過﹐說老實話﹐我沒這樣試過哦﹐如果我來設﹐就乖乖的輸入 11 行就是了。 至於 MAC 位址﹐參考前面的文章吧﹐好像有提到過。 |