Il seguente tutorial spiega come realizzare un piccolo ed economico, ma efficiente, router che sia in grado di fornire connettività internet a una piccola rete locale, sia cablata che wi-fi, tramite la rete cellulare in 4G.
Il progetto è stato realizzato con il fine di fornire a basso costo, sia per quanto concerne il materiale necessario che per quanto riguardo la tariffa mensile. L’hardware del router è costituito da un Raspberry PI collegato via USB a un dongle Huawei E3372. Il software del router è OpenWRT, una distribuzione GNU/Linux specifica per il routing e dotata di una web user interface.
La piattaforma hardware è stata scelta per il basso costo e l’economicità dei consumi, dai quattro ai cinque watt in piena potenza, ma ovviamente limita la scalabilità della rete data le ridotte dimensioni della RAM dei Raspberry e il processore ARM. Ovviamente OpenWRT è disponibile anche su piattaforme X86 64 bit per cui, utilizzando un differente hardware, giocoforza più costoso ed energivoro, è possibile realizzare progetti maggiormente scalabili verso l’alto. In ogni modo per il caso d’uso per cui questo progetto è stato realizzato la piattaforma RaspberryPi è sembrata la scelta più vantaggiosa: è necessario infatti fornire connettività a due computer collegati via ethernet e a quattro/cinque cellulari o laptop via wifi (ma difficilmente ci saranno più di due apparecchi simultaneamente collegati al wi-fi). La connessione viene utilizzata principalmente per la navigazione web, posta elettronica, messaggistica e, al massimo, accesso a brevi video o stream audio. Non è pensata per streaming in HD e, tantomeno, per il gaming online.
Siccome stiamo parlando di sistemi wireless è palese che bisognerà tenere accuratamente conto delle caratteristiche ambientali del luogo dove verrà installata l’apparecchiatura. Nel caso specifico parliamo di un semi-interrato dove vi è una buona copertura per quanto concerne il 4G, sopratutto in prossimità delle aperture tipo “bocca di lupo”, che non ha reso, a ora, necessario l’utilizzo di un’antenna aggiuntiva da collegare al dongle Huawei (che è stato comunque scelto per la possibilità di collegare l’antenna in caso di necessità). Siccome l’ambiente è piuttosto vasto, circa 85 metri quadri, e diviso da dei muri di cemento armato costituenti le fondamenta dell’edificio, si è rilevato come il wi-fi per la LAN perde molta potenza fuori dalla stanza dove è installato il router. A circa cinque metri da essa, e con in mezzo una parete in cemento armato da diversi decimetri con un’apertura che funge da passagio, la connettività wi-fi rimane disponibile solamente per i cellulari di fascia medio-alta, dotati di un’antenna wi-fi con un buon guadagno. Il problema è comunque facilmente ovviabile installando o una scheda wi-fi esterna dotata di antenna maggiormente performante sul Raspberry oppure, soluzione che a mio avviso sarebbe migliore, installando un access point collegato via ethernet al router nell’ambiente attiguo alla stanza dove è installato l’apparato. Il problema comunque non è stato giudicato limitante dato che lo scopo era fornire di connettività la stanza dove l’apparecchio è stato posto.
L’hardware necessario è il seguente:
-
Raspberry Pi modello B+. È altamente consigliato anche l’acquisto di un case protettivo.
-
Scheda SD da almeno 8 GB per il sistema operativo, di buona fascia (Kingston o Samsung)
-
Dongle Huawei E3372 e, ovviamente, una SIM card da inserirvi
-
Alimentatore da muro con uscita mini-usb (un normale caricatore da muro per cellulari va benissimo). Ovviamente è necessario che l’impianto elettrico sia fornisca corrente in modo stabile pena il possibile danneggiamento dell’apparato
-
Switch ethernet. Date le scarse richieste nel caso specifico si è puntato al risparmio prendendo un banale TP-Link da quindici euro. Niente impedisce di usare uno switch managed da un migliaio di euro o una qualsiasi soluzione intermedia. Lo switch è necessario solo se si devono collegare più di un device via ethernet, dato che il Raspberry ha una sola porta RJ45.
Il Raspberry PI riesce ad erogare, tramite la sua porta USB, una potenza sufficiente ad alimentare il dongle. Altri modelli di dongle potrebbero necessitare di un maggiore wattaggio per cui bisognerebbe procurarsi un hub usb alimentato esternamente e usare questo per collegare il dongle al Raspberry.
Per prima cosa bisogna scaricare l’immagine di OpenWRT e flasharla sulla scheda SD da inserire nel Raspberry. Questo va necessariamente dotato di connessione internet, possibilmente in DHCP e via cavo ethernet, dato che andranno assolutamente installati, da linea di comando in SSH o da webUI i seguenti pacchetti: kmod-usb-net-cdc-ether
e usb-modeswitch. Da shell vanno usati i seguenti comandi:
opkg update
opkg install kmod-usb-net-cdc-ether
opkg install usb-modeswitch
Ovviamente
già che ci siete aggiornate
completamente il sistema con:
opkg
upgrade
A questo punto è necessario spegnere il sistema e collegare il dongle USB dove si dovrà già montare la scheda SIM. Il gestore della SIM potrà essere di vostra scelta, nel caso specifico è stato usato Iliad, ma chi vorrà poter raggiungere l’apparecchio da internet dovrà scegliere un gestore che fornisca un IP pubblico, anche se dinamico dato che OpenWRT supporta funzionalità di Dinamic DNS. In questo caso Iliad non andrebbe bene, a meno di volersi impegolare il tunnel SSH o configurazioni VPN.
Il sistema, una volta riavviato, riconoscerà il dongle USB come interfaccia Ethernet, per la configurazione iniziale è necessario settare l’interfaccia in DHCP in modo che possa prendere l’indirizzo ip dal Dongle stesso. Successivamente è necessario, per evitare problemi, settargli un indirizzo statico nella stessa rete fornita dal dongle: nel mio caso il dongle aveva indirizzo 192.168.1.1 e io ho settato l’indirizzo dell’interfaccia lato Raspberry come 192.168.1.2/32 in modo che vi fossero solo due indirizzi disponibili su quella rete: uno usato dal Raspeberry e uno usato dal dongle.
Il dongle USB con le SIM Iliad va configurato creando un profilo dalla webUI del dongle stesso, raggiungibile all’indirizzo 192.168.1.1 e inserendo i dati di login forniti da Iliad stessa:
utente:
iliad
password:
iliad
È buona pratica anche impostare una password amministrativa per il dongle stesso, lo si fa dal pannello amministrativo del device stesso, in modo che non sia gestibile da qualsiasi utente collegato alla rete.
L’interfaccia di rete su cui si collega il Dongle andrà messa nella zona red (WAN) del firewall mentre l'interfaccia ethernet e wi-fi dovranno rimanere nella verde (LAN). Questo va specificato al momento in cui si crea l’interfaccia ethernet su USB.
A questo punto dall’interfaccia web di OpenWRT è necessario andare nella sezione “Rotte statiche” e impostare per la rete LAN, nel mio caso 192.168.2.0/24, la route 192.16.8.1.1 per raggiungere la rete 0.0.0.0. In questo modo tutto il traffico che non abbia come indirizzo IP di destinazione un indirizzo interno alla LAN stessa verrà automaticamente smistato verso il dongle e da lì verso internet. Nelle guide ufficiali non è scritto ma ho notato che le rotte statiche vengono
applicate
solo dopo un reboot del dispositivo, operazione che richiede meno di un minuto.
Per quanto riguarda la gestione della rete LAN ho impostato il DHCP e l’interfaccia ethernet e wi-fi in bridge tra di loro (è l’impostazione di default). Niente ovviamente impedisce di disaccoppiarle, impostare il DHCP solo sull’interfaccia wi-fi, che a questo punto dovrà avere la sua rete, o di collegare un access point wi-fi tramite lo switch e usare per questo una rete a parte (con relativa VLAN) passando a un paradigma di “router on a stick”
(ovviamente solo se lo switch consente la gestione delle VLAN)
. Comunque per il caso d’uso per cui il sistema è stato realizzato questa necessità non si è presentata, facendo anche risparmiare un po’ di tempo nella configurazione e nella progettazione del sistema. Ovviamente in caso di aggiunta di ulteriori reti o subnet, che siano tramite il wi-fi del Raspberry o tramite un access point esterno bisognerà opportunamente modificare la tabella delle rotte statiche di OpenWRT per fare in modo che chi si connette su tali reti o subnet possa raggiungere la WAN. In ogni caso se si desidera semplicemente collegare un access point wi-fi senza separare le reti ma solo per aumentare l’area su cui si fornisce connettività è possibile farlo tramite uno switch, o direttamente all’unica porta ethernet del Raspberry, dato che il mezzo fisico di trasmissione dei dati è trasparente al router.
Il DHCP fornisce ai client come server DNS un indirizzo IP di OpenDNS.
OpenWRT è un sistema versatile e potente e permette l’implementazione anche di diversi tipi di VPN, sia come client che come server, DNS dinamico, comodo questo anche per progetti di IOT, funzionalità firewall, NAT e PAT, tramite pacchetti preinstallati o installabili dai repository. Ovviamente è possibile, per avere una maggiore banda disponibile, collegare più dongle con relative SIM, al Raspberry (magari in questo caso tramite un hub USB alimentato esternamente) e impostare un load-balancing che permetta di utilizzarli contemporaneamente. Ovviamente parliamo di configurazioni avanzate che nel caso d’uso corrente non aveva nessun senso applicare e va tenuto conto che il Raspberry ha una potenza di calcolo limitata e non si può pretendere che svolga lo stesso lavoro di un router Cisco o Huawei. In ogni caso per quanto riguarda l’utilizzo domestico o per piccole realtà, commerciali o no, che non hanno bisogno di gestire un grande traffico dati rappresenta una soluzione con un ottimo rapporto qualità/prezzo.
In futuro valuterò se impostare un cronjob che faccia eseguire un riavvio all’intero sistema ogni settimana, in modo da svuotare la RAM che date le sue dimensioni non elevate è sicuramente un punto debole di questa piattaforma hardware.