找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5087|回复: 6

[脚本] 发一个带冗余判断的LAN+ADSL断线自动切换脚本

[复制链接]
发表于 2009-8-1 05:38:52 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 htqt 于 2009-8-1 15:58 编辑

本人的线路为 光纤IP+ ADSL(备用),,近日光纤老是不稳定,用netwatch启动脚本又不准确,研究了个 netwatch 检测多次(10秒一次),每次down 函数mcd 加1,每次UP 函数mcu 加1,累计5次down 才切换的脚本, 如果up先累计够5次,则取消这次切换尝试,待下一此 down 之后再次冗余判断

因为保密,我把netwatch检测用IP改了221.0.0.0,你需要改成适合自己网络的IP,建议改成你的网络tracert出去的第2级或第3级 IP。。另外LAN1是我的固定IP线路,CNC1是ADSL线路,你需要改成你的固定IP线路名称和ADSL线路名称,。。下面的脚本是我用print出来的再改的,我也不精通这个,不一定能直接导进去,可能要自己改下语法
:log info ("mcd=" . $mcd)
     :log info ("mcdp=" . $mcdp)     
log info ("mcu=" . $mcu)
     :log info ("mcup=" . $mcup)
这些语句是测试用的,等切换正常了也可以去掉

ip route add dst-address=221.0.0.0/32 gateway=(这里填lan线路的网关)interface=lan1 gateway-state=reachable scope=255 target-scope=10 首先把 LAN线路检测用的IP 绑定在lan口出

tool netwatch add  host=221.0.0.0 timeout=1s interval=5s since=jul/31/2009 21:22:27 status=up   up-script=:if ([/system scheduler find name=vrrp-mu disabled=yes]!="") do={/system     scheduler enable vrrp-mu}   down-script=:if ([/system scheduler find name=vrrp-md disabled=yes]!="") do={/system     scheduler enable vrrp-md}
这个意思是down的时候运行vrrp-md,up的时候运行vrrp-mu脚本,并且避免运行期间重复激活脚本。


system script add name="vrrp-md" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password  
   source=
     :if (([/interface find name=cnc1 disabled=yes]!="")&&([//tool netwatch find comment=link-swicth status=down]!=""))  do={:global mcd ($mcd+1)     
}else={
     :global mcdp ($mcdp+1)
     }
     
     :if ($mcd>5) do={
     :global mcd 0
     :global mcdp 0
     :log info "vrrp>>>cnc1"
     /interface pppoe-client enable cnc1
     /ip route set [/ip route find dst-address=0.0.0.0/0 interface=lan1]  distance=2
     /system scheduler disable vrrp-md
     :delay 15
     /system script run DDNS
     }
     
     :if ($mcdp>5) do={
     :global mcd 0
     :global mcdp 0
     /system scheduler disable vrrp-md
     }
     :log info ("mcd=" . $mcd)
     :log info ("mcdp=" . $mcdp)            
这个是检测到down运行的脚本


system script add name="vrrp-mu" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password
   source=
     :if (([/interface find name=cnc1 disabled=no]!="")&&([/tool netwatch find comment=link-swicth status=up]!=""))  do={:global mcu ($mcu+1)   
}else={
     :global mcup ($mcup+1)
     }
     
     :if ($mcu>5) do={
     :global mcu 0
     :global mcup 0
     :log info "vrrp>>>lan1"
     /interface pppoe-client disable cnc1
     /ip route set [/ip route find dst-address=0.0.0.0/0 interface=lan1]  distance=1
     /system scheduler disable vrrp-mu
     :delay 15
     /system script run DDNS
     }
     
     :if ($mcup>5) do={
     :global mcu 0
     :global mcup 0
     /system scheduler disable vrrp-mu
     }
     :log info ("mcu=" . $mcu)
     :log info ("mcup=" . $mcup)
这个是检测到up运行的脚本
routeros
发表于 2009-8-1 10:51:31 | 显示全部楼层
routeros
回复

使用道具 举报

发表于 2009-8-1 12:08:38 | 显示全部楼层
routeros
回复

使用道具 举报

发表于 2009-8-1 13:16:47 | 显示全部楼层
本帖最后由 ksw520 于 2009-8-1 13:19 编辑

楼主很用心.但不细心....不得不提醒下楼主.你认为你这个 5次累加 有用? 和未累加运行有区别?
难道 是想  一断 一通 来回折腾5次才切换?

netwatch 只会在每次状态切换的时候运行脚本.down 状态下,不会每  interval 时间运行一次..up状态同理.
routeros
回复

使用道具 举报

 楼主| 发表于 2009-8-1 15:54:14 | 显示全部楼层
噢,谢谢楼上,忘记发system scheduler print detail 部分了。

system scheduler  add name="vrrp-md" on-event=vrrp-md start-date=jan/01/1970 start-time=00:00:00     interval=10s run-count=646

system scheduler add  name="vrrp-mu" on-event=vrrp-mu start-date=jan/01/1970 start-time=00:00:00      interval=10s run-count=642
routeros
回复

使用道具 举报

 楼主| 发表于 2009-8-1 15:59:57 | 显示全部楼层
本帖最后由 htqt 于 2009-8-1 16:03 编辑

回楼上,因为我的网络质量不好,经常有掉包,引起netwatch误动作

我又检查下,发帖不知道为什么少了点脚本,补充好了,
不好意思哈
routeros
回复

使用道具 举报

发表于 2009-8-1 20:48:31 | 显示全部楼层
adsl下的netwatch意义不大
routeros
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 09:57 , Processed in 0.098291 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

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