Installiamo un server VPN con Raspberry in modo da avere una rete privata in casa e possibilità di raggiungere in qualsiasi momento e da qualsiasi posizione i tuoi dispositivi di rete usati, ad esempio, per la domotica.
Vediamo in dettaglio come puoi installare e configurare OpenVPN su un Raspberry PI, creando così la tua rete VPN domestica.
Nota: Occorre avere un Raspberry Pi 4 con Raspbian OS già installato e una connessione internet.
Se non hai ancora installato il sistema operativo della tua scheda puoi farlo con Raspberry Pi Imager.
Sommario
Configurare IP Statico in Raspberry
Il primo passaggio per creare un server VPN con Raspberry è quello si assegnare un indirizzo IP statico in modo che non venga variato ad ogni riavvio o accensione del dispositivo.
Il file da modificare è: /etc/dhcpcd.conf , dal terminale è sufficiente lanciare il comando:
sudo nano /etc/dhcpcd.conf
Scorrete il file fino all’ ultima riga e aggiungete le seguenti configurazioni:
interface <interfaccia>
static ip_address=<ip da assegnare>/<subnet>
static routers=<ip del router>
static domain_name_servers=<server DNS>
Ecco un esempio di configurazione per l’interfaccia Ethernet con i DNS di Cloudflare:
interface eth0
static ip_address=192.168.1.55/24
static routers=192.168.1.1
static domain_name_servers=1.1.1.1
Per configurare l’interfaccia WiFi è sufficiente modificare la voce interface:
interface wlan0
static ip_address=192.168.1.55/24
static routers=192.168.1.1
static domain_name_servers=1.1.1.1
Per rendere effettive le modifiche salviamo il file (ctrl+x) e riavviamo il Raspberry.
Aggiornare Raspbian
Prima di ogni altro comando, è consigliabile procedere ad aggiornare eventuali pacchetti di Raspbian, per farlo puoi usare questi comandi:
sudo apt-get update
sudo apt-get upgrade
Server VPN con Raspberry con OpenVPN
In primis è necessario installare OpenVPN sul sistema operativo del Raspberry Pi, Raspbian.
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à una schermata con scritto:
“This installer will trasform you Raspberry Pi into an OpneVPN or WireGuard Server“
Premere invio per iniziare la configurazione di un server VPN con Raspberry.
Una volta eseguito lo script, vi verrà presentata una serie di suggerimenti. Per la maggior parte, seguire le impostazioni predefinite dovrebbe andare bene, ma non vi farà male leggere attentamente tutte le schermate mentre le state seguendo.
Una volta che lo script ha raccolto da voi le informazioni di cui ha bisogno, ritornerà alla riga di comando. Questo può richiedere da quaranta minuti a diverse ore, quindi siate pronti ad aspettare un po’ di tempo.
Lo script vi informerà quando è finito e vi chiederà se volete riavviare. Questo non è strettamente necessario, ma non può far male.
Step configurazione server VPN con Raspberry:
- PiVPN domanderà innanzitutto se l’indirizzo IP del Raspberry sia prefissato via DHCP oppure si debba indicare un IP Statico. Premiamo OK e andiamo avanti.
- il programma ci mostrerà la configurazione corrente del nostro raspberry e se non vogliamo cambiare interfaccia puntando all’altro indirizzo selezioniamo: Yes.
- verrà chiesto ora di accettare e scegliere l’utente locale con il quale si potranno configurare gli accessi e gli utenti VPN.
- scegliamo l’utente pi, per selezionare un utente diverso possiamo spostarci con le frecce selezionare con la barra spaziatrice e poi il tasto tab per spostarci sull’OK.
- una volta selezionato ci verrà chiesto se attivare o meno gli aggiornamenti automatici, su questo punto vi lascio decidere in autonomia.
- nella schermata successiva selezioniamo il protocollo UDP
- poi la porta che intendiamo utilizzare per la connessione VPN, che dovrà poi essere la porta che apriremo sul router e nattata verso l’IP statico del nostro Raspberry che nel nostro caso è 192.168.1.55
- Confermiamo la porta 1194
- Verrà ora chiesto il livello di encryption (il numero di bit per la il certificato da utilizzare). 4096 è il livello massimo, 1024 il minimo, impostiamo 2048.
- Generiamo le chiavi univoche del sistema, potrebbe richiedere molto tempo in base alla prestazione del PI.
- 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 o DNS Entry e, di conseguenza, valutare di utilizzare un servizio DDNS. A voi la scelta in questo caso, se impostate DNS Entry è possibile utilizzare DuckDNS aggiornato direttamente da Raspberry
- Successivamente bisogna scegliere a quale DNS appoggiarsi, io preferisco Cloudflare voi potete scegliere tranquillamente quello che più vi è “simpatico”.
- Ultima schermata prima del riavvio, selezionate no per la ricerca nel vostro dominio, in alternativa potreste indicare il dominio della vostra rete lan per consentire di risolvere più rapidamente i nomi interni alla LAN
- Il Raspberry Pi verrà riavviato e l’installazione sarà stata completata
per gli utenti meno esperti è possibile seguire le indicazioni che ho trovato utili per creare un server VPN con Raspberry in questo video:
Creazione dell’utenza d’accesso
Per terminare la configurazione di un server VPN con Raspberry occorre 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 con Raspberry 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 è variabile.
I client consigliati 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 /home/pi/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.
Conclusione
Abbiamo creato il nostro server VPN con Raspberry ed 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.
Creare un server VPN con Raspberry non è semplicissimo ma se hai problemi puoi scrivermi nei commenti.
Ciao,
ho seguito la tua guida e al momento della connessione mi appare questo messaggio di errore su OpenVPN:
Sat Feb 25 19:08:12 2023 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Sat Feb 25 19:08:12 2023 TLS Error: TLS handshake failed
Sat Feb 25 19:08:12 2023 SIGUSR1[soft,tls-error] received, process restarting
Sat Feb 25 19:08:12 2023 MANAGEMENT: >STATE:1677348492,RECONNECTING,tls-error,,,,,
Sat Feb 25 19:08:12 2023 Restart pause, 5 second(s)
Sto usando un raspberry pi 4 ed ho configurato la porta 1194 tramite protocollo UDP.