達成頻寬控管功能了!!!!!
时间:2005-12-22 来源:xwq_007
作者: 阿忠 (211.75.241.---)
日期: 01/09/03 20:25
依照大哥所翻譯的文章內容來看,cbq是適合正式的ip不能經過NAT的
有NAT的伺服器是不能兼做CBQ 頻寬控管。
IN<--->ETH0--LINUX(防火牆)---ETH1<----->客戶端(正式的IP)
而經過設定頻寬控管後如(上傳):
如下圖
IN<---ETH0(佇列)--LINUX(防火牆)---ETH1(佇列)<-----客戶端(正式的IP)
所以抓取以封包的程式
轉貼來自Study-Areahttp://www.study-area.org
達成頻寬控管功能了!!!!!
作者: 阿忠 (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 位址﹐參考前面的文章吧﹐好像有提到過。