Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Main interface name
- :global MainIf ether2
- #Failover interface name
- :global RsrvIf ether1
- #Minimall RTT for ping
- :local MinRtt "00:00:00.200"
- #Minimal ping cout for routeros 7 - 3
- :local PingCount 3
- #Ping targets
- :local PingTargets {1.1.1.1; 8.8.4.4; 9.9.9.9; 77.88.8.8}
- :global ClientName "Example LLC";
- :global MainEmail [email protected]
- :global MainCN 12345
- :global ReservEmail [email protected]
- :global ReservCN 12345
- :local host
- :local MainIfInetOk false
- :local RsrvIfInetOk false
- :local MainPings 0
- :local RsrvPings 0
- :local MainPingRtt 0
- :local RsrvPingRtt 0
- :local MainPingRtt 0
- :local MainPingRttSumm 0
- :local RsrvPingRtt 0
- :local RsrvPingRttSumm 0
- :local MainPingCont 0
- :local RsrvPingCont 0
- :local MainPingProblemNum 0
- :local RsrvPingProblemNum 0
- foreach host in=$PingTargets do={
- :local res [/ping $host count=$PingCount interface=$MainIf]
- :set MainPings ($MainPings + $res)
- #:put $MainPings
- :local MainPingRttTest [/ping $host count=$PingCount interface=$MainIf as-value]
- :foreach try in=$MainPingRttTest do={:set MainPingRtt ($MainPingRtt + ($try->"time"))}
- :set MainPingRtt ($MainPingRtt / [:len $MainPingRttTest])
- :if (($MainPingRtt < $MinRtt)) do={:set $MainPingRtt 1} else={:set MainPingRtt 0}
- #:put $MainPingRtt
- :set $MainPingRttSumm ($MainPingRttSumm + $MainPingRtt)
- :set $MainPingRtt 0
- :set $MainPingCont ($MainPingCont + 1)
- :local res [/ping $host count=$PingCount interface=$RsrvIf]
- :set RsrvPings ($RsrvPings + $res)
- #:put $RsrvPings
- :local RsrvPingRttTest [/ping $host count=$PingCount interface=$RsrvIf as-value]
- :foreach try in=$RsrvPingRttTest do={:set RsrvPingRtt ($RsrvPingRtt + ($try->"time"))}
- :set RsrvPingRtt ($RsrvPingRtt / [:len $RsrvPingRttTest])
- :if (($RsrvPingRtt < $MinRtt)) do={:set $RsrvPingRtt 1} else={:set $RsrvPingRtt 0}
- #:put $RsrvPingRtt
- :set $RsrvPingRttSumm ($RsrvPingRttSumm + $RsrvPingRtt)
- :set $RsrvPingRtt 0
- :set $RsrvPingCont ($RsrvPingCont + 1)
- }
- #:put ($MainPings + $MainPingRttSumm)
- #:put $MainPingCont
- #:put $PingCount
- #:put $MainPingRttSumm
- :set $MainPingProblemNum (($MainPingCont * $PingCount + $MainPingCont))
- #:put $MainPingProblemNum
- :set MainIfInetOk (($MainPings + $MainPingRttSumm) >= ($MainPingProblemNum - $MainPingCont))
- #:put ($RsrvPings + $RsrvPingRttSumm)
- :set $RsrvPingProblemNum (($RsrvPingCont * $PingCount + $RsrvPingCont))
- #:put $RsrvPingProblemNum
- :set RsrvIfInetOk (($RsrvPings + $RsrvPingRttSumm) >= ($RsrvPingProblemNum - $RsrvPingCont))
- :put "MainIfInetOk=$MainIfInetOk"
- :put "RsrvIfInetOk=$RsrvIfInetOk"
- if (!$MainIfInetOk) do={
- /log error "Main gateway down"
- }
- if (!$RsrvIfInetOk) do={
- /log error "Reserve gateway error"
- }
- :local MainGWDistance [/ip route get [find comment="MainGW"] distance]
- :local RsrvGWDistance [/ip route get [find comment="RsrvGW"] distance]
- :put "MainGWDistance=$MainGWDistance"
- :put "RsrvGWDistance=$RsrvGWDistance"
- if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={
- /ip route set [find comment="MainGW"] distance=1
- /ip route set [find comment="RsrvGW"] distance=2
- # Clear VoIP connections
- /ip firewall connection remove [ find dst-address ~ ".*:5060" ]
- /ip firewall connection remove [ find src-address ~ ".*:5060" ]
- /log info "switched to main internet connection"
- }
- if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={
- /ip route set [find comment="MainGW"] distance=2
- /ip route set [find comment="RsrvGW"] distance=1
- # Clear VoIP connections
- /ip firewall connection remove [ find dst-address ~ ".*:5060" ]
- /ip firewall connection remove [ find src-address ~ ".*:5060" ]
- /log info "switched to reserve internet connection"
- /tool e-mail send from="[email protected]" [email protected] server=mail.example.ru port=587 [email protected] password=PassWord123 tls=starttls body="$ClientName on reserve ISP" subject="$ClientName MainGW Down ReservGW OK"
- #/tool e-mail send from="[email protected]" to=$MainEmail server=mail.example.ru port=587 [email protected] password=PassWord123 tls=starttls body="We're have problem with internet connection. Contract number $MainCN. Best regards $ClientName." subject="$ClientName $MainCN problem with internet connection."
- }
Advertisement
Add Comment
Please, Sign In to add comment