Raspberry Pi: installare e configurare WireGuard con PiVPN (Aggiornato)

| |

Del perché ti serva una VPN casalinga ne abbiamo già parlato in passato e ti basterà una ricerca su Google per scovare i tanti, tantissimi altri vantaggi che magari non ho citato in articoli precedenti, soprattutto se sei nerd dentro e in casa hai il tuo NAS, il tuo laboratorio e chissà cos’altro. Se è vero che il Synology offre “by design” la possibilità di attivare il VPN Server con a bordo – tra le varie soluzioni – OpenVPN, è altrettanto vero che negli ultimi anni WireGuard sta seriamente facendola da padrone in quanto a sicurezza, leggerezza e immediatezza nella configurazione.

Se il sito web ufficiale di WireGuard ti pare “incomprensibile” puoi leggere l’articolo sulla Wikipedia italiana per avere un’infarinatura in merito al prodotto. Quello che oggi ti spiego rapidamente è come installare WireGuard su Raspberry PI dato che su Synology non esiste un pacchetto nativo (nonostante ci sia un progetto GitHub che parrebbe funzionare e che sperimenterò in futuro).

Serve davvero utilizzare una VPN?

Aggiornamento di Raspberry

Come da tradizione del blog, appoggio delicatamente qui il solito messaggio promozional-farmaceutico per evitare brutti scherzi o lamentele postume:

Raspberry Pi: installare e configurare WireGuard con PiVPN (Aggiornato) 1 Attenzione:
Prima di partire, il solito consiglio: occhio sempre a quello che tocchi e che rimuovi, effettua dei backup del tuo sistema per sicurezza. Potrai così tornare indietro in caso di problemi.

Cominciamo: collegati via SSH al tuo RPi e fai partire un aggiornamento completo del Sistema Operativo e dei pacchetti attualmente installati a bordo, ti basterà lanciare due comandi:

sudo apt-get update
sudo apt-get full-upgrade

Il tempo impiegato dipende dallo stato di aggiornamento del tuo RPi (più è indietro e più dovrà scaricare e installare dati), dalla velocità della linea Internet e della scheda SD che monti, porta pazienza, potrebbe volerci un po’ (nota a margine: tieni il tuo sistema aggiornato, falla diventare un’operazione di routine).

Raspberry: abilitare la 2FA per collegarsi in SSH

WireGuard: installazione

Per poter installare WireGuard su Raspberry mi servirò dell’ottimo lavoro realizzato e messo a disposizione da PiVPN, progetto open source che permette un’installazione quanto più automatizzata e semplificata, pensata appositamente per questi piccoli aggeggi che ormai in tanti abbiamo in casa. Se vuoi dare un’occhiata al repository GitHub del progetto lo trovi all’indirizzo github.com/pivpn/pivpn.

Da Terminale copia, incolla ed esegui questa stringa:

curl -L https://install.pivpn.io | bash

Non appena lo script scaricherà il necessario per partire, ti presenterà davanti agli occhi un percorso guidato in cui rispondere a delle semplici domande. Inizialmente ti toccherà dare solo un colpo di invio, poi arriverai al terzo step che ti chiederà se il tuo Raspberry possiede già un indirizzo IP assegnatogli in maniera esclusiva tramite DHCP reservation. Nel mio caso la risposta è sì (e proseguirò su questo percorso), diversamente tu potrai rispondere No e – in questo momento – stabilire un indirizzo IP che il tuo Raspberry dovrà tenere tutto per sé senza mai più cambiarlo. Il mio consiglio è quello di effettuare questa operazione sul router anziché sul Raspberry, fissa il suo indirizzo IP, lasciaglielo in maniera esclusiva, diversamente WireGuard non potrà funzionare correttamente.

Il setup proseguirà adesso in maniera del tutto automatica fino a quando non ti verrà richiesto di confermare la porta da utilizzare per il collegamento VPN. La predefinita è la 51820 in UDP, puoi confermarla o modificarla se hai particolari esigenze. Se confermata (o modificata) ti verrà comunque richiesto di dare ancora un’ultima volta la conferma prima di procedere. Dopo la conferma, lo script verificherà la presenza di Pi-hole sul Raspberry; se trovato ti chiederà se vuoi configurare WireGuard per utilizzare quell’installazione di Pi-hole e navigare quindi protetto da pubblicità e schifezze varie, io che ormai sono quasi del tutto passato a NextDNS ho risposto di no, tu fa la tua scelta in base alle necessità!

Approderai ora alla scelta del DNS da utilizzare per la risoluzione dei nomi. Nel mio caso specificherò dei DNS personalizzati e punterò il tutto ai miei NextDNS, nel tuo caso – se non hai Pi-hole e non sei cliente NextDNS – posso consigliarti di utilizzare i server di Cloudflare che sono veloci e – almeno questo è ciò che scrivono – cancellano tutti i log di navigazione dopo 24h, proteggendo così la privacy dei propri utilizzatori. Puoi muoverti con le frecce direzionali della tastiera e premere la barra spaziatrice per selezionare la voce che ti interessa. Un colpo di invio finale permetterà di confermare la scelta:

Raspberry: installare e configurare WireGuard con PiVPN 15

Ora ti verrà richiesto quale IP pubblico utilizzare. Verrà rilevato il tuo attuale e ti verrà proposto come prima voce, diversamente potrai selezionare una voce DNS pubblica che potrebbe corrispondere a uno dei tanti servizi “No IP”. Nel mio caso ho sfruttato proprio questa seconda voce.

Verranno ora generate le chiavi di sicurezza del server e ti verrà mostrato a video un messaggio che ti inviterà ad abilitare gli aggiornamenti automatici necessari al buon funzionamento di WireGuard e – soprattutto – all’aggiornamento di ogni possibile bug di sicurezza trovato. Consiglio caldamente di proseguire in tal senso per metterti quanto più al riparo da sgradite sorprese.

La tua installazione è ormai completa. Si può passare ora all’aggiunta di un account VPN ma prima è caldamente consigliato un riavvio del Raspberry.

PiVPN Add

Per creare un nuovo profilo WireGuard ti basterà ricollegarti via Terminale al tuo Raspberry, copiare, incollare ed eseguire questa stringa:

sudo pivpn add

Specifica il nome che preferisci come “Client Name” (nel mio caso ho usato un banale e prevedibile “Gioxx”) e conferma con invio. A questo punto – partendo dal presupposto che anche il tuo utente Raspberry sia il classico “pi“, la configurazione verrà salvata in /home/pi/configs (il file si chiamerà – in questo caso – Gioxx.conf).

Raspberry: installare e configurare WireGuard con PiVPN 28

Questo file ti servirà per poter configurare l’applicazione di WireGuard che è disponibile per ogni sistema, dai un’occhiata alla pagina wireguard.com/install. Io l’ho scaricata per il mio MacBook passando direttamente dall’App Store:

Raspberry: installare e configurare WireGuard con PiVPN

Mobile

Per il tuo smaprthone o tablet puoi invece facilitarti ulteriormente la vita perché PiVPN propone la funzione di creazione codici QR per permettere ai tuoi dispositivi di prendere la scorciatoia e portarsi a bordo la configurazione in men che non si dica. Per poterlo fare puoi certamente portarti avanti e scaricare l’applicazione di WireGuard per iOS o Android, quindi lanciare poi da Terminale il comando pivpn -qr NOMEPROFILO dove “NOMEPROFILO” andrà modificato con quello che hai scelto poco fa. Nel mio caso il comando sarà quindi pivpn -qr Gioxx.

WireGuard
WireGuard
Price: Free
‎WireGuard
‎WireGuard
Price: Free

Raspberry: installare e configurare WireGuard con PiVPN 3

Apri l’applicazione di WireGuard sul tuo smartphone o tablet, aggiungi un tunnel e chiedi all’applicazione di leggere un codice QR, inquadra quello che hai precedentemente generato e il gioco è fatto. È arrivato il momento di connetterti alla tua nuova VPN. Otterrai così la possibilità di collegarti ai tuoi dispositivi casalinghi ovunque ti trovi.

Extra: LAN only, please!

Un paragrafo velocissimo ed “extra“: se vuoi evitare che la tua nuova VPN incanali al suo interno proprio tutto, navigazione Internet compresa (il che rallenterebbe potenzialmente la tua velocità ma – soprattutto – potrebbe in alcuni casi impedirti di accedere le risorse locali della location in cui ti trovi, ufficio o casa altrui giusto per dirne due), dovrai / potrai semplicemente ritoccare il file di configurazione che hai precedentemente generato e scaricato dal tuo Raspberry. Aprendolo noterai infatti che questo porta al suo interno una serie di informazioni utili al corretto funzionamento della connessione WireGuard, per esempio:

[Interface]
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Address = 10.6.0.2/24
DNS = 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PresharedKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Endpoint = ESEMPIO.ddns.net:51820
AllowedIPs = 0.0.0.0/0, ::0/0

Dato il file di configurazione poco sopra, a te basterà modificare la riga relativa agli IP permessi (AllowedIPs) per dire al tunnel VPN cosa dovrà visitare come se ci si trovasse in LAN e cosa no. Per esempio – se la tua rete di casa fornisce IP del tipo 192.168.0.0/24 (quindi da 192.168.0.1 a 192.168.0.254) – potrai inserire proprio 192.168.0.0 al posto di quel 0.0.0.0, 24 al posto dello 0 dopo lo slash, in pratica questo:

AllowedIPs = 192.168.0.0/24

Se ho fatto sparire quel “, ::0/0” rispetto al file d’esempio sopra è perché in casa non uso IPv6, probabilmente non lo fai neanche tu. In caso contrario sentiti libero di specificare gli indirizzi che vuoi raggiungere tramite tunnel VPN WireGuard.

Nell’articolo ho cercato di evitare quanti più tecnicismi possibili anche se ad alcuni non si può proprio rinunciare, sentiti libero di commentare l’articolo in caso di dubbi o suggerimenti in merito.

#StaySafe

Aggiornato

Aggiornamento del 12/12/22

Francesco mi ha fatto notare che mancava un dettaglio importante riguardo il protocollo da utilizzare per la configurazione della porta di comunicazione di Wireguard, ho provveduto ad aggiungerlo. La configurazione prevede che la porta venga configurata in UDP :-)

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

4 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments