Dopo l’intervento al ginocchio, eccomi di nuovo a scrivere su IdeaFactory e voglio iniziare scusandomi con tutti quelli che mi hanno scritto o contattato via Facebook e non hanno ancora ricevuto risposta.

Purtroppo non è facile stare seduti davanti ad un PC (anche se è un bel iMac) dopo un intervento al ginocchio.

Ma veniamo all’articolo. Forse il titolo non rende l’idea ma l’argomento di oggi risponde a questa domanda: avendo due connessioni ad Internet collegate alla mia Linux box che funge da router, come faccio a gestire il fail di una delle connessioni inoltrando a quella funzionante il traffico?

Per meglio comprende l’articolo, vi consiglio di spulciare velocemente due miei vecchi post:

  1. iproute: load balance verso 2 gateway (IMPORTANTISSIMO!)
  2. iproute: load balance verso 2 gateway della stessa rete

Rinfrescata la memoria sul routing di Linux, passiamo ad analizzare la logica di funzionamento dello script.

La strada migliore per verificare lo stato di una connessione è inoltrare verso il link qualche pacchetto e verificare che torni indietro una risposta.

Lo script non fa altro che pingare un host o in IP esterno pubblico, raggiungibile ed aperto al ping, attraverso i due link a nostra disposizione, se il ping fallisce tutto il traffico passa all’interfaccia funzionante.

Potete scaricare il file da qui e subito dopo editarlo da root per variare queste impostazioni:

# Frequenza in secondi con cui fare il check delle connessioni
SLEEPTIME=10

# IP o host esterno da pingare per effettuare le prove
TESTIP=www.google.com

# Timeout del ping in secondi
TIMEOUT=2

# Interfacce
EXTIF1=eth1
EXTIF2=eth2

# Indirizzi IP delle interfacce
IP1=192.168.1.7
IP2=192.168.0.7

# Gateway delle interfacce
GW1=192.168.1.1
GW2=192.168.0.1

# Weights del router. Nella mia guida erano entrami ad 1 per fare il round robin delle connessioni:
# Guarda questa riga: ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1
# Presente nell'articolo http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html
W1=1
W2=1

# Nome dei provider utilizzati
NAME1=ngi
NAME2=fastweb

# Numero di ripetizioni di successo o di fallimento prima di cambiare lo stato alla connessione
SUCCESSREPEATCOUNT=4
FAILUREREPEATCOUNT=1

Come potete vedere utilizzo come host esterno da pingare www.google.com che ADESSO risulta raggiungibile tramite ping, vi consiglio di specificare qualche VOSTRO server così siete sicuri che il fail della connessione non sia dovuto al cambio delle regole di firewall dell’host a cui sono diretti i ping.

Io vi consiglio di salvare lo script in /usr/local/bin (ovviamente faccio riferimento a Debian) così sarà presente nel path di sistema senza specificare ogni volta il percorso assoluto per richiamarlo.

Una volta salvato nella directory che preferite vanno settati i permessi giusti:

chmod 755 /usr/local/bin/checkgw

Adesso potete eseguire lo script.

Inizialmente potete NON metterlo in background, così si può verificare il corretto funzionamento ma poi vi consiglio di lanciare lo script in questo modo:

checkgw &

Se volete che lo script venga eseguito all’avvio potete inserirlo in /etc/rc.local.

Spero che con questo articolo sia riuscito ad accontentare molti visitatori di IdeaFactory e vi ricordo che se avete bisogno di soluzioni personalizzate, avanzate, professionali e sempre funzionanti potete contattarmi.