Chinaunix首页 | 论坛 | 博客
  • 博客访问: 253639
  • 博文数量: 72
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 541
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-13 09:42
文章分类
文章存档

2015年(2)

2012年(1)

2011年(1)

2010年(3)

2009年(65)

我的朋友

分类: 网络与安全

2009-03-21 14:37:07

阅读基础:
仔细翻看linux流量控制 htb和u32分类器部分
完全明白ip数据流向和带宽。
能看明白限制下载的同理写上传很容易。
#!/bin/sh
tc qdisc del dev eth2 root 2>/dev/null                        (清空tc规则,eth2为内网NIC)
tc qdisc add dev eth2 root handle 10: htb default 2254    (定义一个根,默认匹配2254"通道")
tc class add dev eth2 parent 10: classid 10:1 htb rate 12500kbps ceil 12500kbps  (定义一个类10:1隶属于根,速度写死,100M)
i=1                          (定义一个计数器,初始化为1)
while [ $i -le 256 ]     (当i小于256:一个c类子网)
do
j=0                          (定义一个变量j,每次循环把i的值+100付给他)
j=`expr $i + 100`     
echo "$j"                  (用作标记排错,看有没有“撞车”的) 下面以第一个循环为例,代进变量值去。
tc class add dev eth2 parent 10:1 classid $j htb rate 125kbps ceil 125kbps prio 1      (定义一个类10:101。101是j变量,每次递增1,隶属于根,速度写死,1M)

echo "pfifo"  (用作标记排错,看有没有“撞车”的)
tc filter add dev eth2 parent 10: protocol ip prio 1 u32 match ip dst 10.0.0.$i/32 classid 10:$j  (定义源地址如果是$i。$i这时等于1,也就是源地址是10.0.0.1/32,并且协议是ip,划归给类10:$j $j=101 也就是classid 10:101)
echo "match"
i=`expr $i + 1` (i加一,下次循环等于2)
done       (返回去跑循环)

就是不用打mangle!!比起iptables mangle节约了80%的开支。如果有4个c,那么可以跑4个脚本,完成1220个client的限速。
作用于网桥或者纯路由不起nat的话可以在外网口也跑这么个脚本,
tc filter add dev eth2 parent 10: protocol ip prio 1 u32 match ip dst 10.0.0.$i/32 classid 10:$j   这句把dst 改成src 用以完成上传流量的限制。

一句话概括:有几个源ip就有几个classid,每个class限速xx兆,用u32能根据ip地址分类来实现把 src地址的数据流匹配到已限速的class里。
完成限速的效果。让1k client单ip限速成为轻松的事情。
阅读(1248) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~