用cbq.init限制网络流量(原创)

发表于:2007-07-04来源:作者:点击数: 标签:
1. cd/tmp wget-c-q http://puzzle.dl.sourceforge.net/sourceforge/cbqinit/cbq.init-v0.7.3nbsp ; 2. mv/tmp/cbq.init-v0.7.3/sbin/cbq chmodu+x/sbin/cbq 3. mkdir-p/etc/sysconfig/cbq 4. cd/etc/sysconfig/cbq/ 建立下面文件 cbq-0002.manager cbq-0004

1. 

cd /tmp 
wget -c -q http://puzzle.dl.sourceforge.net/sourceforge/cbqinit/cbq.init-v0.7.3& ;

2. 
mv /tmp/cbq.init-v0.7.3 /sbin/cbq 
chmod u+x /sbin/cbq 

3. 
mkdir -p /etc/sysconfig/cbq 

4. 
cd /etc/sysconfig/cbq/ 
建立下面文件 
cbq-0002.manager 
cbq-0004.limit 
cbq-0010.other 

cbq-0002.manager内容如下: 

#(eth1为我的第二块网卡,实际带宽为100Mbit,根据公式weight~=RATE/10所以实际速率为10Mbit) 
DEVICE=eth1,100Mbit,10Mbit 
#(限制最大带宽) 
RATE=4Mbit 
#(限制最大速率) 
WEIGHT=400Kbit 
#(优先级别) 
PRIO=5 
#(规则,是来自192.168.1.0网段的1080端口,到目的地地址192.168.100.86) 
RULE=192.168.1.0/24:1080,192.168.100.86 
#(规则,是来自192.168.1.0网段的1081端口,到目的地地址192.168.100.76) 
RULE=192.168.1.0/24:1081,192.168.100.76 

cbq-0004.limit内容如下: 

DEVICE=eth1,100Mbit,10Mbit 
RATE=100Kbit 
WEIGHT=20Kbit 
PRIO=5 
#(规则,是来自192.168.1.0网段的1080端口,到目的地地址192.168.100.51) 
RULE=192.168.1.0/24:1080,192.168.100.51/32 
#(规则,是来自192.168.1.0网段的1081端口,到目的地地址192.168.100.41) 
RULE=192.168.1.0/24:1081,192.168.100.41/32 
cbq-0010.other内容如下: 

DEVICE=eth1,100Mbit,10Mbit 
RATE=800Kbit 
WEIGHT=80Kbit 
PRIO=5 
#(规则,是来自192.168.1.0网段的1081端口,到目的地地址192.168.100.0网段) 
RULE=192.168.1.0/24:1081,192.168.100.0/24 
(规则,是来自192.168.1.0网段的1080端口,到目的地地址192.168.100.0网段) 
RULE=192.168.1.0/24:1080,192.168.100.0/24 

5. 
最后启动 cbq 
cbq start 

6. 
注意 
/etc/sysconfig/cbq/ 
下的文件不能以cbq-0001开始 
cbq-后面的数字要以0002开始递增 
cbq-000x-后面的英文可根据自己需要命名 
网络限速实际是weight的值 
停止cbq的命令为 
cbq stop 
列出目前规则 
cbq list 
查看当前状态 
cbq stats 
更多内容请参考http://puzzle.dl.sourceforge.net/sourceforge/cbqinit/cbq.init-v0.7.3

 tianci3982730 回复于:2004-08-03 10:29:31
cbq的实现原理是通过tc来实现的。所以系统首先装有tc哦
如果不用cbq可以把下面的内容改成适合你的就可
/sbin/tc qdisc del dev eth1 root
/sbin/tc qdisc add dev eth1 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8
/sbin/tc class change dev eth1 root cbq weight 10Mbit allot 1514

/sbin/tc class add dev eth1 parent 1: classid 1:2 cbq bandwidth 100Mbit rate 4Mbit weight 400Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1
000 bounded
/sbin/tc qdisc add dev eth1 parent 1:2 handle 2 tbf rate 4Mbit buffer 10Kb/8 limit 15Kb mtu 1500
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1080 0xffff match ip dst 192.168.2
00.86 classid 1:2
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1081 0xffff match ip dst 192.168.2
00.86 classid 1:2

/sbin/tc class add dev eth1 parent 1: classid 1:3 cbq bandwidth 100Mbit rate 4Mbit weight 40Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 10
00 bounded
/sbin/tc qdisc add dev eth1 parent 1:3 handle 3 tbf rate 4Mbit buffer 10Kb/8 limit 15Kb mtu 1500
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1080 0xffff match ip dst 192.168.1
00.21 classid 1:3
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1081 0xffff match ip dst 192.168.1
00.21 classid 1:3

/sbin/tc class add dev eth1 parent 1: classid 1:4 cbq bandwidth 100Mbit rate 200Kbit weight 20Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt
1000 bounded
/sbin/tc qdisc add dev eth1 parent 1:4 handle 4 tbf rate 200Kbit buffer 10Kb/8 limit 15Kb mtu 1500
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1080 0xffff match ip dst 192.168.1
00.51/32 classid 1:4
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1081 0xffff match ip dst 192.168.1
00.51/32 classid 1:4
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1080 0xffff match ip dst 192.168.1
00.41/32 classid 1:4
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1081 0xffff match ip dst 192.168.1
00.41/32 classid 1:4

/sbin/tc class add dev eth1 parent 1: classid 1:10 cbq bandwidth 100Mbit rate 800Kbit weight 80Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt
 1000 bounded
/sbin/tc qdisc add dev eth1 parent 1:10 handle 10 tbf rate 800Kbit buffer 10Kb/8 limit 15Kb mtu 1500
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1081 0xffff match ip dst 192.168.1
00.0/24 classid 1:10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/24 match ip sport 1080 0xffff match ip dst 192.168.1
00.0/24 classid 1:10
tc教程可参考http://www.ms555.cn/linux/sysadmin/39.html
不过个人觉得对于新手来说还是 cbq来的快

 seacaptain 回复于:2004-08-03 10:33:40
实验一下。支持

 tianci3982730 回复于:2004-08-03 10:41:51
如果没做NAT上传的做法跟下传的方法是一致的
好像要使用iptable才能应用限制带宽的(我也不是太肯定)
对于限制带宽的第一个地址如:xxx.xxx.xxx.1好像有问题,要避开限制第一个地址
如做了NAT上传带宽的限制在iptable的策略中要加
iptables -t mangle -A PREROUTING -s YOUR_INTERNAL_IP -j MARK --set-mark DECIMAL_NUMBER 
无非是将你要限制的东西给标出来,再在你对应的cbq-xxx.xxx中 MARK=DECIMAL_NUMBER 这个数字可以很大的。 
限制下传的: 
DEVICE=eth0,10Mbit,1Mbit 
RATE=240Kbit 
WEIGHT=24Kbit 
PRIO=5 
RULE=172.16.0.100 
限制上传的: 
DEVICE=eth1,10Mbit,1Mbit 
RATE=64Kbit 
WEIGHT=8Kbit 
PRIO=5 
MARK=2

 jingtuling 回复于:2004-08-03 17:24:22
我也同样的给你顶一下吧。让更多的人学习与了解。

 llzqq 回复于:2004-08-03 17:39:52
限速的稳定性如何?

 tianci3982730 回复于:2004-08-04 08:50:52
一直在用,觉得非常稳定

 platinum 回复于:2004-08-04 09:24:09
tc的缺点就是太复杂了!讲的详细的资料也不多……

 tianci3982730 回复于:2004-08-04 10:43:46
tc是很复杂。不详细也是真的。不过觉得只有几处好象不必去深研究。
觉得tc 还是要比cbq.init好用对于高手而言哦
tc的配置更加灵活

 wind521 回复于:2004-08-04 11:23:05
这样的东东我记得还有几个,主要是基于TC来实现的

如果想搞个明白的话,就多研究一下TC

 eagerlinuxer 回复于:2004-08-04 14:17:43
问一下,如果要定义的规则的端口是一段端口如5000-6000,这个规则怎么定义?

 tianci3982730 回复于:2004-08-04 16:01:36
的确很难哦。查了下英文文档,没有这方面的说明
看来只能自己写个脚本了
不知道还有什么方法

 jgkc 回复于:2004-08-04 16:37:08
cbq的的实现是最复杂,最烦琐,当然也是最难理解的,但不能说作者不称职,这是各方面原因造成的,
咱们这些小人物在这儿还没有资格评论,呵呵

所以我现在就不用cbq了,用htb来实现,非常简单,完全能代替cbq.

还有,如果你有多个网卡,要考虑统一流量整型的话,建议用imq设备来实现

非常棒
我现在就是这么做的

 tianci3982730 回复于:2004-08-04 17:09:10
楼上真是有见地哦
不过我目前的网络是直接用tc实现的
写这片文章的目的也只是想给新手介绍下cbq

 jgkc 回复于:2004-08-04 17:22:42
都是tc实现的啊, 只是用的队列不同而已,
目的就只有一个-流量控制

 leehugh007 回复于:2004-10-19 01:43:37
請教學長:

關於CBQ的部份看起似乎無法突破多張網路介面卡的限制. 
即是說假設混頻成功.即併線成功.有三張以上的網路介面卡的話 

即無法達成成功把下面C class 的ip 限制在一個點上. 

即假設你有三張網路卡.一張對內.兩張對外. 
對內部份成功鎖住下載沒問題.不管妳有幾張卡.(這點是我比較搞不懂的地方.為何上傳不能一樣如此做) 

即必須在兩張網卡都設定妳限制的頻寛.但這樣即失去混頻的義意. 

在這裡有一個想法不知有沒有大大能夠提供不足之處. 

假設下載是eth0, 上傳是eth1,eth2 
原則上不管上傳下載是不是都得透過eth0之後再透過nat轉到eth1,eth2上面 

那我能不能在eth1,eth2各設個母規則.即parent class 
讓eth0去遵照eth1,eth2, 的規定來. 

但目前來看在宣告部份都有特別指定裝置部份. 
不知道有沒有辦法突破此一限制.

己找出為何下載部份不管如何設不管幾張網卡都可控制頻寬. 
因為CBQ的規則裡.192.168.X.0/24 是由eth0 來配送ip的 

所以不管妳有幾張網卡.nat底下的用戶都是依據eth0的母規則來走的 
但上傳部份卻不能如此做. 

不知學長能不能指教指教

 wingger 回复于:2005-03-12 14:11:50
[quote:586dd40529="eagerlinuxer"]问一下,如果要定义的规则的端口是一段端口如5000-6000,这个规则怎么定义?[/quote:586dd40529]

用iptables的mark

 守夜人 回复于:2005-03-12 15:24:15
但TC有个非常大的问题,那就是只能针对单IP限速,对整段限速不行(就是整个网段所有IP使用同样带宽策略如每IP分100K/ser)

 leehugh007 回复于:2005-03-13 13:58:55
[quote:2cb82f1374="守夜人"]但TC有个非常大的问题,那就是只能针对单IP限速,对整段限速不行(就是整个网段所有IP使用同样带宽策略如每IP分100K/ser)[/quote:2cb82f1374]

那不知学长知道有何伫列能够实现上面学长所讲的方式

原文转自:http://www.ltesting.net