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.