Visite: 62453

Valutazione attuale: 0 / 5

È la prima domenica di primavera, ma sembra che nessuno se ne sia accorto. Intanto fuori piove, il cielo è grigio e i colori brillanti della primavera stentano a farsi riconoscere. Poi non c’è la serie A, martedì giocherà la Nazionale, per cui oggi c’è il turno di riposo. In TV trasmettono la replica del gran premio di Malesia, corso questa notte. Ma anche qui il grigio ha il sopravvento. Alonso si tocca con Vettel e al secondo giro esce di pista, causa la rottura dell’alettone anteriore ed una scellerata strategia del muretto, che lo ha lasciato in pista. Insomma, questa giornata non lascia presagire nulla di buono.
Ho un pensiero che mi ronza in testa. Riuscire ad accedere ai miei dati anche quando sono fuori. Fuori casa intendo. Ci sono vari modi per risolvere il problema, ma quello che mi interessa è la creazione di una VPN.

Cos’è una VPN

Una VPN (Virtual Private network) è un particolare tipo di rete privata realizzata utilizzando Internet come canale di comunicazione. Le VPN sono utilizzate per mettere in collegamento due o più sedi a costi contenuti, oppure per permettere ad utenti esterni di accedere alle risorse della rete. Siano esse file server, stampanti o telecamere IP.

Il Raspberry Pi

Una VPN può essere creata davvero in molti modi. Alcuni più semplici ma costosi, professionali, basati su apparati progettati ad hoc. Altri stile hacker, quasi a costo zero, con firmware open source progettato per sostituirsi a quello presente sul proprio router per abilitare il servizio VPN. Ed infine installare un servizio VPN su un pc. Ecco, la mia scelta è ricaduta su questa ultima modalità. Non tanto perché questioni economiche e neanche di opportunità, ma solo perché questa modalità mi da la possibilità di fare ciò che più mi piace, lo smanettone, ed allo stesso tempo di studiare i concetti propri delle VPN. Per lo scopo ho deciso di utilizzare un acquisto fatto qualche mese fa, e che fino ad ora era rimasto lì fermo  a prendere polvere. Si tratta di un Raspberry Pi.
Il Raspberry Pi è un single-board computer. Un computer grande come una carta di credito davvero molto economico.
Micro USB Euro power supply for Raspberry Pi €6.20
Raspberry Pi Type B Single Board Computer €27.40
Raspberry Pi Type B Case – Clear €5.06
Tasse €7.73
Spese di spedizione €6.28
TDK 2GB SD Travelcard €3.00
Totale €55.67
Come sistema operativo ho scelto Raspbian, una distribuzione basata su Debian ottimizzata per Raspberry Pi. L’installazione è stata abbastanza semplice, 10 minuti circa per scaricare l’ultima versione disponibile: Wheezy Raspbian 2013-02-09. Altrettanti per copiare l’immagine sulla SD. Probabilmente la scelta di aver preso una SD a basso costo, di classe 4, ha penalizzato questa operazione, ma comunque è una operazione che si fa una tantum, per cui anche aspettare qualche minuto non è un problema.
Per questa operazione ho usato una macchina Linux e dopo aver decompresso l’immagine appena scaricata, ho dato il comando

$ dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdb

Naturalmente prima ho dovuto scoprire come Linux avesse chiamato la SD. Nel mio caso è /dev/sdb. Il seguente comando è stato di aiuto:

$ dmesg | grep SCSI

[    0.290697] SCSI subsystem initialized
[    0.453391] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
[    1.232898] sd 0:0:0:0: [sda] Attached SCSI disk
[12499.505355] sd 3:0:0:0: [sdb] Attached SCSI removable disk
[13821.927404] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[57861.356489] sd 6:0:0:0: [sdb] Attached SCSI removable disk

La SD con il sistema operativo è pronta, adesso c’è da inserirla nel Raspberry Pi e procedere con l’installazione. Per questa operazione c’è bisogno di una tastiera ed un monitor. Io ho scelto di collegarlo alla TV LCD tramite cavo HDMI. Una volta completata l’installazione procederò alla configurazione tramite shell SSH, per cui non avrò più bisogno di monitor e tastiera, almeno spero.

Il sistema si è avviato, sul monitor scorrono una serie di messaggi in puro stile Linux, tutto sembra procedere per il meglio. Dopo pochi secondi compare la finestra di configurazione del sistema. Una serie di voci di menu, rigorosamente in inglese, mi donano un sorriso. Il Raspberry è operativo, adesso basta impostare un paio di parametri e poi si parte.
Inizio configurando il layout della tastiera tramite il commando configure_keyboard. Ho scelto quella Italiana.
Mi lascio prendere dalla mia famigerata paranoia e subito cambio la password dell’utente di default (pi) tramite il commando change_pass. Potrei anche scriverla qui, tanto già so che prima della fine della giornata l’avrò cambiata una mezza dozzina di volte. Maledetta paranoia.
Infine imposto il time zone su Europe/Rome tramite il comando change_timezone.
C’è anche la voce SSH che permette di abilitare o disabilitare appunto il servizio SSH. Ma almeno nel mio caso il servizio è già attivo.

Una VPN basata su chiave simmetrica

Il Raspberry  è operativo. Adesso mi serve sapere quale indirizzo IP ha il dispositivo. Inserisco username e password ed digito al prompt

$ ifconfig

eth0      Link encap:Ethernet  HWaddr b8:27:eb:12:34:56
          inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0

Adesso si può partire sul serio. Scollego la tastiera ed il cavo hdmi e prendo lo slate, il mio Samsung Slate 7. Davvero una bella macchina, anche se i piccoli difetti emersi nell’utilizzo intensivo fatto in questi mesi forse non ne giustificano il prezzo di acquisto, ma comunque con Windows 8 è davvero una bella macchina. Ma come dice Lucarelli “questa è un’altra storia”, ed un giorno forse ne parlerò.

Per questa prima prova ho deciso di utilizzare la configurazione basata su chiave simmetrica (o static key come si dice in gergo). Questa è la più semplice delle configurazione ed è ideale per lo studio delle VPN  o per una semplice VPN.

Configurazione del server

Ma torniamo a noi. Tramite PuTTY instauro una connessione con il Raspberry Pi ed inizio la configurazione di OpenVPN. Inizio con l’installazione del pacchetto openvpn

$ sudo apt-get install openvpn

Neanche un minuto di attesa ed il gioco è fatto. Adesso bisogna creare la chiave statica.

$ openvpn --genkey --secret static.key
$ sudo cp static.key /etc/openvpn/

Anche questo passaggio è stato semplice e veloce; adesso non mi resta che configurare il servizio openvpn per creare la mia prima VPN.

$ sudo vi /etc/openvpn/server.conf

dev tun
ifconfig 10.8.0.1 10.8.0.2
secret static.key

Dopo aver creato il file di configurazione riavvio il servizio per caricare la nuova configurazione:

$ sudo /etc/init.d/openvpn restart

Configurazione del client

Come detto, il client utilizzato per la connessione tramite VPN è lo Slate con Windows 8 a 64 bit. La prima cosa da fare è installare OpenVPN 64 bit. L’ultima versione disponibile è openvpn-install-2.3.0-I005-x86_64.exe. Il download e l’installazione sono standard, per cui nessun problema. L’avvio invece merita qualche attenzione. Bisogna infatti avviare la GUI, l’interfaccia grafica, con diritti di amministratore. Sono quasi sicuro che con la configurazione giusta non ce ne sia bisogno, ma oggi non ho il tempo per approfondire il discorso.

Non resta che copiare la chiave simmetrica, creare il file di configurazione ed avviare la mia prima VPN. Ma procedo con ordine. Avvio WinSCP e cerco di scaricare il file static.key. WinSCP è un client FTP grafico per Windows, molto semplice da usare, che supporta i protocolli FTP, SFTP e SCP. Non è la giornata più adatta a descrivere le sue funzionalità o gli svariati usi che se ne può fare, ma sicuramente insieme a PuTTY non più mancare nella cassetta degli attrezzi del bravo sysadmin.

Avvio il programma, inserisco l’IP del Raspberry Pi, nome utente pi, password ******** ed ho l’accesso alla cartella /home/pi. Sono sul dispositivo. Ottimo, non mi resta che posizionarmi nella cartella /etc/openvpn e prelevare il file static.key. Ma, con mia somma sorpresa non riesco a scaricare il file in questione. C’è sicuramente qualcosa che non va. Credo mi manchino i diritti di accesso al file essendo stato creato con sudo. Non ho ne il tempo ne la voglia di investigare oltre. Mi serve quel file e mi serve subito. Vediamo cosa posso inventarmi. Accedo al Raspberry Pi tramite SSH, e digito il comando

$ sudo cat /etc/openvpn/static.key

Un copia ed incolla nel buon vecchio notepad ed il gioco è fatto. Adesso ho il mio file static.key sul client Windows 8, nella cartella C:\Program Files\OpenVPN\config.

Non sarà stato elegante, e forse nemmeno professionale, però ha funzionato, un’azione da vero smanettone. Lo ammetto sono soddisfatto di me.

Adesso passo alla creazione del file C:\Program Files\OpenVPN\config\client.ovpn sempre con notepad; ecco il contenuto

remote 123.45.67.89
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret static.key

Dove 123.45.67.89 è l’indirizzo IP pubblico del mio router. Le prove le sto facendo a casa dove non sono dotato di una linea ADSL con IP statico, per cui già so che non potrà essere la soluzione definitiva. Ma per il momento va bene così. Per conoscere il mio IP pubblico sono andato su uno dei tanti siti in risposta alla ricerca what is my ip.

È il momento della verità. Il server è configurato ed attivo. Il client è configurato. Disconnetto il pc dalla rete WiFi di casa. Mi collego ad internet tramite rete cellulare. Lancio l’interfaccia grafica OpenVPN GUI. La finestra UserAccount Control, mi conferma che il programma si è avviato con diritti amministrativi. Molto bene. In basso a destra, nella tray bar, c’è l’icona di OpenVPN, due computer rossi ed un globo in primo piano. Tasto destro > Connect. Bene, la finestra di OpenVPN Connection è aperta. I due computer dell’icona adesso sono gialli. La comunicazione con il server ha avuto inizio, non resta che attendere.

L’attesa inizia a diventare estenuante, è passato un minuto ma a me sembra un’ora. Niente da fare. L’icona che non si schioda da quel suo colore giallo e la scritta Current State fissa su Connecting non lasciano presagire nulla di buono. La domenica continua ad essere grigia. E non so cosa possa essere andato storto.
Operazioni preliminari
Stacco la spina, vado a prendere un caffè. Fuori è ancora grigio. Macino una manciata di chicchi di caffè. Il caffè mi piace macinato fresco, preparato con la moka e con lo zucchero di canna. Un piccolo vizio, che quando posso completo con una tavoletta di cioccolato extra fondente. Aspetto 5 minuti, la moka inizia a gorgogliare, il caffè è pronto. Lo giro lentamente, e lo sorseggio come fosse l’ultimo caffè della mia vita. Delizioso. Due bocconi di cioccolato extra fondente, ed ecco che la giornata ritorna ad acquistare colore.
La fretta è cattiva consigliera, ed io per la smania di attivare la mia VPN ho dimenticato di attivare il Port Forwarding sul router.

La prova finale

Ricollego il pc alla rete WiFi di casa e mi collego al router tramite http; un D-Link DSL-2640B, un prodotto di fascia consumer molto economico, ma che fa il suo dovere. Per configurare il port forwarding vado nella sezione Advanced. La voce Port Forwarding è la prima della sezione, ed infatti mi si presenta subito la pagina di configurazione. Seleziono Custom Server, inserisco la descrizione OpenVPN, imposto l’ip del Raspberry Pi, la porta esterna 1194 e quella interna, sempre 1194. Come protocollo seleziono TCP/UDP. Non so quale userò, e non ho voglia di indagare oltre al momento. Giacché mi trovo imposto anche il DDNS. Sempre nella sezione Advanced sotto la voce DNS Setup, trovo la parte relativa al DDNS Configuration. Si può scegliere tra i servizi gratuiti dlinkddns.com o DynDNS.org. Personalmente ho un account su DynDNS.org ed utilizzo quello per configurare la mia rete.
Salvo il tutto e sono pronto a riprovare. Scollego lo slate dalla rete di casa e attivo la connessione cellulare. Ma questa volta prima di far partire il collegamento modifico la configurazione di OpenVPN; tasto destro sull’icona e via con edit config,  sostituendo lIP usato in precedenza con il nome DNS che ho appena usato per configurare il router.
Adesso si riparte. Tasto destro > Connect. Pochi secondi, qualche messaggio nella finestra di connessione e l’icona di OpenVPN diventa verde. Un ballon mi comunica che la connessione è avvenuta:

Slate7 is now connected
Assigned IP: 10.8.0.2

Infine una piccola verifica. Apro una shell DOS e lancio un ping al Raspberry Pi

> ping 10.8.0.1

Reply from 10.8.0.1: bytes=32 time=455ms TTL=64

Guardo fuori dalla finestra. Un timido raggio di sole illumina un angolo di giardino, alcuni narcisi sorridono alla prima domenica di primavera. La VPN funziona.

continua…

Torna su