找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 873|回复: 6

[Router OS] RouterOS-QOS脚本(定时批量限速脚本分享)

[复制链接]
发表于 2024-8-5 15:54 | 显示全部楼层 |阅读模式
本帖最后由 version666 于 2024-8-5 15:52 编辑

=================================================================================
注:如果大家图片参数看不清楚,可以关注我的公众号进行查看,如果有遇到其他Routeros/Openwrt的技术问题,本人可有偿解决问题!
=================================================================================
Routeros/Openwrt技术交流群:414678725
==============================================================================
公众号二维码:


==============================================================================

==============================================================================

  • RouterOS 中一个脚本配置构成由控制命令和表达式(ICE - internal console expression 内部控制台表达式)。
  • RouterOS 操作命令,例如:/ip firewall filter add chain=forward protocol=gre action=drop 这个是描述在防火墙中过滤gre协议的操作,即通过“/”来达到命令执行的目的。在脚本ICE表达式前缀需要用 “ : ”并能在任何目录路径下操作。
  • 一个事件(event)用来触发脚本执行,在 RouterOS 下包括:System Scheduler, Traffic Monitoring Tool,Netwatch Tool 。
  • 功能包需求: system

  • 操作路径: /system script




脚本编写需要进入 script 目录下,在 script 菜单中我们可以定义多条脚本规则,写完脚本后点击Apply保存,然后通过Run Script 命令运行当前写的脚本,在 Run Count 中会纪录脚本运行的总次数:




  1. :for e from 1 to 254 do={   /queue simple add target=("192.168.88." . $e) max-limit=5000000/5000000    }
复制代码
  • 栗子1:写for循环,先定义一个变量e,从1到254,运行254次后跳出for循环,循环的任务是IP:192.168.88.1-254的IP上下行限速为5M,上面数值单位是bit。



  1. :for x from 1 to 254 do={   /queue simple add target=("172.20.3." . $x) max-limit=30000000/8000000  packet-marks=QOS-D,QOS-U   }
复制代码
  • 栗子2:写for循环,先定义一个变量x,从1到254,运行254次后跳出for循环,循环的任务是IP:172.20.3.1-254的IP上行限速为30M下行为8M,匹配到的线路标记包为QOS-D,QOS-U。




注:运行脚本后会针对匹配到专线专包进行限速,不会影响其他线路数据包的传输,一般在特殊环境线路分流时常用此种方法进行限速,下图运行脚本后可以看到是针对专包进行限速。



下图中的配置就是针对专线专包进行QOS限速,In.internet与Out.internet分别选择你要限速的接口即可,需要在标记器中建立两条标记,分别对应上行和下行。



prerouting对应In.internet,postrouting对应Out.internet,然后分别对此进行包标记,标记名称自己随意,建议简洁明了,一目了然,不要用特殊字符,防止转译时出现问题。


当然此种方法还是不够智能化,毕竟还要人为手动点击运行脚本,实在是比较呆,下面给大家传授一种自动化QOS,用下面代码或者图形化页面操作都一样。

  1. /system scheduler add interval=24h name="QOS_10M" start-time=9:00:00 on-event=start_QOS10
复制代码


进入脚本菜单,或者命令行直接用代码也是一样的,新建脚本命令,脚本名称要与上面计划任务中调用的名称要一致

  1. /system script  add name="start_QOS10" source={:for x from 1 to 254 do={   /queue simple add target=("172.20.3." . $x) max-limit=10000000/10000000  packet-marks=QOS-D,QOS-U   } }
  2. #进入脚本菜单,添加名称为start_QOS10,代码解释参考前面的,不多废话。
复制代码


等待设定的时间点到达,QOS限速脚本会自动执行,效果如下图所示,很方便。


当然,除此之外,还可以根据时间段进行限速,限速之前,需要先清除之前的限速命令,防止多条队列重合,当然也可以写个判断语句进行自动化处理。

  1. /queue simple remove [find type=queue9527 ]
  2. #进入queue菜单,找到类型为queue类型,找到后删除类型为queue(简单队列)9527条,根据自己的实际情况写数字
复制代码

首先添加两个计划任务,分别设定时间段,以24h为一个循环每天定时执行时间段限速脚本,图形化配置如图,命令行代码我已经写好。


  1. /system scheduler add interval=24h name="QOS_10M" start-time=9:00:00 on-event=start_QOS10
  2. 早上9点执行start_QOS10这个脚本,上下行10M,周期为24h,计划任务名字可随意,脚本名称必须要一致!
  3. /system scheduler add interval=24h name="QOS_20M" start-time=18:00:00 on-event=start_QOS20
  4. 下午6点执行start_QOS20这个脚本,上下行限速20M,周期为24h,计划任务名字可随意,脚本名称必须要一致!
复制代码

再添加两个限速脚本,分别为上下行10M与20M,每天循环执行限速脚本,图形化配置如图,命令行代码我已经写好,可直接复制使用。



  1. :if ([/queue simple remove [find type=queue9527 ]]<0)  do={ :for x from 1 to 254 do={   /queue simple add target=("172.20.3." . $x) max-limit=10000000/10000000  packet-marks=QOS-D,QOS-U   } }
  2. #if条件语句. 如果一个逻辑判断为真,这时执行do分程序块中的命令,否则选择 else 分程序块中的执行,此处直接用if和do就完全够用了,除非有特殊情况;此处我写的代码逻辑很简单,首先进入queue菜单,找到类型为queue的所有简单队列,然后删除类型为queue(简单队列)9527条,删除后总数肯定小于0,然后代码会执行do分程序中的程序;分程序中只需要重新执行一次脚本就可以了。
复制代码

最终实践效果达到预期的目标,打完收工,看不清楚图片的,可以关注我的微信公众号,定期分享Routeros和Openwrt、Python的硬核技术!




本帖子中包含更多资源

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

×
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2024-8-7 00:39 | 显示全部楼层
看上去有点复杂,这种限速效果对比PCQ或者CAKE QOS 怎么样!~
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-7 15:08 | 显示全部楼层
sspg33 发表于 2024-8-7 00:39
看上去有点复杂,这种限速效果对比PCQ或者CAKE QOS 怎么样!~

会更加灵活和方便,越用越灵活!也可以自定义自己喜欢的队列调度算法。

点评

可以远程帮我设置下吗。我用你这脚本怎么不生效  详情 回复 发表于 2024-8-9 00:41
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-8-9 00:41 | 显示全部楼层
version666 发表于 2024-8-7 15:08
会更加灵活和方便,越用越灵活!也可以自定义自己喜欢的队列调度算法。
...

可以远程帮我设置下吗。我用你这脚本怎么不生效
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-9 09:14 | 显示全部楼层
sspg33 发表于 2024-8-9 00:41
可以远程帮我设置下吗。我用你这脚本怎么不生效

可以,加群或者微信公众号联系我
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2024-8-9 23:22 | 显示全部楼层
为啥要限速呀
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-10 09:58 | 显示全部楼层
linuxunion 发表于 2024-8-9 23:22
为啥要限速呀

通过队列限制流量,提高多人情况下的网络质量
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

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

GMT+8, 2024-9-23 11:24

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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