找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 112876|回复: 809

[精华]别在整QOS了,了解原理自己写无敌QOS脚本教程,亲测可用!

 火... [复制链接]
发表于 2011-12-17 11:25 | 显示全部楼层 |阅读模式
本帖最后由 endsock 于 2011-12-19 11:10 编辑

我使用的是dd wrt v24 mega版本

其实限速,QOS 无非就是使用了linux的2个工具, tc 和 iptables ,不管管理界面做的多么垃圾还是多么强大,都是最终翻译成这2个工具的script去执行,并且无论多么NB的管理界面都有很大的局限性(整半天界面也就是实现了命令行下的几个参数的功能而已),所以无法完全发挥这2个工具的作用. 不要以为TOMATO的QOS就很NB,其实就是对这2个工具做了比较好的封装罢了, 都是linux,用好了,分不出什么高下的. 如果你懂linux shell编程, 并且懂数据挖掘与机器学习的理论 ,你完全可以根据一些算法写出带有人工智能特性的QOS脚本,wayos的QOS其实就是这么实现的而已. (美好的展望一下,不多说了,进入正题)

TC是干什么的呢:
TC就是建立数据通道的, 建立的通道有数据包管理方式, 通道的优先级, 通道的速率(这就是限速)

iptables又是干什么的呢?
是决定哪个ip 或者 mac 或者某个应用, 走哪个通道的.


这就是QOS+限速的原理, 大伙明白了吧?

想深入的朋友请看
iptables权威指南1.1.9   http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html
tc命令的介绍和用法  http://wenku.baidu.com/view/324fc91a964bcf84b9d57b01.html

详细的我就不写了,看上面的好好学习,这里我就贴出来我的学习成果吧,直接可用的限速脚本:
以下说的是单位是kbps, 跟普通迅雷上看到的下载速度的换算关系是 除以8    1600/8 = 200K ,迅雷上看到的就是200KB/s

#现在开始用TC建立数据的上行和下行通道
TCA="tc class add dev br0"
TFA="tc filter add dev br0"
tc qdisc del dev br0 root
tc qdisc add dev br0 root handle 1: htb
tc class add dev br0 parent 1: classid 1:1 htb rate 1600kbit            #这个1600是下行总速度
$TCA parent 1:1 classid 1:10 htb rate 200kbit ceil 400kbit prio 2     #这个是10号通道的下行速度,最小200,最大400,优先级为2
$TCA parent 1:1 classid 1:25 htb rate 1000kbit ceil 1600kbit prio 1   #这是我自己使用的特殊25号通道,下行速度最小1000,最大1600,优先级为1, 呵呵,待遇就是不一样
$TFA parent 1:0 prio 2 protocol ip handle 10 fw flowid 1:10            
$TFA parent 1:0 prio 1 protocol ip handle 25 fw flowid 1:25
tc qdisc add dev br0 ingress
$TFA parent ffff: protocol ip handle 35 fw police rate 800kbit mtu 12k burst 10k drop      #这是我自己使用的35号上行通道,最大速度800
$TFA parent ffff: protocol ip handle 50 fw police rate 80kbit mtu 12k burst 10k drop         #这是给大伙使用的50号上行通道,最大速度80


#好了,现在用iptables来觉得哪些人走哪些通道吧,哈哈,由于dd wrt的iptables不支持ip range,所以只能每个IP写一条语句,否则命令无效

iptables -t mangle -A POSTROUTING -d 192.168.1.22 -j MARK --set-mark 10     #ip为192.168.1.22的走10号通道
iptables -t mangle -A POSTROUTING -d 192.168.1.22 -j RETURN                        #给每条规则加入RETURN,这样效率会更高.
iptables -t mangle -A POSTROUTING -d 192.168.1.23 -j MARK --set-mark 25      #ip为192.168.1.23的走25号特殊通道,23是我的ip,所以特殊点
iptables -t mangle -A POSTROUTING -d 192.168.1.23 -j RETURN                        #给每条规则加入RETURN,这样效率会更高.

iptables -t mangle -A PREROUTING -s 192.168.1.22 -j MARK --set-mark 50         #ip为22的走50号上行通道
iptables -t mangle -A PREROUTING -s 192.168.1.22 -j RETURN                        #给每条规则加入RETURN,这样效率会更高.
iptables -t mangle -A PREROUTING -s 192.168.1.23 -j MARK --set-mark 35        #ip为23的走35号上行通道,我自己的IP.呵呵
iptables -t mangle -A PREROUTING -s 192.168.1.23 -j RETURN                        #给每条规则加入RETURN,这样效率会更高.

#其他的我就不写了,大家自己换IP吧,想让谁走哪个通道,就把IP改了执行,现在发发慈悲,让大家开网页的时候走我使用25和35号通道吧,当然你也可以不发慈悲
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j MARK --set-mark 35    #http的端口号80,所以dport是80,这是发起http请求的时候
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
iptables -t mangle -A POSTROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 25   #http的端口号80,所以sport是80,这是http响应回来的时候
iptables -t mangle -A POSTROUTING -p tcp -m tcp --sport 80 -j RETURN

现在来看看如何限制TCP和UDP的连接数吧,很NB的(不知道标准版本和简化版是否支持,一下语句不保证可用,因个人路由器环境而定):
iptables -I FORWARD -p tcp -m connlimit --connlimit-above 100 -j DROP           #看到了吧,在FORWARD转发链的时候,所有tcp连接大于100 的数据包就丢弃!是针对所有IP的限制
iptables -I FORWARD -p udp -m limit --limit 5/sec -j DROP   #UDP是无法控制连接数的, 只能控制每秒多少个UDP包, 这里设置为每秒5个,5个已经不少了,10个就算很高了,这个是封杀P2P的利器,一般设置为每秒3~5个比较合理.
如何查看命令是否生效呢?:
执行  iptables -L FORWARD 就可以看到如下结果:
DROP       tcp  --  anywhere             anywhere            #conn/32 > 100
DROP       udp  --  anywhere             anywhere            limit: avg 5/sec bu
如果出现了这2个结果,说明限制连接数的语句确实生效了, 如果没有这2个出现,则说明你的dd-wrt不支持connlimit限制连接数模块.

现在我想给自己开个后门,不受连接数的限制该怎么做呢?看下面的:
iptables -I FORWARD -s 192.168.1.23 -j RETURN          #意思是向iptables的FORWARD链的最头插入这个规则,这个规则现在成为第一个规则了,23是我的IP,就是说,只要是我的IP的就不在执行下面的连接数限制的规则语句了,利用了iptables链的执行顺序规则,我的IP被例外了.

告诉大家一个查看所有人的连接数的语句:
sed -n 's%.* src=\(192.168.[0-9.]*\).*%\1%p' /proc/net/ip_conntrack | sort | uniq -c    #执行这个就可以看到所有IP当前所占用的连接数

对于上面的脚本,有一些比较疑惑人的地方,现在来讲讲:
br0 : 这个是一个dd wrt的网桥, 这个网桥桥接了无线和有线的接口, 所以在这上面卡流量,就相当于卡了所有无线和有线的用户.具体信息可以输入ifconfig命令进行查看.
规则链顺序问题 : 在br0上iptables规则链的顺序是比较奇怪的, 正常的顺序 入站的数据包先过 PERROUTING链, 出站数据包先过POSTROUTING链,但是 dd wrt的br0网桥顺序与正常的顺序正好相反!
在ddwrt上入站的数据包被当成出站的,出站的数据包被当成入站的,所以上面的脚本会那么写.

不会不知道在哪里敲命令吧?
登陆ddwrt的web管理界面 ,管理里面, 开启SSH
用SSH CLIENT ,这里下载 : http://www.onlinedown.net/soft/20089.htm
输入路由器IP,用户密码,登陆,开始敲吧.

重要提醒: 大家要用ue这样的编辑器来写脚本,这样的编辑器才支持unix格式,windows下的记事本是不行的,因为这2个系统的换行符不一样,unix/linux下不认

评分

参与人数 3恩山币 +3 收起 理由
0230826 + 1 一看就是觉得高端、大气、上档次!
antium + 1 白富美露出了诧异的眼神:屌丝,你真是太厉害了!
qiqi00612 + 1 泥马,真给力!

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2011-12-17 11:32 | 显示全部楼层
照抄 改ip就能用了是吗
谢谢楼主分享哦
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2011-12-17 11:46 | 显示全部楼层
对,改了就能用
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 12:29 | 显示全部楼层
重要提醒: 大家要用ue这样的编辑器来写脚本,这样的编辑器才支持unix格式,windows下的记事本是不行的,因为这2个系统的换行符不一样,unix/linux下不认
用记事本做完了,转换一下格式就可以的·····
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 12:34 | 显示全部楼层
本帖隐藏的内容需要回复才可以浏览
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 12:39 | 显示全部楼层
看下如何
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 12:42 | 显示全部楼层
看看如何
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 13:05 | 显示全部楼层
谢谢楼主分享哦
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 13:27 | 显示全部楼层
谢谢楼主分享哦
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 13:59 | 显示全部楼层
??????????????
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 13:59 | 显示全部楼层
??????????????
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 14:00 | 显示全部楼层
看看学习~!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 14:03 | 显示全部楼层
?????????????????????????????????????
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 14:10 | 显示全部楼层
坛子里,又来大神了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2011-12-17 14:51 | 显示全部楼层
技术贴一定要看
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 00:27

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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