單一主機的上傳,即 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


 
[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 / 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

 

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的 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

Related posts 相關文章

作者

留言

写的不错,,受益了!!!!!!!

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。