Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10732053
  • 博文数量: 2905
  • 博客积分: 20098
  • 博客等级: 上将
  • 技术积分: 36298
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-23 05:00
文章存档

2012年(1)

2011年(3)

2009年(2901)

分类: LINUX

2009-03-23 11:37:42

下面一个使用Linux作为中小企业路由器的例子,该网络拥有sales(销售),accounting(财务),executive(行政),IT departments(IT部门)等几个部门,为了便于理解网络,我们已经通过三台交换机将网络分为了三个部分,一个销售和财务部,一个行政部分,一个IT部门,通常情况下,使用可管理的交换机为网络划分三个独立的VLAN。
网络规划情况如下:
路由器通过eth0口接入internet,ip:1.1.1.1,netmask:255.255.255.252,gateway:1.1.12
路由器具有四块快速以太网网卡,除了路由功能外,还运行着apache服务和samba服务在电脑上,因此,它是一个路由器,WEB和文件服务器。
在IT部门,除了IT经理,一个或多个网络管理员,有一个web和mail服务器,web和mail需要静态的公共P地址,并且所有的IT啊门员式都拥有静态公共IP地址,为了考虑未来增加更多的服务器,我们保留了一个64全主机的子网1.1.2.0/26,linux路由器的eth1的IP为1.1.2.1,255.255.255.192 ,web与mail服务器的地址为1.1.2.2,255.255.255.192,网关为1.1.2.1,如果你愿意,我们可以称该网络为DMZ区域。
行政部门电脑包含了公司所有管理人员,他们表示需要最小限制可能的电脑等等,我们为其准备一个32位主机的C类网络1.1.2.64/27 。Linux路由器的eth2的IP为1.1.2.65, 255.255.255.224 ,并为他们静态分配IP地址从1.1.2.66 to 1.1.2.94 ,子网掩码为255.255.255.224 ,网关为1.1.2.65。
销售和财务部有一个较大的网络,公司拥有大量的销售代理,这是网络中最需要注意的部分,因为大多数的IT问题都可能是由销售部引起的,我们将在Linux路由器的eth3上运行DHCP服务我们在eth3上设置私有IP地址为192.168.1.1,通过DHCP服务,私有IP地址为192.168.1.2 to 192.168.1.254,网关为192.168.1.1。
 
假设总电脑宽为6Mbps,销售和财务部1Mbps,行政部门2Mbps,web和mail为1Mbps,
IT部门2Mbps带宽。
CBQ比HTB具有更多的参数,可以进行更多的性能调优,我们会在下面例子中使用参数得到最好的效果。
首先,需要为销售和财务部在eth3上创建CBQ qdisc,创建qdisc后,需要在接口上创建root class。
tc qdisc add dev eth3 root handle 30: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth3 parent 30:0 classid 30:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 10Mbit prio 8 maxburst 20 avpkt 1000
 
现在需要为eth3创建一个1M的子类,并在qdisc上绑定sfq,以及使用tc filter以匹配这些部门的地址。
tc class add dev eth3 parent 30:1 classid 30:100 cbq bandwidth 100Mbit rate 1Mbit allot 1514 weight 128Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth3 parent 30:100 sfq quantum 1514b perturb 15
tc filter add dev eth3 parent 30:0 protocol ip prio 5 u32 match ip dst 192.168.1.0/24 flowid 30:100
 
接下来限制行政部门电脑宽,创建一个2Mbps的类和两个子类,一个为512Kbps,并且不允许借用其它类带宽,另一个为1.5Mbps,并允许最高可达到2Mbps。
首先为eth2网卡创建CBQ qdisc和root class。
tc qdisc add dev eth2 root handle 20: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth2 parent 20:0 classid 20:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 10Mbit prio 8 maxburst 20 avpkt 1000
 
接下来,我们为两个子类创建一个2M的父类。
tc class add dev eth2 parent 20:1 classid 20:10 cbq bandwidth 100Mbit rate 2Mbit allot 1514 weight 256Kbit prio 5 maxburst 20 avpkt 1000 bounded
 
现在在父类20:10上创建一个512Kbps的子类,并且不允许借用带宽,并在qdisc上绑定sfq,使用tc filter匹配所有nfmark 5的数据(在之前的iptables中将所有的p2p的下载流量打上-j MARK --set-mark 5,这样就可实现所有行政部人员在下载时带宽不会超过512Kbps)。
tc class add dev eth2 parent 20:10 classid 20:100 cbq bandwidth 100Mbit rate 512Kbit allot 1514 weight 64Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth2 parent 20:100 sfq quantum 1514b perturb 15
tc filter add dev eth2 parent 20:0 protocol ip prio 5 handle 5 fw flowid 20:100
 
接下来,为行政部门创建另一个1.5Mbps的子类,所有非P2P的流量都将从此类通过。
tc class add dev eth2 parent 20:10 classid 20:200 cbq bandwidth 100Mbit rate 1536Kbit allot 1514 weight 192Kbit prio 5 maxburst 20 avpkt 1000
tc qdisc add dev eth2 parent 20:200 sfq quantum 1514b perturb 15
tc filter add dev eth2 parent 20:0 protocol ip prio 5 u32 match ip dst 1.1.2.64/27 flowid 20:200
 
最后,WEB服务器和IT部门的流量控制配置方法与前面类似。
在eth1上创建qdisc和class。
tc qdisc add dev eth1 root handle 10: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth1 parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 10Mbit prio 8 maxburst 20 avpkt 1000
 
创建1M的子类,绑定sfq,设置匹配IP地址。
tc class add dev eth1 parent 10:1 classid 10:100 cbq bandwidth 100Mbit rate 1Mbit allot 1514 weight 128Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth1 parent 10:100 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 10:0 protocol ip prio 5 u32 match ip dst 1.1.2.2 flowid 10:100
 
创建2M的子类,绑定sfq,设置匹配IP地址。
tc class add dev eth1 parent 10:1 classid 10:200 cbq bandwidth 100Mbit rate 2Mbit allot 1514 weight 256Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth1 parent 10:200 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 10:0 protocol ip prio 5 u32 match ip dst 1.1.2.2 flowid 10:200
 
整个QOS脚本如下:
#!/bin/bash
#delete root qdisc for eth3
tc qdisc del dev eth3 root
#attach root qdisc and create the root class for eth3
tc qdisc add dev eth3 root handle 30: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth3 parent 30:0 classid 30:1 cbq bandwidth 100Mbit rate \
100Mbit allot 1514 weight 10Mbit prio 8 maxburst 20 avpkt 1000

#create the 1Mbps class for sales and accounting
tc class add dev eth3 parent 30:1 classid 30:100 cbq bandwidth 100Mbit rate \
1Mbit allot 1514 weight 128Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth3 parent 30:100 sfq quantum 1514b perturb 15
tc filter add dev eth3 parent 30:0 protocol ip prio 5 u32 match ip dst 192.168.1.0/24 flowid 30:100

#delete root qdisc for eth2
tc qdisc del dev eth2 root
#attach root qdisc and create the root class for eth2
tc qdisc add dev eth2 root handle 20: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth2 parent 20:0 classid 20:1 cbq bandwidth 100Mbit rate \
100Mbit allot 1514 weight 10Mbit prio 8 maxburst 20 avpkt 1000

#create the 2Mbps class for all traffic to executive dep.
tc class add dev eth2 parent 20:1 classid 20:10 cbq bandwidth 100Mbit rate \
2Mbit allot 1514 weight 256Kbit prio 5 maxburst 20 avpkt 1000 bounded

#the bittorrent and dc++ class - 512Kbps
tc class add dev eth2 parent 20:10 classid 20:100 cbq bandwidth 100Mbit rate \
512Kbit allot 1514 weight 64Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth2 parent 20:100 sfq quantum 1514b perturb 15
tc filter add dev eth2 parent 20:0 protocol ip prio 5 handle 5 fw flowid 20:100

#other traffic to executive dep.
tc class add dev eth2 parent 20:10 classid 20:200 cbq bandwidth 100Mbit rate \
1536Kbit allot 1514 weight 192Kbit prio 5 maxburst 20 avpkt 1000
tc qdisc add dev eth2 parent 20:200 sfq quantum 1514b perturb 15
tc filter add dev eth2 parent 20:0 protocol ip prio 5 u32 match ip dst 1.1.2.64/27 flowid 20:200

#delete root qdisc for eth1
tc qdisc del dev eth1 root

#attach root qdisc and create the root class for eth1
tc qdisc add dev eth1 root handle 10: cbq bandwidth 100Mbit avpkt 1000
tc class add dev eth1 parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate \
100Mbit allot 1514 weight 10Mbit prio 8 maxburst 20 avpkt 1000

#create the 1Mbps class for the web and mail server
tc class add dev eth1 parent 10:1 classid 10:100 cbq bandwidth 100Mbit rate \
1Mbit allot 1514 weight 128Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth1 parent 10:100 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 10:0 protocol ip prio 5 u32 match ip dst 1.1.2.2 flowid 10:100

#create the 2Mbps class for the IT dep.
tc class add dev eth1 parent 10:1 classid 10:200 cbq bandwidth 100Mbit rate \
2Mbit allot 1514 weight 256Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth1 parent 10:200 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 10:0 protocol ip prio 5 u32 match ip dst 1.1.2.2 flowid 10:200
 
检验QOS配置:
:~# tc -s class show dev eth1
 
 

阅读(1919) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~