发一个带冗余判断的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运行的脚本 {:3_59:} :victory: 本帖最后由 ksw520 于 2009-8-1 13:19 编辑
楼主很用心.但不细心....不得不提醒下楼主.你认为你这个 5次累加 有用? 和未累加运行有区别?
难道 是想一断 一通 来回折腾5次才切换?
netwatch 只会在每次状态切换的时候运行脚本.down 状态下,不会每interval 时间运行一次..up状态同理. 噢,谢谢楼上,忘记发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 16:03 编辑
回楼上,因为我的网络质量不好,经常有掉包,引起netwatch误动作
我又检查下,发帖不知道为什么少了点脚本,补充好了,
不好意思哈 adsl下的netwatch意义不大
页:
[1]