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!