htqt 发表于 2009-8-1 05:38:52

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

本帖最后由 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 addhost=221.0.0.0 timeout=1s interval=5s since=jul/31/2009 21:22:27 status=up   up-script=:if (!="") do={/system   scheduler enable vrrp-mu}   down-script=:if (!="") 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 ((!="")&&([//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 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 ((!="")&&(!=""))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 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运行的脚本

47771885 发表于 2009-8-1 10:51:31

{:3_59:}

lovellh 发表于 2009-8-1 12:08:38

:victory:

ksw520 发表于 2009-8-1 13:16:47

本帖最后由 ksw520 于 2009-8-1 13:19 编辑

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

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

htqt 发表于 2009-8-1 15:54:14

噢,谢谢楼上,忘记发system scheduler print detail 部分了。

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

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

htqt 发表于 2009-8-1 15:59:57

本帖最后由 htqt 于 2009-8-1 16:03 编辑

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

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

WGHBOY 发表于 2009-8-1 20:48:31

adsl下的netwatch意义不大
页: [1]
查看完整版本: 发一个带冗余判断的LAN+ADSL断线自动切换脚本