|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
因为个人认为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 编辑 ] |
|