WireGuard, come creare un server VPN a casa o in azienda

Breve guida alla configurazione di un server VPN WireGuard e al collegamento a distanza da un dispositivo Android.

WireGuard è un protocollo e un programma opensource per approntare e gestire connessioni VPN. Il vantaggio di WireGuard, è che chiunque può configurare un server VPN in pochi minuti, indipendentemente dal dispositivo e dal sistema operativo utilizzati. Come si può verificare a questo indirizzo sono molteplici le piattaforme supportate da WireGuard.
Ciò significa, ad esempio, che è possibile trasformare agevolmente un Raspberry Pi in un server VPN compatto, silenzioso e sempre attivo.

WireGuard basa il suo funzionamento su appena 4.000 righe di codice contro le 120.000 di OpenVPN e l’algoritmo crittografico utilizzato contribuisce a migliorare significativamente le performance.
Il principale sviluppatore di WireGuard, Jason Donenfeld, ha infatti realizzato la sua API crittografica Zinc non apprezzando particolarmente il sottosistema crittografico integrato in Linux. Donenfeld, nonostante le ritrosie iniziali di una parte della comunità, sembra aver avuto ragione: Linus Torvalds ha infatti pubblicamente appoggiato l’idea tanto che a questo punto è altamente probabile che WireGuard possa divenire il nuovo standard adottato a livello di kernel Linux.

Supponendo di installare e configurare il server VPN WireGuard su Debian (i passaggi sono simili per l’installazione su Raspberry Pi), basti pensare che il software si installa in pochi semplici passaggi effettuabili da riga di comando.

In primis basta aggiornare l’installazione di Debian con i comandi che seguono da finestra del terminale:

su -
apt-get update
apt-get dist-upgrade

Successivamente basterà digitare ciò che segue per configurare il repository in cui si trova attualmente WireGuard e avviare l’installazione del programma:

echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
apt update
apt install wireguard

Se venisse installato un nuovo kernel, bisognerà assicurarsi di riavviare la macchina o il dispositivo successivamente all’installazione altrimenti il caricamento di WireGuard non andrà a buon fine.
WireGuard non fa ancora parte delle normali versioni di Debian quindi con il primo comando visto in precedenza si potrà aggiungere una ulteriore sorgente per l’installazione dei pacchetti. Il nome “unstable” indica già che WireGuard è destinato ad essere inserito nelle future versioni di Debian.

Il secondo comando visto in precedenza permette di istruire Debian così da installare i pacchetti dalla sorgente unstable solo se non disponibili nel ramo “stable”.

Per automatizzare l’installazione di WireGuard sulle principali distribuzioni Linux, è possibile usare in alternativa questo script.

I passaggi seguenti consistono nel configurare l’intervallo di indirizzi IP utilizzati dalla VPN di WireGuard e assegnati ai dispositivi client di volta in volta connessi. Si può fare modificando il file di configurazione per l’interfaccia virtuale wg0 usata da WireGuard:

nano /etc/wireguard/wg0.conf

All’interno del file si potrà ad esempio inserire quanto segue premendo poi CTRL+O quindi CTRL+X:

[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 1194

La porta 1194 è quella su cui la VPN di WireGuard si porrà in ascolto in attesa dei tentativi di connessione in ingresso.

A questo punto si può generare la chiave privata che sarà utilizzata durante lo scambio dei dati tra client e server (e viceversa) durante l’utilizzo del tunnel crittografato:

wg genkey

La chiave così generata andrà copiata nel file di configurazione wg0.conf. Si otterrà quindi un file dal contenuto simile:

[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 1194
PrivateKey = incollare_chiave_privata

Alla riga di comando digitare quindi ls /sys/class/net per scoprire il nome dell’interfaccia di rete principale usata da Debian (nel nostro caso, enp0s3).

Aprire di nuovo il file di configurazione con il comando nano /etc/wireguard/wg0.conf e aggiungere:

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE

Al posto di enp0s3 sostituire eventualmente il nome corretto dell’interfaccia di rete.

Tutto qui. A questo punto, per avviare il server VPN di WireGuard basterà digitare il comando wg-quick up wg0.

Per fare in modo che WireGuard si avvii al boot del dispositivo o della macchina, è sufficiente usare i seguenti due comandi:

systemctl start wg-quick@wg0
systemctl enable wg-quick@wg0

Lo stato del server WireGuard può essere verificato in qualunque momento digitando wg show o semplicemente wg.

Configurare WireGuard sui dispositivi client

Abbiamo già detto che WireGuard può essere installato su tantissimi dispositivi diversi, anche sugli smartphone Android e iOS (vedere questa pagina).

Supponiamo di volerci collegare a distanza al server WireGuard da un terminale Android, con la possibilità di navigare dall’IP pubblico della VPN e di accedere in sicurezza ai dispositivi connessi alla LAN.

Per procedere si dovrà innanzi tutto scaricare il client Android di WireGuard e installarlo sul dispositivo mobile.

Lato server bisognerà creare una configurazione per il dispositivo client:

1) Copiare la chiave pubblica del server digitando il comando wg show (Public key)
2) Generare una chiave privata per il client Android da configurare usando il comando wg genkey. Copiare anche tale chiave.
3) Creare un file di configurazione per il client Android: nano client.conf
4) Incollare nel file client.conf quanto segue:

[Interface]
PrivateKey = incollare_la_chiave_privata_generata_al_punto_2
Address = 10.66.66.2/24,fd42:42:42::2/64
[Peer]
PublicKey = incollare_la_chiave_pubblica_del_server
AllowedIPs = 10.66.66.1/32,fd42:42:42::1/128
Endpoint = incollare_IP_pubblico_del_server:1194

5) Salvare il file premendo CTRL+O quindi CTRL+X.

6) Installare il modulo per la generazione di codici QR a partire da file di testo:

apt install -y qrencode
qrencode -t ansiutf8 < client.conf

7) Nell’app Android di WireGuard, toccare l’icona “+” in basso a destra, scegliere Create from QR code e inquadrare il codice QR generato su Debian. Verrà automaticamente configurato il profilo di connessione al server VPN.

8) Lato server, digitare di nuovo nano /etc/wireguard/wg0.conf e aggiungere quanto segue:

[Peer]
PublicKey = incollare_IP_pubblico_visualizzato_sul_client_Android
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128

9) A questo punto, modificando la configurazione di WireGuard lato client (icona raffigurante una piccola matita) e indicando 0.0.0.0/0, ::/0 nel campo Allowed IPs (sezione Peer) si potrà accedere a tutte le risorse condivise nella rete locale, attraverso il server VPN e navigare con l’IP pubblico del server remoto.

Ti consigliamo anche

Link copiato negli appunti