Configurare WireGuard per creare tunnel criptati è un task estremamente semplice ed ormai alla portata di tutti coloro che hanno anche solo un minimo di dimestichezza con Linux.
Abbiamo già introdotto, in un precedente post, le caratteristiche principali di WireGuard, di quanto sia sicuro e veloce, nel confronto con altri software per VPN.
Vogliamo qui addentrarci ad illustrare in dettaglio come configurare un server VPN con Wireguard in un Linux ed un Client anch’esso Linux per esplorare quanto può essere semplice installare, configurare ed attivare un canale VPN tra due punti arbitrari di una rete anche complessa.
Note su questo tutorial per installare WireGuard
Prima di iniziare sono opportune alcune informazioni di carattere generale, per meglio chiarire il contesto
- Il Client è un laptop Acer© con la distribuzione GNU Linux Ubuntu Desktop 22.04 LTS (x64)
- Il server è un bare-metal HP (2 ethernet) con una distribuzione Debian 10 (x64)
- L’interfaccia IP per WireGuard del Server è configurata con l’indirizzo IP 172.16.10.1/24
- L’interfaccia IP per WireGuard del Client è configurata con l’indirizzo IP 172.16.10.2/24
Al fine di descrivere al meglio l’intero contesto nel quale dimostrare l’utilizzo di WireGuard per instaurare una VPN tra Client e Server, discusso in questo tutorial, l’immagine seguente sarà sicuramente di grande aiuto.

L’immagine qui sopra descrive un’architettura di rete semplificata espressamente realizzata in laboratorio per lo scopo questo tutorial. Tuttavia possiamo facilmente immaginare che Client e Server si trovino collegati a due distinti punti della rete internet; per lo scopo di questo tutorial, il risultato finale non cambia.
Installare e configurare WireGuard Server
Passo 1 – Aggiornamento del sistema
Come di consueto, per installare il pacchetto WireGuard nel server, è opportuno prima di tutto aggiornare il sistema.
sudo apt update apt upgrade
Passo 2 – Preparazione per installare e configurare WireGuard
Avendo utilizzato Ubuntu 20.04 per il server, nel repository ufficiale di questa versione non è ancora disponibile i pacchetti per WireGuard. È quindi indispensabile impostare il repository corretto.
Per fare questo, bisognerà creare il file /etc/apt/sources.list.d/buster-backports.list
, utilizzando vi
o nano
ed aggiungere il seguente testo nel contenuto:
deb http://deb.debian.org/debian buster-backports main contrib non-free
Quindi eseguire nuovamente un update:
sudo apt update
Passo 3 – Installare i pacchetti di prima di installare WireGuard
Come per l’installazione di qualsiasi pacchetto, si dovrà utilizzare il comando apt
, come segue
sudo apt install wireguard
Passo 4 – Configurare WireGuard Server
Prima di tutto dovremo creare le chiavi pubblica, privata e pre-shared (PSK) per il server, che saranno utilizzate per la crittografia di WireGuard. Queste chiavi vanno create nella directory /etc/wireguard/
.
Nota bene che i permessi per la chiave pubblica, la chiave privata e la chiave pre-shared devono necessariamente essere impostati a 0600
. Diversamente, queste non potranno essere utilizzare da WireGuard, con l’ovvio risultato che il tunnel criptato non verrà creato.
Altro suggerimento importante: è bene utilizzare l’utente root
per fare queste operazioni ed inoltre essere posizionato direttamente all’interno della directory /etc/wireguard/
.
Generazione delle chiavi
Ovviamente, anche il Client avrà bisogno della sua chiave privata e della sua chiave pubblica
sudo -i cd /etc/wireguard/
Ora si possono finalmente generale le chiavi con la sequenza di comandi riportata qui di seguito:
UMASK_ORG=$(umask) # Salvo la 'umask' corrente umask 077 # Set proper umask # Imposto la nuov 'umask' wg genkey > privatekey # Creo la chiave privata wg pubkey < privatekey > publickey # creo la chiave pubblica wg genpsk > presharedkey # creo la PSK umask ${UMASK_ORG} # Ripristino la 'umask' originale
Verifica della corretta generazione delle chiavi:
ls -l privatekey publickey presharedkey cat privatekey cat publickey cat presharedkey
Configurare WireGuard su interfaccia wg0
La configurazione dell’interfaccia di wg0
di WireGuard si esegue editando con vi o nano il file /etc/wireguard/wg0.conf
, al quale si può aggiungere lo snippet di esempio riportato qui sotto:
## Set Up WireGuard VPN Server creando/editando il file /etc/wireguard/wg0.conf [Interface] ## L'indirizzo IP dell'intervaccia della VPM nel Server Address = 172.170.10.1/24 ## La porta UDP dove il server sarà in ascolto ListenPort = 51194 ## Questa è la chiave privata del server (i.e. /etc/wireguard/privatekey) PrivateKey = uLNUpKqMckMksej0wzly6D51G0C4GUWxAzjIZhGOXXI= ## Salva ed aggiorna questo file di configurazione quando di aggiunge un client SaveConfig = true [Peer] ## VPN client's public key (i.e. client /etc/wireguard/publickey PublicKey = 4H2TBgJQ1oJDx0BBhe5dl8N4+Ut4zJTLEwO8oq006yM= ## VPN client's Preshared key PSK (i.e. client /etc/wireguard/presharedkey) PresharedKey = fVt2EHGOTHZqyQhy6GRU7nve6HZhafZTKiw1ox4R5Ck= AllowedIPs = 172.170.10.2/32 Endpoint = 192.168.2.6:28431
Passo 5 – Impostazioni del Firewall
Questo passo è opzionale, e va eseguito solo se è stato attivato ufw
; ovvero, il Firewall di Ubuntu.
sudo ufw allow 51194/udp
Notare che è sempre consigliato l’utilizzo del firewall di Ubuntu in quanto ciò aumenta non di poco la sicurezza del server, esponendo esclusivamente i servizi strettamente indispensabili.
Passo 6 – Abilita ed avvia il servizio WireGuard
Ora che WireGuard è stato configurato, bisogna abilitare l’avvio automatico del servizio ad ogni avvio del sistema ed eventualmente avviarlo manualmente al momento.
Inizialmente abilito l’avvio automatico del servizio
sudo systemctl enable wg-quick@wg0
Avvio il servizio manualmente, senza riavviare il sistema
sudo systemctl start wg-quick@wg0
Controllo che il servizio sia correttamente in esecuzione
sudo systemctl status wg-quick@wg0
Verifico inoltre che l’interfaccia di WireGuard, che abbiamo chiamato wg0
sia correttamente istanziata
sudo wg show sudo ip a show wg0
Installare e Configurare WireGuard Client
Passo 7 – Aggiornamento del sistema Client
Passaggio identico a quanto già detto per l’installazione del server. Anche più semplice, in quanto i pacchetti per WireGuard sono già compresi nel repository standard di Ubuntu 22.04 LTS, quindi possiamo procedere direttamente con l’installazione:
sudo apt update apt upgrade sudo apt install -y wireguard
Passo 8 – Configurare WireGuard Client
La configurazione del Client è molto semplificata, tuttavia alcuni Step sono simili alla configurazione del server:
Generazione delle Chiavi
Anche per il Client è necessario generare le chiavi per la crittografia, anche se in questo caso dovremo generare solo la chiave privata e la chiave pubblica. La chiave pre-shared (PSK – Pre Shared Key) sarà quella generata durante la configurazione del, server per questo specifico Client (Peer).
Quindi, in questo caso, la procedura è decisamente semplificata, anche se valgono le stesse note e gli stessi suggerimenti adottati nella configurazione del server (utente root
, permessi dei file, eccetera):
sudo -i cd /etc/wireguard/ umask 077 # Set proper umask # Imposto la nuova 'umask' wg genkey > privatekey # Creo la chiave privata wg pubkey < privatekey > publickey # creo la chiave pubblica exit
Configurare WireGuard VPN su interfaccia wg0 del Client
Come per la configurazione del Server, la configurazione dell’interfaccia di wg0
di WireGuard del client si esegue editando con vi
o nano
il file /etc/wireguard/wg0.conf
, al quale si può aggiungere lo snippet di esempio riportato qui sotto:
[Interface] ## Questa è la chiave privata del Desktop/client PrivateKey = eOsvqw5QxcbDiz9mIThgFIgVbMs2RRedooAwk2ft+nQ= ## Questo è l'indirizzo IP del Desktop/client nella VPN Address = 172.170.10.2/24 [Peer] ## Chiave pubblica del Server (comunicata dal NetAdmin) PublicKey = bfsta5fCD8MmUeidCMXZKvEMvVB6h5312tzVwRPinEU= ## Chiave pre-shared del Server PresharedKey = fVt2EHGOTHZqyQhy6GRU7nve6HZhafZTKiw1ox4R5Ck= ## set Access Control List (ACL) AllowedIPs = 172.170.10.0/24,10.10.1.0/24 ## L'indirizzo IPv4/IPv6 e la porta UDP del server che chiude la VPN Endpoint = 192.168.2.6:51194 ## Keep Alive della connessione (in secondi) PersistentKeepalive = 20
Passo 9 – Avvio del Servizio VPN del Client
Diversamente da come abbiamo abilitato i servizi nel server per l’avio automatico al boot del sistema, per il Client è necessario fare una distinzione.
Potremmo non volere che si attivi una istanza di VPN dal nostro laptop ogni volta che questo viene acceso, ma dovremmo poter comunque attivare la VPN ogni qualvolta ne avremmo bisogno. Quindi abbiamo a disposizione 2 diversi modi di attivare e disattivare la VPN di WireGuard ed entrambi possono essere eseguiti a riga di comando, da una finestra terminale.
Per attivare la VPN del Client
Da una finestra terminale digitare il seguente comando:
wg-quick up wg0
oppure
sudo systemctl start wg-quick@wg0
Per disattivare la VPN del Client
Da una finestra terminale digitare il seguente comando:
wg-quick down wg0
oppure
sudo systemctl stop wg-quick@wg0
Test e verifiche finali
A conclusione della fase di configurazione di Server e Client, possiamo passare alla fase di test per verificare il corretto funzionamento della VPN tra il Client ed il server appena configurati. Per l’utilizzo della VPN WireGuard da Windows, puoi consultare l’articolo dedicato ai Tunnel criptati con Windows.
Nel Client Ubuntu 22.04 LTS (192.168.122.160
) è possibile innanzi tutto verificare lo stato del tunnel attualmente istanziato, con il seguente comando:
sudo wg show
Che restituirà un output molto simile a quello qui di seguito:
interface: wg0 public key: 4H2TBgJQ1oJDx0BBhe5dl8N4+Ut4zJTLEwO8oq006yM= private key: (hidden) listening port: 33265 peer: bfsta5fCD8MmUeidCMXZKvEMvVB6h5312tzVwRPinEU= preshared key: (hidden) endpoint: 192.168.2.6:51194 allowed ips: 172.170.10.0/24, 10.10.1.0/24 latest handshake: 1 second ago transfer: 36.01 KiB received, 41.39 KiB sent persistent keepalive: every 20 seconds
Successivamente, si può testare la raggiungibilità dell’host Server Ubuntu 20.04 LTS (10.10.1.27
), al capo opposto del tunnel eseguendo un semplice ping dell’indirizzo IP di quell’host dal Client Ubuntu 22.04:
ping -c 3 10.10.1.27
Che restituirà un output simile a quello mostrato qui di seguito
PING 10.10.1.27 (10.10.1.27) 56(84) bytes of data. 64 bytes from 10.10.1.27: icmp_seq=1 ttl=63 time=3.06 ms 64 bytes from 10.10.1.27: icmp_seq=2 ttl=63 time=3.11 ms 64 bytes from 10.10.1.27: icmp_seq=3 ttl=63 time=2.74 ms --- 10.10.1.27 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 2.741/2.968/3.109/0.162 ms
Per ispezionare la rotta tracciata dai pacchetti che dal Client raggiungono l’host 10.10.1.27 con il comando:
sudo traceroute -nI 10.10.1.27
Scopriremo che tutto il traffico dal Client 192.168.122.160 all’host 10.10.1.27 passa esclusivamente all’interno del tunnel, come mostrato dall’output del comando precedente:
traceroute to 10.10.1.27 (10.10.1.27), 30 hops max, 60 byte packets 1 172.170.10.1 2.437 ms 4.396 ms 4.424 ms 2 10.10.1.27 5.778 ms 6.685 ms 8.440 ms
che sono esattamente gli obbiettivi che volevamo raggiungere.
Conclusioni
Configurare una VPN con WireGuard, con Linux server ed un client linux è un task che può richiedere davvero pochi minuti. La connessione criptata che se ne ottiene mette al riparo da occhi indiscreti tutti i dati che transitano all’interno del canale cifrato.
In questo guida abbiamo visto un esempio di come impostare un server WireGuard in un ambiente Linux ed utilizzarlo da un Client anch’esso Linux, ma non è affatto indispensabile che Client e Server siano della stessa natura. È infatti molto comune incontrare implementazioni dove il server è realizzato in ambiente Linux, dove accedono Client di varia natura: iOS, Android, macOS, Windows, solo per citare alcuni dei più popolari.
WireGuard, come già detto, è infatti disponibile per numerosi sistemi operativi. Per gli utenti Windows che vogliono sperimentare subito le qualità del client possono iniziare ad utilizzare un Client WireGuard per Windows dal PC o dal Laptop, in pochi minuti.
CondividiDisclaimer
Questa pagina potrebbe contenere link di affiliazione. Gli acquisti o gli ordini che effettuerai tramite tali link possono generare commissioni che ci aiutano a sostenere questo sito web.