達成頻寬控管功能了!!!!!
作者: 阿忠 (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 位址﹐參考前面的文章吧﹐好像有提到過。