單一主機的上傳,即 Client的下載(如瀏覽網頁)
[ client ] <———- ech0 -[ server ]
[1.] 下載 CBQ的 script,cbq.init-v0.7.3
https://sourceforge.net/projects/cbqinit
[2.] cbq.init 的初始預設作業
mkdir /etc/sysconfig/cbq
chmod u+x cbq.init
cp cbq.init /sbin
[3.] cd /etc/sysconfig/cbq
vi cbq-0002.eth0-80
DEVICE=eth0,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
RULE=*:80,
BOUNDED=yes
ISOLATED=no
[4.] 顯示 tc格式結果
cbq.init compile
啟動
cbq.init start
[5.] 從 Client端測試下載 web檔,限制在10KByte/s下載
NAT環境,以PORT number設置內部網路的上下載
模擬頻寬 512Kbps/512Kbps
[1.] 從 eth2出去的,目的為 25、20 port,分配各為 256Kbit、256Kbit,這對內部來說是上傳
而從 eth1出去的,來源為110、80、20 port,分配各為 128Kbit、256Kbit、128Kbit,這對內部來看是下載
[2.] 下載的設定
vi cbq-0002.eth1-110
DEVICE=eth1,100Mbit,10Mbit
RATE=128Kbit
WEIGHT=12Kbit
PRIO=5
RULE=:110,
BOUNDED=yes
ISOLATED=yes
vi cbq-0003.eth1-80
DEVICE=eth1
RATE=256Kbit
WEIGHT=25Kbit
PRIO=7
RULE=:80,
BOUNDED=yes
ISOLATED=yes
PARENT=0002
vi cbq-0004.eth1-20
DEVICE=eth1
RATE=128Kbit
WEIGHT=12Kbit
PRIO=8
RULE=:20,
BOUNDED=yes
ISOLATED=yes
PARENT=0002
[3.] 上傳設定
vi cbq-0102.eth2-25
DEVICE=eth2,100Mbit,10Mbit
RATE=256Kbit
WEIGHT=25Kbit
PRIO=6
RULE=:25
BOUNDED=yes
ISOLATED=yes
vi cbq-0103.eth2-20
DEVICE=eth2
RATE=256Kbit
WEIGHT=25Kbit
PRIO=8
RULE=:20
BOUNDED=yes
ISOLATED=yes
PARENT=0102
附註1:
cbq作用在流出的封包上
依整個linux box來看,從eht2出去是限制到上傳,從eth1出去限制到下傳
附註2:
cbq設定檔中的 RULE參數,如果”沒”加逗點的話為目的,”有”加逗點為來源
參數說明:
DEVICE=<ifname>,<bandwidth>,<weight>
DEVICE=eth0,10Mbit,1Mbit # ifname = 網卡名稱
# bandwidth = 網卡上限頻寬
# weight = bandwidth / 10RATE=2Mbit
WEIGHT=200Kbit # ADSL 2Mbits/256Kbits,即下載200kbytes,上傳25kbytesPRIO=5 # 優先權 ,1到8,預設為5
PARENT=0002 # 上層,預設沒設
LEAF=none | tbf | sfq # 預設為tbf
BOUNDED=yes | no # 設成 yes,將在超出限制的情況下不允許從它的上層借入頻寬,
# 當設成 no,為允許時,LEAF必設 none 或 sfq
# 預設為 yesISOLATED=yes | no # 設成 yes,將不會借出沒用到的頻寬給下層使用
# 預設為 noRULE=10.1.1.0/24:80 # 目的為10.1.1.0的網段,且port為80
RULE=10.2.2.5 # 目的為10.2.2.5的主機
RULE=10.2.2.5:20/0xfffe # 目的為10.2.2.5的主機,且port為20和21
RULE=:25,10.2.2.128/26:5000 # 來源port為25,到目的網段為10.2.2.128,且port為5000
RULE=10.5.5.5:80, # 來源主機為10.5.5.5,且port 為80
附註: RULE參數可以多個設定
NAT環境(延續上面的環境),FTP passive mode,有些 FTP並非全用 port number 20來傳輸資料,大部份會動用到 port numbers 1024以上的 port
關於 ftp的 passive mode,需搭配 iptables的 MARK才能有效限制到流量
iptables -t mangle -A POSTROUTING -o eth2 -p tcp –dport 1024:65535 -j MARK –set-mark 30
iptables -t mangle -A POSTROUTING -o eth1 -p tcp –sport 1024:65535 -j MARK –set-mark 20
vi cbq-0103.eth2-20
DEVICE=eth2
RATE=256Kbit
WEIGHT=25Kbit
PRIO=8
RULE=:20
BOUNDED=yes
ISOLATED=yes
PARENT=0102MARK=30 # <– 加入MARK這行
vi cbq-0004.eth1-20
DEVICE=eth1
RATE=128Kbit
WEIGHT=12Kbit
PRIO=8
RULE=:20,
BOUNDED=yes
ISOLATED=yes
PARENT=0002MARK=20 # <– 加入MARK這行
附註: 為了限制 ftp的 passive mode,但也限制了 1024以上所有的 port
ref: http://phorum.study-area.org/viewtopic.php?t=17054&highlight=cbq
NAT環境
限制內部單一主機
vi cbq-0002.eth2-host
DEVICE=eth2,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
RULE=192.168.1.1,
BOUNDED=yes
ISOLATED=yes
vi cbq-0003.eth1-host
DEVICE=eth1,100Mbit,10Mbit
RATE=256Kbit
WEIGHT=25Kbit
PRIO=6
RULE=192.168.1.1
BOUNDED=yes
ISOLATED=yes
引用:
但此時上傳卻不受限制,因為封包進入 QOS EGRESS之前,
來源 IP已變成 Linux Box對外的 IP,所以 192.168.1.1主機是不受上傳限制,
所以要配合 iptables的 MARKiptables -t mangle -A PREROUTING –i eth1 -s 192.168.1.1 -j MARK –set-mark 40
再修改 cbq-0002.eth2檔
DEVICE=eth2,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
BOUNDED=yes
ISOLATED=yesMARK=40 # <– RULE拿掉,加入MARK
或者搭配方式
iptables -t mangle -A FORWARD -o eth2 -s 192.168.1.1 -j MARK –set-mark 40
或者
iptables -t mangle -A POSTROUTING -o eth2 -s 192.168.1.1 -j MARk –set-mark 40
NAT環境
分別限制入部單一主機與整個內部網段
全 Subnet 限制在 512k/64k,而 10.1.1.1主機則 100Mbps/10Mbit
+—–—-[ 10.1.1.1 ]
+——————-+ |
[ internet ] —–ppp0 | | eth0—--+
+——————-+ |
+———–[ 10.1.1.0/24 ]
iptables設定
iptables -t mangle -A POSTROUTING -s 10.1.1.1 -j MARK –set-mark 30
iptables -t mangle -A PREROUTING -i eth0 -s 10.1.1.0/24 -j MARK –set-mark 50
vi cbq-0002.ppp0
DEVICE=ppp0,100Mbit,10Mbit
RATE=100Mbit
WEIGHT=10Mbit
PRIO=5
BOUNDED=yes
ISOLATED=yes
MARK=30
vi cbq-0003.eth0
DEVICE=eth0,100Mbit,10Mbit
RATE=100Mbit
WEIGHT=10Mbit
PRIO=5
BOUNDED=yes
ISOLATED=yes
RULE=10.1.1.1
vi cbq-0007.ppp0
DEVICE=ppp0
RATE=64Kbit
WEIGHT=6Kbit
PRIO=7
BOUNDED=yes
ISOLATED=yes
parent=0002
MARK=50
vi cbq-0008.eth0
DEVICE=eth0
RATE=512Kbit
WEIGHT=50Kbit
PRIO=7
BOUNDED=yes
ISOLATED=yes
parent=0003
RULE=10.1.1.0/24
— 我是分隔線 —
NAT環境
iptables的 MARK另設定方式
+———–+
[ internet ]——-eth1-| |-eth0———[ subnet ]
+———–+
限制下載
iptables -t mangle -A FORWARD -o eth0 -d 192.168.1.0/24 -j MARK –set-mark 10
vi cbq-0002.download
DEVICE=eth0,100Mbit,10Mbit
RATE=200Kbit
WEIGHT=20Kbit
PRIO=5
MARK=10
限制上傳
iptables -t mangle -A FORWARD -o eth1 -s 192.168.1.0/24 -j MARK –set-mark 20
vi cbq-0003.upload
DEVICE=eth1,100Mbit,10Mbit
RATE=50Kbit
WEIGHT=5Kbit
PRIO=5
MARK=20
— 我是分隔線 —
Bridge mode
環境:
Br0 10.10.1.100/255.0.0.0
Eth0對外 0.0.0.0
Eth1對內 0.0.0.0
10.10.1.100 為 bridge server
10.10.1.78 透過 bridge server連外
以下為 bridge mode server的 ifconfig
br0 Link encap:Ethernet HWaddr 00:E0:81:50:36:3C
inet addr:10.10.1.100 Bcast:10.255.255.255 Mask:255.0.0.0eth0 Link encap:Ethernet HWaddr 00:E0:81:50:36:3D
inet6 addr: fe80::2e0:81ff:fe50:363d/64 Scope:Linketh1 Link encap:Ethernet HWaddr 00:E0:81:50:36:3C
inet6 addr: fe80::2e0:81ff:fe50:363c/64 Scope:Link
情況一
外部 pc下載內部 pc 10.10.1.78上的 web檔案,即內部 pc上傳,經由 Bridge
作法一
vi cbq-0002.eth0
DEVICE=eth0,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
MARK=50
BOUNDED=yes
ISOLATED=yes
搭配MARK
iptables -t mangle -I POSTROUTING -o br0 -s 10.10.1.78 -j MARK –set-mark 50
注意 : 出去的介面是br0,才能對內部 PC上傳有限制
作法二
vi cbq-0002.eth0
# 介面需設eth0,br0無效
DEVICE=eth0,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
BOUNDED=yes
ISOLATED=yesRULE=10.10.1.78,
# 或者RULE=:80,
情況二,內部 pc 10.10.1.78下載外部 pc上的web檔案,即內部 pc下傳,經由 Bridge
作法一
vi cbq-0002.eth1
DEVICE=eth1,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5BOUNDED=yes
ISOLATED=yesRULE=10.10.1.78
# 或者可設為
#RULE=:80,
作法二
iptables -t mangle -I POSTROUTING -o br0 -d 10.10.1.78 -j MARK –set-mark 50
vi cbq-0002.eth1
DEVICE=eth1,100Mbit,10Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=5
MARK=50
BOUNDED=yes
ISOLATED=yes
留言
写的不错,,受益了!!!!!!!