hb2k 发表于 2007-7-20 20:45:16

[原创]:每ip限速,就是这么简单!测试一下。

阅读基础:
仔细翻看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限速成为轻松的事情。

[ 本帖最后由 hb2k 于 2007-7-26 15:12 编辑 ]

hb2k 发表于 2007-7-20 20:49:47

linux版块应多一些自己解决问题的实例脚本

而不是像ros板块那样以应用为主,多做注释,避免阅读者“乱猜”!
欢迎各位朋友指正,渴望有消耗资源更低的方法。

[ 本帖最后由 hb2k 于 2007-7-20 20:55 编辑 ]

a99456820 发表于 2007-7-24 13:11:56

DreamCat 发表于 2007-7-25 07:30:14

hb2k兄~~~
mangle的用途~~~

你做的只是单独的限速,使用mangle却不仅仅是如你所做的简单限速。

还有就是 U32 分类器至今我也没细研究(HTB自己翻译过几篇文章,理解、使用的还可以)。。。:L不知道你的脚本中在哪儿使用了U32分类器

--------------------------------------------------------------------------
回a99456820:
如果你在CL中不使用自带的限速设置的话,可以用HB2K的脚本。

a99456820 发表于 2007-7-25 11:55:02

hantu 发表于 2007-7-25 19:49:37

感谢楼主不再收金币即能让我们看到这样的贴子!

希望更多的朋友能发布一些有用的资料,通过交流能学习更深的东西.

我也感谢帮助我的一些网友,他们为我提供了我自己破解许久都得不出来的密码,现在我已经能自己编译飞鱼星3200,而且移植4500(实际上是模拟)的工作也正在进行中.

hb2k 发表于 2007-7-26 15:19:36

呵呵

nat只能iptables打mangle,

路由转发和桥接限制下载速率的思路是"dst to privateIP"去往内网私有地址的分别打到class里。作用在“内网”网卡。

同理,外网网卡"src from privateIP" 从内网私有地址的分别打到class里,作用在“外网”网卡。

迎合linux流量控制里的:无法做到控制别人给你的,但是可以控制从“界面”出去的。

mangle当然可以用,但iptables在1000多条规则后ifconfig 后 overrun会很多error的(性能下降厉害,处理不过来。)

外网一旦起了nat就是所有out的srcIP 都被伪装成合法ip,没有你的私有ip了,所以不会被命中,并分配到每个class里。

用处还是比较大的,接在pix之类的nat/pat设备前能做到单ip限速(上下行),成本比较低的。

对于iptables mangle限速,google上和cu上有大把的雷同文章。不用mangle进行classid分类从而节约系统资源是写这些的主要目的。

还有tos 作用同样的相当大,用它来区分网络流量应该可行的。

[ 本帖最后由 hb2k 于 2007-7-26 15:33 编辑 ]

hb2k 发表于 2007-8-7 14:49:30

衍生的一个问题。升级内核后tc无法使用。

确认内核里关于qos的选项已经全部选中了,可tc qdisc之后一片报错。
到http://developer.osdl.org/dev/iproute2/download/
下载对应你内核版本的iproute2.tzr.gz,
cd /linux-2.6.20.14
cp iproute2.tar.gz
tar zxvf iproute2.tar.gz
make
make install
即可。

dgclan 发表于 2007-9-15 13:21:38

楼主老大 我是新手 没看明白 能否
介绍下WEB界面下

单IP怎么限速啊
页: [1]
查看完整版本: [原创]:每ip限速,就是这么简单!测试一下。