找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 17880|回复: 39

[限速] PPPOE全自动智能限速脚本

[复制链接]
发表于 2007-12-18 12:27:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
#首先建一个脚本A,然后放到计划里执行。内容如下
######################################################################
:local RxCurPacket 0
:local RxCurAddress 0
:local RxCurUser 0
:local RxCurRate 0
:local TxCurRate 0
:local RxMaxRate 450000
:local TxMaxRate 800000
:local RxCurMax 400
:local RxCurMaxb 200

:foreach i in=[/interface find mtu=1480] do={/interface monitor $i once do={:set RxCurPacket ($received-packets-per-second+$sent-packets-per-second); :set RxCurRate ($received-bits-per-second); :set TxCurRate ($sent-bits-per-second); :set RxCurAddress [/ppp active get $i address]; :set RxCurUser [/ppp active get $i name]};  :if($RxCurMax<$RxCurPacket) do={/ip firewall nat add chain=dstnat src-address=$RxCurAddress action=dst-nat to-addresses=192.168.0.25 to-ports=80 comment=$RxCurUser}; :if($RxCurMaxb<$RxCurPacket) do={/queue simple add name=$RxCurUser target-addresses=$RxCurAddress limit-at=0/0 max-limit=50000/250000 burst-limit=80000/500000 burst-threshold=70000/400000 burst-time=5/10}; :if($RxMaxRate<$RxCurRate) do={/queue simple add name=$RxCurUser target-addresses=$RxCurAddress limit-at=0/0 max-limit=50000/250000 burst-limit=80000/500000 burst-threshold=70000/400000 burst-time=5/10}; :if($TxMaxRate<$TxCurRate) do={/queue simple add name=$RxCurUser target-addresses=$RxCurAddress limit-at=0/0 max-limit=50000/250000 burst-limit=80000/500000 burst-threshold=70000/400000 burst-time=5/10}}

:for aa from 1 to 200 do={/queue simple remove (queue . $aa)}
###########################################################################
#说明:我的环境是光纤50M 用户在200,所以分给每个人的速度还是比较大的。mtu=1480根据自己ros /interface 显示的值修改
首先对超过规定的速度和包量的用户进行限速,:set RxCurPacket ($received-packets-per-second+$sent-packets-per-second)就是定义变量RxCurPacket为上行和下行包量之和。RxCurMax 400 中的400为自己定义的包量数,可以根据自己的需要更改。
:if($RxCurMax<$RxCurPacket)就是说当当前某用户的包量超过限制值时,执行do={/ip firewall nat add chain=dstnat src-address=$RxCurAddress action=dst-nat to-addresses=192.168.0.25 to-ports=80 comment=$RxCurUser},这里是给超很多包的用户的打开网页时的警告。主页服务器可以自己架一个IIS来做。主页内容可以自己定义,比如我的“
尊敬的用户:
您好!

由于你的流量过大,影响了别人的正常应用,系统将自动对你的连接封闭。

请关闭下载软件等,再尝试新开网页。避免再次被系统拦截。

谢谢合作! ”
RxCurMaxb 200就是正常的限制包量值,我算了下,一般速度在150多K的时候,总包量差不多就到200了,这个时候就应该限制。:set RxCurRate ($received-bits-per-second)定义从用户看是上传的变量。:set TxCurRate ($sent-bits-per-second)从用户看是下栽的变量定义:local RxMaxRate 450000 就是当上传大于450K就限速:local TxMaxRate 800000 就是下载大于800K就限制速,这里速度和真实的速度换算要除8哦。:set RxCurAddress [/ppp active get $i address] 就是定义获取用户的地址 :set RxCurUser [/ppp active get $i name]定义获取用户名。/queue simple add name=$RxCurUser target-addresses=$RxCurAddress limit-at=0/0 max-limit=50000/250000 burst-limit=80000/500000 burst-threshold=70000/400000 burst-time=5/10 这里是定义最大速度 爆发速度,爆发时间等,根据自己的需要修改。:for aa from 1 to 200 do={/queue simple remove (queue . $aa)}是防止获取错误而添加默认名的全局限速队列。

[ 本帖最后由 ghostyxt 于 2007-12-18 16:51 编辑 ]
routeros
 楼主| 发表于 2007-12-18 12:37:14 | 显示全部楼层
#然后建一个脚本B,为用户给限制以后,速度下来了解除限制,
:local RxCurPacket 0
:local RxCurAddress 0
:local RxCurUser 0
:local RxCurMin 80

:foreach i in=[/interface find mtu=1480] do={/interface monitor $i once do={:set RxCurPacket ($received-packets-per-second+$sent-packets-per-second); :set RxCurAddress [/ppp active get $i address]; :set RxCurUser [/ppp active get $i name]}; :if($RxCurMin>$RxCurPacket) do={/queue simple remove [find name=$RxCurUser]; /ip firewall nat remove [find comment=$RxCurUser]}}


说明和上面的差不多,这里说下作用,:if($RxCurMin>$RxCurPacket) do={/queue simple remove [find name=$RxCurUser]; /ip firewall nat remove [find comment=$RxCurUser]}就是当总包量小于80个的时候,删除用户的限制速度和网页警告,这样用户就不再限速度,然后如果速度又超过了A脚本里的速度值话,又会自动限速了。这样循环反复。
定义计划时间的时候限制脚本如果要实时检查的话,时间可以设3-5秒。解除脚本的时间要比限制脚本的长30秒以上,样子才效果明显。不过比较占内存哦。呵呵
routeros
回复

使用道具 举报

发表于 2007-12-18 12:50:34 | 显示全部楼层
很好很强大
routeros
回复

使用道具 举报

发表于 2007-12-18 14:05:10 | 显示全部楼层
好东东!
routeros
回复

使用道具 举报

发表于 2007-12-18 14:34:37 | 显示全部楼层
太强大了。
routeros
回复

使用道具 举报

发表于 2007-12-18 14:50:42 | 显示全部楼层
光纤50m,随便限一下速就是了,太复杂了小心累死ros
routeros
回复

使用道具 举报

发表于 2007-12-18 15:27:04 | 显示全部楼层
超强的脚本...没人后爽下看看.
routeros
回复

使用道具 举报

发表于 2007-12-18 22:53:45 | 显示全部楼层
这脚本太NB了,看的眼晕

LZ应该说说,
如果用在其他环境,需要改哪些部分啊
routeros
回复

使用道具 举报

发表于 2007-12-19 00:32:36 | 显示全部楼层
超强的脚本...
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-19 22:28:32 | 显示全部楼层
试过的说下效果
routeros
回复

使用道具 举报

发表于 2007-12-19 23:09:32 | 显示全部楼层
写的用意比较好。能解决一些带宽问题。确实上面有人说了。太多规则pppoe-client的限速度。确实cpu的开支大了点。脚本还是很实用。
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-20 15:43:10 | 显示全部楼层
效果

[ 本帖最后由 ghostyxt 于 2007-12-21 10:51 编辑 ]
1.jpg
2.jpg
3.jpg
1.jpg
2.jpg

不限制时流量是非常大的

不限制时流量是非常大的
routeros
回复

使用道具 举报

发表于 2008-1-2 16:14:00 | 显示全部楼层
谢谢楼主分享!
routeros
回复

使用道具 举报

发表于 2008-1-3 02:34:25 | 显示全部楼层
为够NB的脚本顶!!!
routeros
回复

使用道具 举报

发表于 2008-1-15 09:19:37 | 显示全部楼层
测试了一晚上都没有成功,不知道那里错了!就是限不住
routeros
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-20 02:08 , Processed in 0.121576 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

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