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="[email protected]" to="[email protected]" 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!
Ciao Ho letto ora questo interessante articolo complimenti, ti scrivo perchè ho una necessità simile ma diversa.
mi occupo di segnali video, ricevo delle contribuzioni in sdp/rtp/srt che processo e inoltro, molti di queste contribuzioni o meglio quasi tutte inviano un backup su una seconda rete e ovviamente ip diverso (pubblico) e utilizzando per ogni servizio una determinata porta che provvedo ad assegnare ad ognuno dei servizi,
che internamente sono nattati.
Ti volevo chiedere se esiste la possibilità attraverso script o programmazione di microtik di uno scambio automatico main / backup non di tutta la rete ma del singolo servizio o porta. per essere più chiaro
ETH01 IP “A” in su porta 30001 main e uguale ETH02 IP “B” stessa porta backup, al mancare della presenza del flusso sul main il sistema cambi sul backup esclusivamente il flusso sulla porta mancante.
Credo sia complesso, ma magari lo hai già realizzato..
grazie per l’attenzione
Roberto
Ciao,
no mi spiace non mi è mai capitato. Quello che ti posso dire è che comunque per via del buffering c’è un delay di almeno 5 sec a meno che, come dicevi tu, non si usa una via di backup dove lo stream viene mandato su entrambe, ma difficilmente riesci a far girare solo quel traffico. Dovresti essere sicuro degli IP di destinazione per poter fare una regola IP Based e non protocol based.
Se dovesse capitarmi una cosa simile ti avviso!
P.