打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于CBQ的流量控制
基于CBQ的流量控制

参考了cu的很多文档,沿着前辈的脚印,整理了一篇自己的配置记录。在实际使用过程中效果良好,局域网规模不是很大40多台机器。 
内网:eth0 
外网:eth2 
NAT共享上网 

CBQ是通过硬件的闲置时间来计算队列,硬件不同,效果也不同,对于比较大的网络使用HTB比较好。以下限制上传和下载的方法可以写成脚本,通过mrtg发现流量的异常情况,然后通过ntop查处是谁在干坏事,最后用写好的tc脚本限制他的流量,避免影响其他人的网络使用。 

其基本使用步骤为:  
1) 针对网络物理设备(如以太网卡eth0)绑定一个CBQ队列 
2) 在该队列上建立分类 
3) 为每一分类建立一个基于路由的过滤器 
4) 最后与过滤器相配合,建立特定的路由表 

[color=red:7ae1fe0779]限制下载[/color:7ae1fe0779] 
#将一个cbq队列绑定到网络物理设备eth0上,其编号为1:0;网络物理设备eth0的实际带宽为10Mbit,包的平均大小为1000字节;包间隔发送单元的大小为8字节,最小传输包大小为64字节。 
/sbin/tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit avpkt 1000 cell 8 mpu 64 

#创建根分类1:1;分配带宽为10Mbit,优先级别为1。该队列的最大可用带宽为10Mbit,实际分配的带宽为10Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为1,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为1Mbit。 
/sbin/tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit maxburst 20 allot 1514 prio 1 avpkt 1000 cell 8 weight 1Mbit 

#创建分类1:2,其父分类为1:1,分配带宽为64Kbit,优先级别为8。该队列的最大可用带宽为10Mbit,实际分配的带宽为64Kbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为8,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Kbit,且不可借用未使用带宽。 
/sbin/tc class add dev eth0 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 64Kbit maxburst 20 allot 1514 prio 8 avpkt 1000 cell 8 weight 100Kbit bounded 

#创建分类1:3,其父分类为1:1,分配带宽为64Kbit,优先级别为9。该队列的最大可用带宽为10Mbit,实际分配的带宽为64Kbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为9,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Kbit,且不可借用未使用带宽。 
/sbin/tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 64Kbit maxburst 20 allot 1514 prio 9 avpkt 1000 cell 8 weight 100Kbit bounded 

#在分类底下,创建队列,使用sfq随即公平队列 
/sbin/tc qdisc add dev eth0 parent 1:2 sfq quantum 1514b perturb 15 
/sbin/tc qdisc add dev eth0 parent 1:3 sfq quantum 1514b perturb 15 

#这句是限制内网从本服务器下载,这里不需要!!只作为参考!! 
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip src 192.111.1.8 flowid 1:2 

#限制各ip地址的下载带宽,使用u32过滤器,对目的地址进行分类,对应已经创建的队列 
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.116 flowid 1:2 
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.66 flowid 1:3 

#需要添加新的被限制ip的下载带宽,需要先要创建新的分类(比如1:4),然后根据新的分类创建新的sfq队列,最后使用u32过滤器对目的地址进行带宽限制。 
需要对几个ip限制下载带宽,就需要创建几个分类、队列、过滤器 

[color=red:7ae1fe0779]限制上传[/color:7ae1fe0779] 
#将一个cbq队列绑定到网络物理设备eth2上,其编号为2:0;网络物理设备eth2的实际带宽为2Mbit,包的平均大小为1000字节;包间隔发送单元的大小为8字节,最小传输包大小为64字节。 
/sbin/tc qdisc add dev eth2 root handle 2: cbq bandwidth 2Mbit avpkt 1000 cell 8 mpu 64 

#创建根分类2:1;分配带宽为2Mbit,优先级别为1。该队列的最大可用带宽为2Mbit,实际分配的带宽为2Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为1,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为200Kbit。 
/sbin/tc class add dev eth2 parent 2:0 classid 2:1 cbq bandwidth 2Mbit rate 2Mbit maxburst 20 allot 1514 prio 1 avpkt 1000 cell 8 weight 200Kbit 

#创建分类2:2,其父分类为2:1,分配带宽为64Kbit,优先级别为8。该队列的最大可用带宽为2Mbit,实际分配的带宽为64Kbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为8,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Kbit,且不可借用未使用带宽。 
/sbin/tc class add dev eth2 parent 2:1 classid 2:2 cbq bandwidth 2Mbit rate 64Kbit maxburst 20 allot 1514 prio 8 avpkt 1000 cell 8 weight 200Kbit bounded 

#在分类底下,创建队列,使用sfq随即公平队列 
/sbin/tc qdisc add dev eth2 parent 2:2 sfq quantum 1514b perturb 15 

#应用路由分类器到cbq队列的根,过滤协议为ip,优先级为100 
/sbin/tc filter add dev eth2 parent 2:0 protocol ip prio 1 handle 2 fw classid 2:2 

#给数据包打标签,可以通过RETURN方法避免遍历所有的规则,加快处理速度 
/sbin/iptables –t mangle –A PREROUTING –i eth0 –s 192.111.1.xxx –j MARK --set-mark 2 
/sbin/iptables –t mangle –A PREROUTING –i eth0 –s 192.111.1.xxx –j RETURN 

#nat(参考) 
/sbin/iptables -t nat -A POSTROUTING -s 192.111.1.0/24 -o eth2 -j SNAT --to 外网IP 

#需要添加新的被限制ip的上传带宽,需要先要创建新的分类(比如2:3),然后根据新的分类创建新的sfq队列,最后使用路由过滤器,过滤协议为ip,给原地址是需要限制的ip地址来的数据包打标记。 
需要对几个ip限制下载带宽,就需要创建几个分类、队列、路由过滤器、iptable的mangle表的PREROUTING链 

另外还有其他的过滤器比如: 
tc filter add dev eth0 parent 1:0 protocol ip prio 100 route to 2 flowid 1:2 
ip route add 192.111.1.24 dev eth0 via 192.111.1.4 realm 2 

[color=red:7ae1fe0779]维护[/color:7ae1fe0779] 
主要包括对队列、分类、过滤器和路由的增添、修改和删除。  
增添动作一般依照"队列->分类->过滤器->路由"的顺序进行;修改动作则没有什么要求;删除则依照"路由->过滤器->分类->队列"的顺序进行。 
#简单显示指定设备的队列状况 
/sbin/tc qdisc ls dev eth0 

#详细显示指定设备的队列状况 
/sbin/tc –s qdisc ls dev eth0 

#简单显示指定设备的分类状况 
/sbin/tc class ls dev eth0 

#详细显示指定设备的分类状况 
/sbin/tc –s class ls dev eth0 

#显示过滤器的状况 
/sbin/tc –s filter ls dev eth0 

#队列的维护  
一般对于一台流量控制器来说,出厂时针对每个以太网卡均已配置好一个队列了,通常情况下对队列无需进行增添、修改和删除动作了。 

#分类的维护  
增添  
增添动作通过tc class add命令实现。 
修改  
修改动作通过tc class change命令实现,如下所示: 
/sbin/tc class change dev eth0 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 64Kbit maxburst 20 allot 1514 prio 8 avpkt 1000 cell 8 weight 100Kbit bounded 
对于bounded命令应慎用,一旦添加后就进行修改,只可通过删除后再添加来实现。 

#过滤器的维护 
增添 
增添动作通过tc filter add命令实现。 
修改 
修改动作通过tc filter change命令实现,如下所示: 
/sbin/tc filter change dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.116 flowid 1:2 
删除 
删除动作通过tc filter del命令实现,如下所示: 
/sbin/tc filter del dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.116 flowid 1:2
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux的流量控制器(Traffic Control)
Linux 高级流控
一个用tc iptables实现的下载和上传带宽限制的脚本
linux流量控制HOW-TO(非常完整清楚)
Linux 的带宽管理系统
Linux TC (traffic control)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服