Scopi della guida:
Concetti affrontati:
|
Componenti software utilizzate:Prerequisiti:
COMPONENTI FISICI UTILIZZATI: |
PROGETTO MAGGIORMENTE INDICATO PER: |
|
NOTE E DISCLAIMER
|
|
Revisione guida: 1.3 |
Abstract
La possibilità di collegarsi alla rete domestica o aziendale “come si fosse fisicamente connessi ad essa” – ovvero ottenendo un indirizzo IP privato di quella rete – è qualcosa di utile e realizzabile facilmente e in buona sicurezza.
Alcuni modem/router evoluti, come per esempio i noti Fritz!, sono dotati (oltre delle comuni funzioni) anche di un server VPN (Virtual Private Network) il quale consente di definire un “tunnel sicuro” dentro il quale far transitare, criptato, il traffico da e per la rete locale attraverso Internet: un meccanismo per l’appunto cosiddetto di tunnelling.
Qualora non si disponga di questa funzionalità – ma piuttosto di un Raspberry Pi (magari per diversi usi, trai quali magari quello di ospitare un HUB personale software per domotica) dotato di sistema operativo Raspberry Pi OS, è possibile installare una componente software che fornisca tale servizio (in caso si utilizzi un Raspberry Pi con a bordo Home Assistant OS, la guida corretta è questa).
Attenzione però: questo tipo di configurazione (server) non è da confondersi con quella di un client VPN: negli ultimi anni c’è stato un proliferare di servizi VPN a pagamento, i quali consentono da dentro la propria rete domestica (o comunque un qualsiasi host connesso a Internet) di navigare in modo anonimo attraverso tale servizio. In sostanza ci si collega (sempre con la filosofia del tunnelling) alla rete del provider VPN e da lì si naviga anonimizzati verso Internet (per questioni di estrema privacy o altro).
Quello che faremo invece con questa guida è de facto promuovere il Raspberry Pi a una sorta di “provider VPN” al quale però ci collegheremo noi e soltanto noi (gratis, ovviamente), in modo da trovarci virtualmente sulla nostra rete locale come se fossimo fisicamente connessi ad essa.
Ma perché dovrei collegarmi con la rete di casa tramite VPN?
Innanzitutto perché questo ci consente di non esporre troppi servizi/porte all’esterno utilizzando il port forwarding: mi serve infatti una sola porta esposta, quella del servizio VPN, dopodiché una volta connesso ho a disposizione tutti i servizi della mia rete (perché, per l’appunto, è come se fossi fisicamente collegato a essa).
In secondo luogo, tutte le trasmissioni sono crittografate, cosa che aumenta il grado di sicurezza laddove i servizi precedentemente esposti non prevedano tale grado di sicurezza (si pensi a certe IP Cam, per esempio, il quale traffico è tutto “in chiaro”).
In terzo luogo (ma si potrebbe andare avanti), è possibile contattare host presenti sulla rete locale che per motivi di sicurezza non siano stati esposti esternamente (si pensi per esempio a dei componenti domotici come del Sonoff con firmware modificato o a uno Shelly in modalità LAN, o altri).
Allo scopo utilizzeremo il collaudato server VPN OpenVPN, installandolo e configurandolo tramite il tool PiVPN.
Ma… cambia qualcosa rispetto alla connessione remota verso eventuali servizi presenti sulla mia rete ed esposti verso l’esterno? No: OpenVPN viene “esposto” alla rete pubblica su una specifica porta; le precedenti implementazioni – quali siano – rimangono inalterate.
N.b. In caso si utilizzi un Raspberry Pi con sistema a bordo la distribuzione Home Assistant OS, la guida corretta da leggere non è la presente ma questa. |
Si parte
Assunti
Si assume che l’utente sia già dotato di un proprio FQDN che risolva l’indirizzo IP WAN del proprio host Linux Debian o del gateway sul quale è attestato.
Se non si sa di cosa si stia parlando, far riferimento a questa guida, la quale consente all’utente di capire cosa sia e di dotarsi del proprio FQDN tramite il servizio gratuito DuckDNS, nonché configurare il proprio host Linux Debian in modo da tenere automaticamente aggiornata l’associazione IP WAN/FQDN.
Per questa guida, assumeremo che il proprio FQDN sia:
miodominio.ducksdns.org
Installazione OpenVPN
In primis è necessario installare OpenVPN sul sistema operativo del Raspberry Pi, Raspberry Pi OS.
Per farlo è necessario eseguire un comando via terminale (da CLI, via SSH oppure con control-alt-t da interfaccia desktop):
curl -L https://install.pivpn.io | bash
Tale comando scarica ed esegue l’ultima versione del tool PiVPN, strumento che utilizzeremo per installare e configurare OpenVPN.
Dopo aver eseguito il comando apparirà la seguente schermata:
Premere invio per iniziare la configurazione.
PiVPN domanderà innanzitutto se l’indirizzo IP del Raspberry sia prefissato via DHCP (come da pre-requisiti) oppure si debba indicare un IP forzoso. Scegliere attribuzione automatica di IP fisso via DHCP e procedere oltre.
Ora PiVPN chiederà con quale utente installare il servizio, Scegliere “pi” e procedere oltre:
Nella fase che segue si sceglie quale standard installare, se OpenVPN o WireGuard. Questa guida persegue l’installazione di OpenVPN, lo standard più diffuso e supportato:
Ora verrà chiesto il tipo di protocollo da utilizzare. Di default solitamente viene utilizzato il protocollo UDP; un rari casi però tale traffico potrebbe essere inibito (lato client o lato server) e a quel punto potrebbe essere necessario utilizzare il protocollo TCP.
Di default, scegliere UDP.
A questo punto sceglieremo la porta. Quella tipicamente utilizzata da OpenVPN è la 1194, ma nulla ci vieta la possibilità di utilizzare un’altra porta personalizzata. Noi vi consigliamo di lasciare la 1194, porta che poi provvederemo in un secondo momento a girare dall’esterno della nostra rete all’interno, verso il Raspberry (approfondito a seguire).
Giunti a questo punto potremo selezionare il server DNS da utilizzare per la risoluzione dei nomi Internet una volta connessi al nostro server VPN. Ci viene messa a disposizione un’ampia scelta, ma ciò non toglie che successivamente potremo andare a modificarli a mano nel file di configurazione del server. Noi vi consigliamo di selezionare quelli più veloci e con meno restrizioni, ovvero Cloudflare o OpenDNS.
Non aggiungiamo alcun “custom search domain” selezionando “NO“:
A questo punto ci verrà chiesto in che modo raggiungere il server VPN, se sfruttando direttamente l’IP pubblico assegnato al modem dal nostro gestore (solitamente non conviene selezionare questo perché il nostro provider ci assegnerà un IP dinamico) oppure sfruttare il nostro FQDN con risoluzione dinamica dell’IP*.
* La configurazione proposta da questa guida ipotizza che l’utente stia usando DuckDNS aggiornato direttamente da Raspberry. Non è un must: è possibile utilizzare un qualsiasi servizio DDNS e quindi un qualsiasi nome FQDN – basta che la risoluzione di tale nome sia sempre aggiornata con l’IP assegnato al modem di casa dall’operatore telefonico. |
Indicare dunque il proprio FQDN (eg. “miodominio.duckdns.org“):
Alla scelta se utilizzare le “Elliptic Curves” selezionare “YES“:
Verrà ora chiesto il livello di encryption (il numero di bit per la il certificato da utilizzare). 512 è il livello massimo, 256 il minimo, noi consigliamo 384:
Ora PiVPN spiegherà perché sia utile attivare l’autoverifica degli aggiornamenti:
Dopodiché attivarli selezionando “YES“:
Al termine effettuare il reboot del Raspberry selezionando “YES“:
Il Raspberry Pi verrà riavviato e l’installazione sarà stata completata.
Creazione dell’utenza d’accesso
Dopo l’avvenuto riavvio provvedere a ricollegarsi a terminale, così da avere l’opportunità di creare la propria utenza d’accesso VPN.
Per farlo, eseguire il seguente comando:
pivpn add
Il sistema chiederà il nome dell’utente da creare (“Enter a Name for the Client“), la durata del certificato (“How many days should the certificate last?“, lasciare 1080), dopodiché la password scelta (due volte).
L’output dopo questo ultimo passo sarà pressappoco il seguente:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019
Generating an EC private key
writing new private key to '/etc/openvpn/easy-rsa/pki/private/user1.key.BgIhj5Dzz1'
Enter PEM pass phrase:xxxxxx
Verifying - Enter PEM pass phrase:xxxxxx
-----
Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'xxxxx'
Certificate is to be certified until Jan 24 21:43:31 2023 GMT (1080 days)
Write out database with 1 new entries
Data Base Updated
Client's cert found: xxxxx.crt
Client's Private Key found: xxxxx.key
CA public Key found: ca.crt
tls Private Key found: ta.key
========================================================
Done! user1.ovpn successfully created!
user1.ovpn was copied to:
/ovpns
for easy transfer. Please use this profile only on one
device and create additional profiles for other devices.
========================================================
Port forwarding
Sebbene il nostro server VPN sia essenzialmente pronto, manca ancora un passo fondamentale per poterlo contattare dall’esterno: il port forwarding: è infatti necessario indicare al modem che, a fronte di una chiamata dall’esterno sulla porta 1194 UDP (o TCP, se prima si è scelto questo protocollo) tale traffico sia “girato” verso l’IP (fisso, of course) del Raspberry sulla sua porta 1194 UDP (o TCP).
Per far questo bisogna agire sul proprio modem; in ogni modem ovviamente questa procedura, spiegata qui, è variabile.
Uso
Terminata la configurazione del port forwarding abbiamo tutti gli elementi che ci servono:
- un FQDN che, quando risolto, ritorna l’IP WAN del modem;
- un port forwarding che gira le chiamate dall’esterno all’interno;
- un server VPN;
- credenziali per accedervi.
A questo punto non serve che un client OpenVPN per collegare il nostro computer/smartphone/tablet alla nostra rete tramite il tunnelling VPN.
I client che consigliamo sono:
- quello per WINDOWS;
- quello per MAC (in alternativa usare il valido Tunnelblick);
- quello per LINUX;
- quello per Apple iOS;
- quello per Android.
Per collegarsi utilizzando uno dei client elencati (o uno comunque compatibile con OpenVPN) è necessario utilizzare il certificato emesso in fase di creazione dell’utenza, il quale si trova presso il percorso ~/ovpns (con nome NOMEUTENTE.opvn). Basterà scaricarlo dal Raspberry e importarlo sul client: all’atto della richiesta di connessione sarà poi necessario inserire la password dell’utente precedentemente creato e voilà, ci troveremo collegati alla nostra rete locale.
Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa. |