LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 10836|回复: 12

疯狂电驴——linux下电驴上载带宽限制之探讨

[复制链接]
发表于 2003-4-7 10:55:55 | 显示全部楼层 |阅读模式
电驴实在是个好东西,为什么我就不用说了吧。linux下面的电驴更是个好东西,因为她把我从vmware的魔爪里面解救出来了。linux版没有win版那么好用直接吧bot什么的嵌在里面但是就下载来说已经很不错了饿。




但是电驴也有些不劲人译的地方。比如它限制下载带宽不能高于上载的4倍。这个就让我的DSL很痛苦了。当我把上载设置到15的时候,连接就基本瘫痪了。为了不叫室友和我拼命,我只能把它设置在5以内,就是说我最多也就20的下载速度。这个要是去下载一个ASIAN什么什么的DVD岂不要等到我老死。

上载和下载的带宽是在我们机器上面的客户端限制的。就是说如果我将客户端的下载和上载速度放开,然后在linux里面限制上载速度,我就可以打破这个速度限制。

在研究了两篇非常优秀的文档,iptables tutorial 1.1.6 和 linux advanced routing & traffic control,之后写了下面这段代码。其主要目的就是把指向4662端口的流量过滤到一个我自定义的类里面。而在这个类上面家一个流量控制。对于我这样的dsl连接,就是纯粹的要限制流量的目的来说使用tbf是一个很好的选择;如果是ftp或者是大型的数据服务器又不愿意让一个连接把所有的带宽都占用就使用sqf的队列规则。在没有限制的时候,不符喝滤镜规则的数据包会被穿到1:1,1:2,1:3三个pfifo_fast类。当然也可以自己去定义对这些数据的处理。


  1. NETIF=ppp0
  2. # outgoing net interface
  3. tc qdisc add dev $NETIF root handle 1: htb default 10
  4. tc class add dev $NETIF parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
  5. tc class add dev $NETIF parent 1:1 classid 1:10 htb \
  6.     rate 8kbps ceil 8kbps prio 1

  7. tc filter add dev $NETIF protocol ip parent 1:0 prio 1 u32 \
  8.    match ip dport 4662 0xffff flowid 1:10

  9. tc qdisc add dev $NETIF parent 1:10 handle 100: tbf rate \
  10.    32kbit latency 150ms burst 1600
复制代码


不幸的是,使用后发现效果不是很理想。上载速度又明显的变化,但是没有被很好的限制。看来电驴上面大家使用的端口不都是4662。本着宁可错杀1万,不能防走一个的方针。我准备把我觉得不用的端口都封掉。这个时候,只使用tc就显得力不从心。需要配合iptables来完成这个功能。具体实现就是用iptables将指向你看着不顺眼的端口的数据全打上标签。tc根据这些标签过滤。

最后完成的代码是这个样子。可以用edonkey stop 或者edonkey start 来控制开启或者关闭流量控制。具体的端口选择上面我没有细选,又兴趣可以把10000:11000这样的ftp passive端口也让过去。我是无所谓了。


  1. #! /bin/sh
  2. # by doooom from [url]www.linuxsir.cn[/url]
  3. source /etc/sysconfig/rc
  4. source $rc_functions

  5. UPBW=10kbps
  6. EDUPBW=4kbps
  7. CEILBW=17kbps
  8. # UPBW is the real upload bandwidth of the connection
  9. # EDUPBW is the bandwidth assigned to edonky upload
  10. # CEILBW is the maxium upload burst traffic

  11. NETIF=ppp0
  12. # outgoing net interface

  13. case "$1" in
  14.         start)
  15.     echo "Turning on the Edonkey traffic control..."
  16.    
  17.     tc qdisc add dev $NETIF root handle 1: htb default 11
  18.     tc class add dev $NETIF parent 1: classid 1:1 htb \
  19.         rate $CEILBW ceil $CEILBW
  20.     tc class add dev $NETIF parent 1:1 classid 1:10 htb \
  21.         rate $EDUPBW ceil $UPBW prio 1

  22.     tc filter add dev $NETIF protocol ip parent 1:0 prio 2 \
  23.         handle 1 fw flowid 1:10

  24.     tc qdisc add dev $NETIF parent 1:10 handle 100: tbf rate \
  25.        $EDUPBW latency 120ms burst 1600

  26.     iptables -t mangle -A OUTPUT -p tcp --dport 4000:65535  \
  27.         -j MARK --set-mark 1
  28.    
  29.     evaluate_retval
  30.     ;;
  31.         
  32.     stop)
  33.                 echo "Turning off edonkey traffic control..."
  34.                 tc qdisc del dev ppp0 root handle 1: htb default 11
  35.         iptables --flush -t mangle
  36.                 evaluate_retval
  37.                 ;;

  38.         restart)
  39.                 $0 stop
  40.                 sleep 15
  41.                 $0 start
  42.                 ;;

  43.         *)
  44.                 echo "Usage: $0 {start|stop|restart}"
  45.                 exit 1
  46.                 ;;
  47. esac

  48. # End


复制代码

在端口上面可以再细一写比如限制的范围扩展到100:65535,然后从中间去掉那些又用的端口。

工欲善其实必先利其器。找一个实时的流量显示非常有用。推荐一个教wmnet的wmaker dock application.
哦没有说最后的效果怎么样,使用这个脚本,我把上行控制在5,下载速度就随意了。
发表于 2003-4-7 16:33:33 | 显示全部楼层
好帖子....

总算理解了一些结构了...被结构搞晕了...

实时监控流量...不需要x环境的工具是...


http://ethstatus.calle69.net/graphic/index.html


超爽哦...服务器必备利器...
发表于 2003-4-7 20:39:03 | 显示全部楼层
呵呵,老兄辛苦了!
发表于 2003-4-7 21:57:25 | 显示全部楼层
电炉是什么????
发表于 2003-4-7 21:58:32 | 显示全部楼层
eDonkey2000
发表于 2003-4-7 22:01:22 | 显示全部楼层
下载东西的工具???是不是点对点那些啊 ~?~?
发表于 2003-4-7 22:07:47 | 显示全部楼层
正是P2P
发表于 2003-4-7 22:09:22 | 显示全部楼层
实在是大作……不佩服doooom兄不行!!!
 楼主| 发表于 2003-4-7 23:28:23 | 显示全部楼层
最初由 iamok@ccf 发布
好帖子....

总算理解了一些结构了...被结构搞晕了...

实时监控流量...不需要x环境的工具是...


http://ethstatus.calle69.net/graphic/index.html


超爽哦...服务器必备利器...


这个软件是好东西。我在文本下面一直用ifstat,看的莫名其妙。
发表于 2003-4-8 11:06:07 | 显示全部楼层
为何他上面说的话我听不懂呢~????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表