Una rete mobile di riserva

Nel mio ufficio domestico c’è un server con un po’ di servizi (dischi di rete, subversion, ecc.) e diverse workstation fisse e mobili, oltre a qualche box un po’ più “ludico” sparso per casa. Ovviamente il tutto esce su internet attraverso un router ADSL su rete Telecom (Alice per la precisione). Può succedere, come sa qualunque utente di ADSL italiano, che si verifichino delle interruzioni del servizio più o meno lunghe. In particolare negli ultimi 6 mesi ho avuto moltissimi problemi a far funzionare la linea, cosa che mi rende molto difficile il lavoro e le altre attività. A un certo punto, quando ormai potevo solo sbattere la testa sul muro, ho avuto l’idea di far uscire tutta la mia rete su connessione mobile, almeno nei momenti di failure della linea Telecom. Con una tariffa dati economica (per fortuna costano sempre meno) e un cellulare con funzioni di modem collegato a una box GNU/Linux è possibile redirezionare su linea mobile tutto il traffico internet della rete locale senza riconfigurare i nodi. In questo modo è possibile continuare tutte le proprie attività come se nulla fosse, anche quando l’amato monopolista vi fa aspettare 6 mesi per risolvere un guasto.

Per fortuna il mio router Netgear ha un firmware basato su Linux e Busybox e per poterlo riconfigurare basta abilitare il terminale visitando con il browser una url simile a questa:

http://ip.del.router/setup.cgi?todo=debug

Una volta fatto ci si può collegare in telnet e lavorare sul router con il terminale. Le operazioni da fare sono semplici. Innanzitutto si devono sostituire i DNS del proprio gestore mobile nel file /etc/resolv.conf:

nameserver ip.dns1.server.gestore
nameserver ip.dns2.server.gestore

Poi si deve impostare come default gateway la macchina GNU/Linux che dispone del modem, con il comando:

route add default gw ip.del.pc.con.modem

Infine bisogna “svegliare” il servizio dns in modo che legga nuovamente il resolv.conf. Il mio router usa un demone molto furbo che si chiama dnsmasq, il quale riceve le richieste DNS provenienti dalla rete locale, le inoltra ai DNS configurati e fornisce le risposte al mittente. Per svegliarlo bisogna conoscerne il PID:

ps aux | grep dnsmasq

Quindi è sufficiente il comando:

kill -1 <dnsmasq pid>

dove <dnsmasq pid> è il numero di PID. Il risultato di queste semplici operazioni è che tutto il traffico internet che transita per il router uscirà attraverso un nuovo gateway, cioè la macchina con il cellulare/modem, che perciò va opportunamente configurata. Dando per scontato che da questa si riesca a connettersi a internet tramite utility come kppp o gnome-ppp (se non direttamente con wvdial), anche qui le operazioni sono piuttosto semplici.

Innanzitutto si deve rimuovere il router come default gateway, altrimenti si genera un loop:

route del default gw ip.del.router

Poi ci si può connettere a internet, operazione che configurerà opportunamente il default gateway da utilizzare, cioè quello dell’operatore mobile. Se non dovesse accadere, si può sempre provare a configurare a mano il gateway con un comando simile a questo:

route add gw ppp0

Nel mio caso ppp0 è l’interfaccia usata per la connessione dialup con il modem. L’ultimo step è la configurazione del NAT, per la quale si impartiscono i seguenti comandi sul terminale:

sudo ifconfig eth0 192.168.0.5
sudo iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
sudo iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward

dove si suppone che 192.168.0.5 sia l’IP dell’interfaccia eth0 della LAN e ppp0 quella della connessione mobile.

Se tutto è andato a buon fine ogni macchina della rete uscirà su internet senza doverla riconfigurare, stessa cosa per gli eventuali client wireless se il vostro router è anche access point. Naturalmente il tutto è soggetto a miglioramenti, ma l’idea di base è questa.

comments powered by Disqus