LinuxSir.cn,穿越时空的Linuxsir!

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

新手报道,发个“智能QOS”脚本

[复制链接]
发表于 2010-1-12 13:21:33 | 显示全部楼层 |阅读模式
怎么这么小怎么发啊????
 楼主| 发表于 2010-1-12 13:37:02 | 显示全部楼层
最近迷上iptables了,进而迷上linux了,找到党的根据地啦。

所谓“智能QOS”是依据当前内网主机数的动态变化指定不同的QOS流量控制策略。不需要设置过多参数即可实现网络流量控制。
这是我研究iptables和TC一个月整搞出的一个山寨版智能QOS,可用于linux做路由器或嵌入。

使用前需要确保一些iptables模块如BCOUNT,ipt_length.o等在你的linux路由器上已经装载。

规则如下:
1.依据路由器ARP表的地址数判断当前在线主机数。
2.在线1PC,不限速;PC增加时,动态分配最小保证速率,单IP最大下载速率为总下载速率60%,但实际下载速率可能会超过这个值,因为还有来自小包和http下载的速。
3.对小包和网页浏览做了优先,利用iptables的BCOUNT模块区分网页浏览和http下载。
4.单IP连接数限制,默认每个内网IP地址TCP限制60,UDP限制80。为了防止连接数占满后无法打开网页等情况,对
53,80等常见端口作了例外。(可自己添加一些常见游戏端口,这样可以一边下载一边玩游戏)
5.对在线主机数动态判定加入反震荡措施(主机数变化只有1个时候不改策略,但1PC→2PC和2PC→1PC例外)

用法:分两部分,第一个较长的脚本设置为防火墙脚本(或开机脚本,只需要开机后执行一次),另一个脚本设置为定期执行脚本(使用crond就可以)
参数修改:
1.export NET=192.168.1.0/24\n   #内网IP网段
export UIP="192.168.1."\n         #内网IP前缀
export IPS=2\n                           #开始IP地址为192.168.1.2
export IPE=8\n                            #结束IP地址为192.168.1.8
2.ADSL用户:如果你申请带宽是2M,那么N=2(脚本默认),如果是4M,把第2行
N=2\n改为N=4\n就OK了。
3.小区宽带或其他情况:修改UPN参数,脚本默认是40,如果你小区宽带上传100KB/S,那么把第3行
UPN=40\n改为UPN=100\n。
4.其它一些参数:
export UPLOADC=8kbps\n   #单机最大上传速率(不包括小包和http上传)
export DOWNN=$((N*90))\n       #带宽总下行数值(无单位),也可以用数字指定,如500KB/S可修改为DOWNN=500\n
export NTCP=60\n           #单机tcp连接数限制为60
export NUDP=80\n            #单机UDP连接数限制为80
export UNLIMITPORT_UDP=53,4000:8000\n               #udp的53,4000---4010端口不受连接数限制(对DNS服务和QQ开绿灯)
export UNLIMITPORT_TCP=20:23,25,53,80,110,443\n   #tcp的20----23,25,53,80,110,443端口不受连接数限制(另可自己添加网游端口)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2010-1-13 10:03:11 | 显示全部楼层
我手头就有个刷DD WRT的linksys路由器,现在6台电脑大家共享4M上网。
一般情况下在大家上网频繁的晚间使用它的layer 7 filter关闭电驴和BT下载,效果还可以。
DD WRT自带的QoS有些性能问题,一开就路由器基本不能正常工作了。所以QoS还是得用tc[htb]+iptables自己写。

工作日  19:00~23:59  //layer 7 filter完全No P2P
周末   10:00~23:59  //layer 7 filter完全No P2P
其余时间使用tc做Qos:优先游戏,然后上网,最后是下载。

最近有室友都在家里,把layer 7的限制范围加大了,这样完全禁止的方式不是很灵活,所以还是得好好研究tc。

以前想借鉴的tc脚本。
http://www.dd-wrt.com/phpBB2/vie ... der=asc&start=0
看了你的脚本,你还加上的单ip连接数限制,挺好。

现在我再稍微处理下。
1.准备好dd wrt使用Linux samba,这样就可以调用linux上的脚本。
2.准备好iptables和tc脚本,让dd wrt在上网时调用。
3.测试下效果。

我们能进一步交流下么?
回复 支持 反对

使用道具 举报

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

本版积分规则

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