Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-------------------------------------------------------------------------------
- # MikroTik RouterOS WAN Failover
- #-------------------------------------------------------------------------------
- #-------------------------------------------------------------------------------
- # Settings
- #-------------------------------------------------------------------------------
- :local PRIMARYROUTELABEL "PRIMARY_ROUTE";
- :local BACKUPROUTELABEL "BACKUP_ROUTE";
- # Hosts to ping via primary route (Yandex.DNS)
- :local PRIMARYHOSTS {77.88.8.8; 77.88.8.7};
- # Hosts to ping via backup route (Yandex.DNS)
- :local BACKUPHOSTS {77.88.8.1; 77.88.8.3};
- :local PINGCOUNT 3;
- :local PINGTRESHOLD 70;
- #-------------------------------------------------------------------------------
- # Check primary route
- #-------------------------------------------------------------------------------
- :local primaryOk false;
- :local primarySuccessPingCount 0;
- :foreach host in=$PRIMARYHOSTS do={
- :local n [/ping $host count=$PINGCOUNT];
- :set primarySuccessPingCount ($primarySuccessPingCount + $n);
- }
- :set primaryOk (($primarySuccessPingCount * 100) >= ([:len $PRIMARYHOSTS] * $PINGCOUNT * $PINGTRESHOLD));
- :if (!$primaryOk) do={
- :log error "Primary internet connection down"
- };
- #-------------------------------------------------------------------------------
- # Check backup route
- #-------------------------------------------------------------------------------
- :local backupOk false;
- :local backupSuccessPingCount 0;
- :foreach host in=$BACKUPHOSTS do={
- :local n [/ping $host count=$PINGCOUNT];
- :set backupSuccessPingCount ($backupSuccessPingCount + $n);
- };
- :set backupOk (($backupSuccessPingCount * 100) >= ([:len $BACKUPHOSTS] * $PINGCOUNT * $PINGTRESHOLD));
- :if (!$backupOk) do={
- :log error "Backup internet connection down"
- };
- #-------------------------------------------------------------------------------
- # Failover
- #-------------------------------------------------------------------------------
- :local primaryDistance [/ip route get [find comment=$PRIMARYROUTELABEL] distance];
- :local backupDistance [/ip route get [find comment=$BACKUPROUTELABEL] distance];
- :if ($primaryOk && ($primaryDistance >= $backupDistance)) do={
- # Switch to primary route
- /ip route set [find comment=$PRIMARYROUTELABEL] distance=1
- /ip route set [find comment=$BACKUPROUTELABEL] distance=2
- /log warning "Switched to primary internet connection"
- # Remove all connections
- /ip firewall connection tracking set enabled=no
- :delay 5s
- /ip firewall connection tracking set enabled=yes
- };
- :if (!$primaryOk && $backupOk && ($primaryDistance <= $backupDistance)) do={
- # Switch to backup route
- /ip route set [find comment=$PRIMARYROUTELABEL] distance=2
- /ip route set [find comment=$BACKUPROUTELABEL] distance=1
- /log error "Switched to backup internet connection"
- # Remove all connections
- /ip firewall connection tracking set enabled=no
- :delay 5s
- /ip firewall connection tracking set enabled=yes
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement