2012年1月30日 星期一

Qos + CBQ

單一主機的上傳,即 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下載
         wget http://server/xxxfiles

NAT環境,以PORT number設置內部網路的上下載
模擬頻寬 512Kbps/512Kbps
attachments/month_200611/1163513806.png

[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=,,
DEVICE=eth0,10Mbit,1Mbit               # ifname = 網卡名稱
                                                         # bandwidth = 網卡上限頻寬
                                                         # weight = bandwidth / 10

RATE=2Mbit
WEIGHT=200Kbit                              # ADSL 2Mbits/256Kbits,即下載200kbytes,上傳25kbytes

PRIO=5                                             # 優先權 ,1到8,預設為5

PARENT=0002                                   # 上層,預設沒設

LEAF=none | tbf | sfq                        # 預設為tbf

BOUNDED=yes | no                           # 設成 yes,將在超出限制的情況下不允許從它的上層借入頻寬,
                                                          # 當設成 no,為允許時,LEAF必設 none 或 sfq
                                                          # 預設為 yes

ISOLATED=yes | no                            # 設成 yes,將不會借出沒用到的頻寬給下層使用
                                                           # 預設為 no

RULE=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=0102
MARK=30         # <-- 加入MARK這行
   vi cbq-0004.eth1-20
DEVICE=eth1
RATE=128Kbit
WEIGHT=12Kbit
PRIO=8
RULE=:20,
BOUNDED=yes
ISOLATED=yes
PARENT=0002
MARK=20         # <-- 加入MARK這行
   附註: 為了限制 ftp的 passive mode,但也限制了 1024以上所有的 port
 

NAT環境
限制內部單一主機
attachments/month_200611/1163513824.png

   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的 MARK
iptables -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=yes
MARK=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.0

eth0  Link encap:Ethernet HWaddr 00:E0:81:50:36:3D
         inet6 addr: fe80::2e0:81ff:fe50:363d/64 Scope:Link

eth1  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=yes
RULE=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=5
BOUNDED=yes
ISOLATED=yes
RULE=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


沒有留言:

張貼留言

How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...