Mikrotik Scripting: Evitare cadute Asterisk causate da Failover

Ciao Ragazzi,

oggi vi mostro alcuni trucchi di scripting Mikrotik!

Supponiamo di avere 2 Connessioni internet (es. due gestori diversi per avere banda ridondata) e un dispositivo Mikrotik che gestisce il failover, ossia quando cade la primaria effettua in automatico lo switch sulla secondaria.

Fino a qua non ci sono problemi. Cosa succede se abbiamo un centralino VoIP con Asterisk.

Se cade la connessione primaria e switchamo sulla secondaria, si verifica il problema che le connessioni voip rimangono appese sulla primaria e quindi il problema persiste perchè non funziona la parte telefonica anche se la connessione c’è.

Come risolvere questo problema?

Andiamo a programmare!!

Per prima cosa vi spiego l’idea alla base dello script.

Periodicamente effettuiamo un check ping su due indirizzi ip (ovviamente su due reti geografiche diverse). Se il ping è ok non succede niente, il sistema continua a funzionare.

Quando entrambi i ping falliscono, vuol dire che abbiamo perso la connessione primaria (es. Adsl down, problemi in centrale e robe simili): questo fa da trigger al nostro script!

Il primo script, che chiameremo “Check Script”, disabilità l’interfaccia primaria (quella down per capirci) e ci manda una mail indicando il problema e su quale apparato è avvenuto.

Dopo 3 secondi riavvia il router.

Al riavvio entra in funzione il secondo script, che chiameremo “Restart Script”, che dopo 10 sec (il tempo necessario a far ripartire totalmente il device) controlla se l’interfaccia primaria è ritornata funzionante (es. se uno riavvia il router per qualunque motivo non è che deve ogni volta disabilitare/abilitare le interfacce di rete!)

Se è disabilitata e non è ritornata su, allora le viene assegnata priorità/distanza 3 (quindi l’interfaccia secondaria diventa la Master) e la riabilita per provare a vedere se è ritornata attiva.

Se i ping sono apposto cambia la distanza a 1 e torna tutto come prima, se i ping falliscono allora la connessione rimane up sulla interfaccia secondaria.

Sotto questo scenario le chiamate voip, tranne per il breve momento necessario al riavvio della Mikrotik, continueranno a funzionare!

Ecco i due script:

CHECK SCRIPT

:global strDate [/system clock get date]
:global strTime [/system clock get time]
:global strSystemName [/system identity get name]
 
 
:if ([/ping 10.104.7.187 interface=pppoe-out1 count=5] = 0 && [/ping 8.8.4.4 interface=pppoe-out1 count=5] = 0 && [/ip route get [find comment="Primary"] disabled]=false) do={
    :log info "Disabling Primary";
    /ip route set [find comment="Primary"] disabled=yes
    /tool e-mail send from="yyyyy@gmail.com" to="xxxx@gmail.com" subject="Route Failover - $strDate $strTime - $strSystemName" body="Failover to Telecom occurred at $strDate $strTime on $strSystemName"
    :delay 3
    /system reboot
 
} else= {
    :log info "No Failover Necessary";
}

 

RESTART SCRIPT

:delay 10;
:if ([/ip route get [find comment="Primary"] disabled]=true) do={
    /interface ethernet set numbers=4 disabled=no
   
     /ip route set [find comment="Primary"] disabled=no
     /ip route set [find comment="Primary"] distance=3
    :delay 10
    :if ([/ping 10.104.7.187 routing-table=Primary count=5] > 0 && [/ping 8.8.4.4 routing-table=Primary count=5] > 0) do={
 
       /ip route set [find comment="Primary"] distance=1
       /system reboot
    }
     else= {
       
        /ip route set [find comment="Primary"] distance=3
 
    }
} else= {
    :log info "No Failover Necessary";
}

Enjoy!

About Paolo Daniele

Inserisci un commento

Il tuo indirizzo email non sarà pubblicato. Required fields are marked *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>