#Main interface name
:global MainIf ether1
#Failover interface name
:global RsrvIf lte1
:local PingCount 1
:local PingTargets {77.88.8.8; 8.8.8.8}
:local host
:local MainIfInetOk false
:local RsrvIfInetOk false
:local MainPings 0
:local RsrvPings 0
foreach host in=$PingTargets do={
:local res [/ping $host count=$PingCount interface=$MainIf]
:set MainPings ($MainPings + $res)
:local res [/ping $host count=$PingCount interface=$RsrvIf]
:set RsrvPings ($RsrvPings + $res)
:delay 1
}
:set MainIfInetOk ($MainPings >= 1)
:set RsrvIfInetOk ($RsrvPings >= 1)
:put "MainIfInetOk=$MainIfInetOk"
:put "RsrvIfInetOk=$RsrvIfInetOk"
:local MainGWDistance [/ip route get [find comment="ISP1"] distance]
:local RsrvGWDistance [/ip route get [find comment="ISP2"] distance]
:put "MainGWDistance=$MainGWDistance"
:put "RsrvGWDistance=$RsrvGWDistance"
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={
/ip route set [find comment="ISP1"] distance=10
/ip route set [find comment="ISP2"] distance=20
:put "switched to MAIN internet connection"
/log info "switched to MAIN internet connection"
/ip firewall connection remove [find]
}
if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={
/ip route set [find comment="ISP1"] distance=20
/ip route set [find comment="ISP2"] distance=10
:put "switched to RESERVE internet connection"
/log info "switched to RESERVE internet connection"
/ip firewall connection remove [find]
}