找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 28063|回复: 60

wifidog 加 TC限速有没有人对此有兴趣的一起完善(目前基本功能可用,包括上行限速)

[复制链接]
发表于 2012-11-20 21:33 | 显示全部楼层 |阅读模式
本帖最后由 shigeng 于 2013-10-28 23:15 编辑

wifidog用了好多天了,TC限速因为使用网络的人少一直没启用,今天上网人多,也有在看电影的,我电脑明显受影响,启用TC之后效果不错,看电影的继续看电影,我浏览网页基本不受影响。但是限速脚本功能有些不完善,只限制了下载速度,因为路由其上启用了nat,限制上传的时候会跟使wifidog失效。我对此研究的也还不是很熟,最近也懒得去看,如果有人有兴趣完善次脚本的话,我把它贴上来大家一起研究研究,让他功能尽量全一些通用一些。我现在的脚本是所有IP同样限速,也没有给不同的数据不同的优先级。

**************
在安装wifidog的openwrt上可用的代码在8楼,上下行都可限速。

另外可能会遇到的问题就是,当pppoe重连之后上行限速可能会失效的问题,
  1. #!/bin/sh

  2. tc-qos.sh restart
复制代码
解决方法是在/etc/ppp/ip-up.d/下建立一个脚本,内容如下:



就这两行,功能是拨号重连之后重启限速脚本,tc-qos.sh是限速脚本的文件名。
ip-up.d目录下的文件会在拨号连接之后自动执行。另外所有自己建的脚本文件都要给其赋予可执行属性,例如

chmod 755 restart_tc.sh

---------------------
再补充一个问题,用HTB分类限速虽然很不错,很灵活,但是当限制速度和网速差别比较大的时候会出现严重的丢包情况,当突发速率设置小的时候甚至单线程下载时因为丢包实际速度远小于设置速度,甚至会出现网页里边图片很长时间无法显示全之类的情况,因为htb不能实际不能限速(就目前的了解,只是把超出的数据包丢掉),这时候可以在htb的叶子类上设置tbf队列,超过设置速度的时候对数据包做延迟处理,当继续超出缓存限制的时候才做丢弃处理,这时候网络状况就会改变很多。

目前我的限速脚本体验比较良好,局域网下载跟外网下载分类限速。功能也还是基本功能,自认为比较完善之后公布完整代码。
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2012-11-21 18:37 | 显示全部楼层
本帖最后由 shigeng 于 2012-11-21 18:40 编辑

似乎没人对此有兴趣啊,我说说我遇到的限制上传的问题在那,以帮助有类似需求遇到同样问题的人定位问题,少走弯路。

   tc class add dev $out_dev parent 1:1   classid 1:5$i htb rate $single_up ceil $max_up prio 1
#    tc filter add dev $out_dev parent 1:  protocol ip prio 100 handle 5$i fw classid 1:5$i
   
    tc class add dev $in_dev parent 1:1 classid 1:5$i htb rate $single_down ceil $max_down prio 1
    tc filter add dev $in_dev parent 1: protocol ip prio 100  u32 match ip dst $INET$i/32 classid 1:5$i

#    iptables -t mangle -A PREROUTING -s $INET$i -j MARK --set-mark 5$i
注释掉的两行是与上传有关并会引起冲突的,第二行采用基于防火墙的过滤,需要第五行的语句来给他做标记(u32过滤器无效,网上说是因为启用nat之后源IP已经被替换,因此才用基于防火墙的过滤,基于防火墙的过滤需要用iptables来做标记),一旦用iptables做标记之后wifidog就会出问题,表现为通过验证之后上网时还是会再次跳转到登录验证页面(我的验证服务器是自己建的,在局域网内部,外网用wiwiz也测试过,也有问题,具体症状记不清了。)

要解决次问题我目前的想法是:
一、从iptables上入手,看为什么会冲突。
二、不用iptables,采用u32或其他过滤器,但是怎么匹配,。。。我还不知道,目前能正常使用,事情也多,身累心也累,懒得去搞了。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2013-1-29 11:56 | 显示全部楼层
楼主你好,能否告诉我下使用tc限速需要安装哪些脚本?现在我还属于小白参考了很多帖子关于限速但是没说明要安装的脚本只说了tc+iptable。没具体说要安装哪些模块我很郁闷
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2013-3-26 19:53 | 显示全部楼层
qq743204199 发表于 2013-1-29 11:56
楼主你好,能否告诉我下使用tc限速需要安装哪些脚本?现在我还属于小白参考了很多帖子关于限速但是没说明要 ...

你的问题应该已经解决了吧,在我的脚本里边用到了下边这几个模块:
insmod sch_htb
insmod cls_fw
insmod cls_u32
insmod sch_sfq

看名称和脚本里边的命令就可以猜到他是干什么的。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2013-3-26 22:40 | 显示全部楼层
呃,现在的固件大多不注重tc这一块,iptables模块也不全。所以我自己编译了个tc+iptables的固件。

参照着也写出了个脚本,不过脚本效果实在惨不忍睹,不知道是tc qdisc没搞好,还是标记没做好,截一段出来。

        WANDEV="eth1"
        LANDEV="ifb0"

        tc qdisc add dev $WANDEV root handle 1: htb default 50

        tc qdisc add dev $LANDEV root handle 1: htb default 50
        tc qdisc add dev $WANDEV ingress
        tc filter add dev $WANDEV parent ffff: protocol ip prio 1 u32 match u32 0 0 flowid 1:1 action connmark action mirred egress redirect dev $LANDEV

把wan口的ingress流量重定向到ifb。因为tc是官出不管入。

呃,其实这里上下行流量逻辑好乱,这些资料反正也是没看懂。原版示例中是没管上行的,但是国内ADSL上行带宽太小,不管不行。

然后用这个标记收尾,感觉这里也有问题。

iptables -t mangle -A PREROUTING -i $WANDEV -j MARK --set-mark 5
iptables -t mangle -A POSTROUTING -o br-+ -j MARK --set-mark 5
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2013-3-26 23:06 | 显示全部楼层
本帖最后由 haxc 于 2013-3-26 23:07 编辑
zouwenxin 发表于 2013-3-26 22:40
呃,现在的固件大多不注重tc这一块,iptables模块也不全。所以我自己编译了个tc+iptables的固件。

参照着 ...


一直不懂tc怎么弄限速,我现在用的是emong qos限速,感觉qos还行,一台电脑qq视频,一台下载文件,网络比较正常
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2013-4-1 23:11 | 显示全部楼层
zouwenxin 发表于 2013-3-26 22:40
呃,现在的固件大多不注重tc这一块,iptables模块也不全。所以我自己编译了个tc+iptables的固件。

参照着 ...

跟我基本一样,我主要是发现用iptables给上传数据包打标之后之后我的wifidog工作会不正常,所以没启用上传限制,下载限制的效果非常不错。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2013-5-17 14:54 | 显示全部楼层
本帖最后由 shigeng 于 2013-5-17 17:39 编辑


上传不限速实在是不行,局域网不时内有人开着p2p全速上传,把整个网络都堵住了。仔细研究了一下把上传问题解决了。基于nat的路由会在nat表的POSTROUTING 链上做源地址的替换,理论上只要在源地址被替换之前做标记都可以。但wifidog也会给数据包做标记,所以会冲突,下面的代码在有wifidog的系统上可以正常工作,目前还不支持不同应用的优先级划分。下面是关键代码:
  1. #! /bin/sh

  2. in_dev="br-lan"
  3. out_dev="pppoe-wan"

  4. # 网络带宽
  5. total_up="0.5mbit"
  6. total_down="5.5mbit"

  7. # 单机限速
  8. single_up="0.05mbit"
  9. single_down="0.4mbit"

  10. # 可借用带宽
  11. max_up="0.45mbit"
  12. max_down="2mbit"

  13. INET="192.168.254."

  14. ip_start="100"
  15. ip_end="200"

  16. start(){
  17. insmod sch_htb
  18. insmod cls_fw
  19. insmod cls_u32
  20. # insmod sch_sfq
  21.   tc qdisc del dev $out_dev root 2>/dev/null
  22.   tc qdisc del dev $in_dev root 2>/dev/null

  23.   tc qdisc add dev $out_dev root handle 1: htb  256
  24.   tc qdisc add dev $in_dev root handle 1: htb default 256

  25. # 根分类,分类号1:1
  26.   tc class add dev $out_dev parent 1: classid 1:1 htb rate $total_up ceil $total_up
  27.   tc class add dev $in_dev parent 1: classid 1:1 htb rate $total_down ceil $total_down

  28.   i=$ip_start;
  29.   while [ $i -le $ip_end ]
  30.   do
  31. # out /upload
  32. #  子分类号1:?,父分类为 1:1(类的主号码必须与他们父辈的主号码一致)
  33.     tc class add dev $out_dev parent 1:1   classid 1:$i htb rate $single_up ceil $max_up prio 1
  34.     tc filter add dev $out_dev parent 1:0 protocol ip prio 100   handle 3$i fw flowid 1:$i
  35.     iptables -t mangle -A POSTROUTING -o $out_dev -s $INET$i -j MARK --set-mark 3$i

  36. # www等
  37. #    tc class add dev $out_dev parent 1:$i   classid 1:1$i htb rate $single_up ceil $max_up prio 1

  38. # 给大包做标记
  39. # 上传
  40. #    tc class add dev $out_dev parent 1:$i   classid 1:2$i htb rate $single_up ceil $max_up prio 1
  41. #    tc filter add dev  $out_dev protocol ip parent 1:1 prio 1 handle 4${i} fw flowid 1:2${i}
  42. #    iptables -t mangle -A POSTROUTING -o $out_dev -m length --length 1024:1500 -j MARK --set-mark 4${i}



  43. # in /download
  44.     tc class add dev $in_dev parent 1:1 classid 1:$i htb rate $single_down ceil $max_down prio 1
  45.     tc filter add dev $in_dev parent 1: protocol ip prio 100  u32 match ip dst $INET$i/32 classid 1:$i

  46.     i=`expr $i + 1`
  47.   done
  48. }
  49. stop(){
  50.   i=$ip_start
  51.   echo "(stop...........)"
  52.   ((while [ $i -le $ip_end ]
  53.    do
  54.      iptables -t mangle -D POSTROUTING -o $out_dev -s  ${INET}${i} -j MARK --set-mark 3${i}
  55. #     iptables -t mangle -D POSTROUTING -o $out_dev -m length --length 1024:1500 -j MARK --set-mark 4${i}
  56.      i=`expr $i + 1`
  57.    done) && tc qdisc del dev $out_dev root && tc qdisc del dev $in_dev root && echo "ok.....!" ) || echo "error."

  58.   rmmod sch_htb
  59.   rmmod cls_fw
  60.   rmmod cls_u32
  61. #  rmmod sch_sfq
  62. }
  63. case "${1}" in
  64. start)
  65. (start && echo "Start Traffic Control") || echo "error."
  66. exit 0
  67. ;;
  68. stop)
  69. (stop && echo "Stop Traffic Control") || echo "error."
  70. exit 0
  71. ;;
  72. restart)
  73. stop
  74. start
  75. echo "Restart  Traffic Control"
  76. ;;
  77. status)
  78. status
  79. ;;
  80. esac

复制代码

点评

@qldsrx 你说的没错,虽然在我那段代码里边不会出现那种情况,不过我现在实际用的与这个差别很大了。  详情 回复 发表于 2014-12-16 14:40
你这是碰巧,i等于56时,会有一个classid为1:256,即使匹配不到也可以进入默认的256规则  发表于 2014-11-20 01:17
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2013-5-17 20:18 | 显示全部楼层
老大认证服务器不会弄啊
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2013-5-17 21:40 | 显示全部楼层
laoyangjp 发表于 2013-5-17 20:18
老大认证服务器不会弄啊

官方有开源的代码,你可以参考或者直接用开源代码都行。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2013-5-19 15:04 | 显示全部楼层
shigeng 发表于 2013-5-17 21:40
官方有开源的代码,你可以参考或者直接用开源代码都行。

老大具体点,不入门阿
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2013-5-21 13:23 | 显示全部楼层
laoyangjp 发表于 2013-5-19 15:04
老大具体点,不入门阿

去wifidog官网看看
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2013-10-28 23:16 | 显示全部楼层
最近似乎没人研究限速问题了,大家的路由器都不用限速吗。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-8-14 13:45 | 显示全部楼层
都自己用的话,一般是不会用的,如果不是工作需要,真的懒得去弄

点评

我是跟人合用一条ADSL,然后我这边还会给店里提供无线上网,ADSL下行太紧张,有一个人电脑上开个p2p类的软件其他人基本上打开网页就很费事,严重时打不开,逼得没办法才研究这个。  详情 回复 发表于 2014-9-9 16:25
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-9-9 16:25 | 显示全部楼层
qianguozheng 发表于 2014-8-14 13:45
都自己用的话,一般是不会用的,如果不是工作需要,真的懒得去弄

我是跟人合用一条ADSL,然后我这边还会给店里提供无线上网,ADSL下行太紧张,有一个人电脑上开个p2p类的软件其他人基本上打开网页就很费事,严重时打不开,逼得没办法才研究这个。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-26 15:23

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

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