找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5727|回复: 10

[脚本] 发个根据流量判断断线并切换的脚本,虽然麻烦但实用

[复制链接]
发表于 2007-1-19 11:43:29 | 显示全部楼层 |阅读模式

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

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

×
因为个人认为netwatch并不是太适用,而且对于外线是某些数据公司提供的时候,仅netwatch判断
网关是无法判断出是否断线的,因为还有可能就是数据公司的出口问题造成断网的,所以写了这个脚本,
有点麻烦,但还实用。总体思路是当外线流量降低到某值时,开启检测功能ping网关以及指定网站(我这里用的是163的),判断
断线后自动切换。不足之处望多多指点。

      1.首先建立traffic monitor监视网卡流量
      添加一条名称:WangTong,接口选外线为网通的网卡,流量指定为1000000,接收数据,低于,触发事件
代码为:
#标记,不用多说
:log info "【----WT below 1Mbps----】"
#取得检测计划任务运行状态
:local CheckSch [/system scheduler get [/system scheduler find name=CheckWTstatus] disabled]
#如果已运行则空,否则开启该检测计划任务
:if ($CheckSch) do={/system scheduler set [/system scheduler find name=CheckWTstatus]
disabled=no
#计划任务运行次数
:global CheckTimeWT 0
#ping次数
:global PingCount 3
#该线路的首选网站IP
:global WebWT 202.108.9.32
#另一条线路的首选网站IP(我这里设的是一样的)
:global WebDX 202.108.9.32
#该网通网关
:global GatewayWT ***.***.***.***
#另一条线路电信网关
:global GatewayDX ###.###.###.###}

      2.添加计划任务,名字为:CheckWTstatus ,interval 为30秒,触发事件代码为:
#判断本计划任务是否已经运行10次,超过则停止本计划
:if ($CheckTimeWT>10) do ={/system scheduler set [/system scheduler find name=CheckWTstatus]
disabled=yes}
#返回ping网站的成功次数
:local ResultWeb [/ping $WebWT count=$PingCount]
#返回ping网关的成功次数
:local ResultGateway [/ping $GatewayWT count=$PingCount]
:set CheckTimeWT ($CheckTimeWT + 1)
#如果本线路已经判断为down则空,否则继续
:if ($WTstatus!=down) do={
:if (($ResultWeb=0 && $ResultGateway=0) || ($ResultWeb=0 && $ResultGateway>1)) do ={
:global WTstatus down
#切换网关
/ip route set [/ip route find comment=tel] gateway=$GatewayDX
/ip route set [/ip route find comment=cnc] gateway=$GatewayDX
:log info "【----GatewayWT Down,GatewayDX Running----】"
#增加指定路由
/ip route add dst-address=($WebWT . "/32") gateway=$GatewayWT scope=255 target-scope=10
comment="TempWT" disabled=no
#增加检测本线路恢复的计划任务
/system scheduler add name=CheckWTup interval=10 on-event=CheckWTup
}}

    3.添加脚本CheckWTup,代码为:
#返回ping网站的成功次数
:local ResultWeb [/ping $WebWT count=$PingCount]
#返回ping网关的成功次数
:local ResultGateway [/ping $GatewayWT count=$PingCount]
#如果都通表明线路恢复
:if ($ResultWeb>1 && $ResultGateway>1) do ={
:set WTstatus up
#还原网关
/ip route set [/ip route find comment=cnc] gateway=$GatewayWT
#删除执行路由
/ip route remove [/ip route find comment=TempWT]
:log info "【----GatewayWT Up,GatewayWT Running----】"
#删除本计划任务
/system scheduler remove [/system scheduler find name=CheckWTup]
}


以上是判断该线路是否断线并自动切换网关 ,网络恢复后还原网关,如果判断另外一条线路操作一样,只是稍加修改即可。

[ 本帖最后由 yenan111 于 2007-1-19 11:45 编辑 ]
routeros
发表于 2007-1-19 12:30:02 | 显示全部楼层
routeros
回复

使用道具 举报

发表于 2007-1-19 12:56:11 | 显示全部楼层
routeros
回复

使用道具 举报

发表于 2007-1-19 15:21:14 | 显示全部楼层
楼猪, pf pf,这么长的脚本你是怎么调试出来的,真是生猛
routeros
回复

使用道具 举报

发表于 2007-1-19 18:45:15 | 显示全部楼层
根据流量判断也不是最好的办法。
1、网络流量不是固定的,有突发的、连续的。所取的流量只是瞬时流量
2、因为我们用的是NAT共享上网,一旦建立连接,如果那条线的流量大了,也不可能再重新走流量小的那条线,否则会无法正常通讯而断线。
routeros
回复

使用道具 举报

 楼主| 发表于 2007-1-19 20:31:35 | 显示全部楼层
原帖由 younger 于 2007-1-19 18:45 发表
根据流量判断也不是最好的办法。
1、网络流量不是固定的,有突发的、连续的。所取的流量只是瞬时流量
2、因为我们用的是NAT共享上网,一旦建立连接,如果那条线的流量大了,也不可能再重新走流量小的那条线, ...


traffic monitor的监控是触发式的,设置值后流量只有在该值上下波动时才会连续触发traffic monitor的event,网络流量当然不是固定的,但断网的过程肯定是流量急剧下降,当下降到某一阀值立即启动计划任务判断当前网络是否通畅,如果掉线则进行切换,完全可以有备无患,
再说这里没有切换流量大小的意图,又不是根据负载来平衡的没有楼上说的那种问题,那条线流量满满的我才高兴了,表明没有问题啊
routeros
回复

使用道具 举报

发表于 2007-1-21 22:33:20 | 显示全部楼层
:local ResultGateway [/ping 自己的网关 count=3]
:if ($ResultWeb>1) do ={
:log info "【----GatewayWT Up,GatewayWT Running----】"
}
怎么在log里看我到"【----GatewayWT Up,GatewayWT Running----】"呀
网关是通的
routeros
回复

使用道具 举报

 楼主| 发表于 2007-1-21 23:30:06 | 显示全部楼层
:if ($ResultWeb>1) do ={}就表明网关是通的,$resoult的值为ping通的次数
routeros
回复

使用道具 举报

发表于 2007-1-21 23:30:18 | 显示全部楼层
够长的,服了
routeros
回复

使用道具 举报

发表于 2007-1-22 11:24:40 | 显示全部楼层
参考参考!!!!!!!!!!!!!
routeros
回复

使用道具 举报

发表于 2007-1-22 21:34:38 | 显示全部楼层
:local ResultGateway [/ping 自己的网关 count=3]
:if ($ResultWeb>1) do ={
:log info "【----GatewayWT Up,GatewayWT Running----】"
}
怎么在log里看我 不 到"【----GatewayWT Up,GatewayWT Running----】"呀
网关是通的
routeros
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-5 22:50 , Processed in 0.056008 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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