Come configurare Wireguard VPN su Linux

Una fotografia di un laptop con un monitor desktop accanto.

Wireguard è un potente demone di rete privata virtuale (VPN) open source che può funzionare sia su dispositivi desktop che mobili. Fornisce un’alternativa veloce e leggera alle soluzioni VPN tradizionali come IPsec e OpenVPN. Qui ti mostriamo come installare Wireguard e creare una semplice configurazione VPN utilizzando tre macchine Linux.

Indice dei contenuti

  • Perché usare Wireguard come soluzione VPN?
  • Ottenere Wireguard
  • Configurare il server Wireguard
  • Configurare e connettere il client Wireguard
  • Aggiungere un secondo client al server
  • Testare la rete Wireguard

Perché usare Wireguard come soluzione VPN?

Uno dei principali punti di forza di Wireguard è che è un demone VPN veloce e leggero. A differenza delle soluzioni tradizionali, Wireguard non aggiunge molto overhead alla tua rete. Questo si traduce in una latenza inferiore e un alto tasso di throughput complessivo tra i tuoi nodi.

Un terminale che mostra un test iperf3 tra due nodi Wireguard che mostrano un alto throughput.

Un’altra caratteristica chiave di Wireguard è che è un modulo all’interno del kernel Linux. Questo consente di funzionare senza occupare risorse di sistema aggiuntive dal tuo computer, rendendolo una scelta ideale per il deployment su dispositivi a bassa potenza e SOC.

Un terminale che mostra Wireguard caricato sul kernel Linux.

Infine, Wireguard sfrutta anche standard crittografici moderni e pratiche di sviluppo. Ha anche subito molte verifiche formali, che confermano la correttezza del codice di Wireguard, le garanzie di sicurezza e la capacità di resistere agli attacchi.

Nota a margine: non sei ancora convinto di Wireguard? Scopri come Wireguard si confronta con OpenVPN.

Ottenere Wireguard

Il primo passo per configurare Wireguard su Linux è scaricare i suoi strumenti principali dal repository della tua distribuzione. Questo ti consente di controllare il modulo del kernel Wireguard integrato utilizzando comandi in userspace.

Per installare gli strumenti principali su Ubuntu e Debian, esegui il seguente comando:

sudo apt install wireguard wireguard-tools

In Fedora, puoi utilizzare il gestore pacchetti dnf:

sudo dnf install wireguard-tools

Per Arch Linux, puoi eseguire pacman per ottenere gli strumenti principali di Wireguard:

sudo pacman -S wireguard-tools

Conferma di aver installato correttamente gli strumenti Wireguard caricando il suo schermo di aiuto:

wg -h

Un terminale che mostra il menu di aiuto per lo strumento Wireguard in userspace.

Configurare il server Wireguard

Assunzione: Questo articolo presume che tu stia installando il server Wireguard su un sistema Linux con un indirizzo IPv4 accessibile pubblicamente. Le istruzioni funzioneranno comunque su un server dietro un NAT, ma non troverà nodi al di fuori della sua subnet.

Con il toolkit principale di Wireguard sulle tue macchine Linux, puoi ora configurare il nodo server della tua VPN. Questo servirà come gateway internet per i tuoi nodi client nella rete.

Inizia navigando nella directory di configurazione di Wireguard e imposta le sue autorizzazioni predefinite su “solo root:”

cd/etc/wireguard  
sudo umask 077

Nota: alcuni sistemi potrebbero impedirti di entrare nella cartella “/etc/wireguard” come utente normale. Per risolvere, passa all’utente root utilizzando sudo -s.

Genera la chiave pubblica e privata per il tuo server Wireguard:

sudo sh -c 'wg genkey | tee /etc/wireguard/server-private-key | wg pubkey > /etc/wireguard/server-public-key'

Crea il file di configurazione del tuo server utilizzando il tuo editor di testo preferito:

sudo nano /etc/wireguard/wg0.conf

Incolla il seguente blocco di codice all’interno del file di configurazione del tuo server:

[Interface]  
PrivateKey= INCOLLA-LA-TUA-CHIAVE-PRIVATA-SERVER-QUI  
Address= 10.0.0.1/32  
ListenPort= 60101  
PostUp= iptables -t nat -I POSTROUTING -o INTERFACCIA-NETWORK-QUI -j MASQUERADE  
PostDown= iptables -t nat -D POSTROUTING -o INTERFACCIA-NETWORK-QUI -j MASQUERADE

Apri una nuova sessione del terminale, quindi stampa la chiave privata del tuo server Wireguard:

sudo cat /etc/wireguard/server-private-key

Copia la chiave privata del tuo server negli appunti.

Un terminale che mostra il processo di copia della chiave privata del server su Ubuntu.

Sostituisci il valore della variabile PrivateKey con la chiave negli appunti.

Un terminale che mostra la chiave privata del server nel file di configurazione Wireguard del server.

Trova l’interfaccia di rete che ha accesso a internet utilizzando il comando ip:

ip route get 8.8.8.8

Imposta il valore del flag -o su entrambe le variabili PostUp e PostDown sull’interfaccia con accesso a internet, quindi salva il tuo file di configurazione.

Un terminale che mostra il nome del dispositivo corretto nel file di configurazione del server Wireguard.

Apri il file “/etc/sysctl.conf” del server utilizzando il tuo editor di testo preferito:

sudo nano /etc/sysctl.conf

Scorri verso il basso fino alla riga che contiene net.ipv4.ip_forward=1, quindi rimuovi il simbolo di cancelletto (#) davanti ad essa.

Un terminale che evidenzia la posizione dell'opzione di forwarding IPv4 in sysctl.conf.

Ricarica la tua nuova configurazione sysctl eseguendo: sudo sysctl -p.

FYI: Wireguard non è l’unica soluzione VPN che puoi eseguire su Linux. Scopri come creare la tua VPN utilizzando OpenVPN.

Configurare e connettere il client Wireguard

A questo punto, hai ora un server Wireguard configurato correttamente senza alcun peer. Per utilizzarlo, devi configurare e connettere il tuo primo client Wireguard.

Naviga nella directory di configurazione Wireguard del tuo sistema client e imposta le sue autorizzazioni predefinite:

cd/etc/wireguard  
sudo umask 077

Genera la coppia di chiavi Wireguard del tuo client utilizzando il seguente comando:

sudo sh -c 'wg genkey | tee /etc/wireguard/client1-private-key | wg pubkey > /etc/wireguard/client1-public-key'

Crea il file di configurazione Wireguard del client utilizzando il tuo editor di testo preferito:

sudo nano /etc/wireguard/wg0.conf

Incolla il seguente blocco di codice all’interno del file di configurazione del tuo client:

[Interface]  
PrivateKey= INCOLLA-LA-TUA-CHIAVE-PRIVATA-CLIENT1-QUI  
Address= 10.0.0.2/32  
ListenPort= 60101  
  
[Peer]  
PublicKey= INCOLLA-LA-TUA-CHIAVE-PUBBLICA-SERVER-QUI  
AllowedIPs= 0.0.0.0/0  
Endpoint= INCOLLA-L'INDIRIZZO-IP-DELLA-TUA-SERVER-QUI:60101  
PersistentKeepalive= 25

Sostituisci la variabile PrivateKey con la chiave privata del tuo client.

Un terminale che evidenzia la chiave privata per il primo client Wireguard.

Apri la sessione del terminale del tuo server Wireguard, quindi stampa la sua chiave pubblica:

sudo cat /etc/wireguard/server-public-key

Imposta il valore della variabile PublicKey sulla chiave pubblica del tuo server.

Un terminale che evidenzia la chiave pubblica del server Wireguard nel file di configurazione del secondo client.

Cambia la variabile Endpoint con l’indirizzo IP del tuo server Wireguard.

Un terminale che evidenzia l'indirizzo IP per il server Wireguard.

Salva il tuo file di configurazione, quindi utilizza il comando wg-quick per avviare il client Wireguard:

sudo wg-quick up wg0

Un terminale che mostra il processo di avvio del demone client Wireguard.

Nota: questo comando disabiliterà la connettività di rete del tuo client fino a quando non avvii il server Wireguard. Per tornare alla tua rete originale, esegui sudo wg-quick down wg0.

Collegare il server Wireguard al client

Vai alla sessione del terminale del tuo server Wireguard, quindi apri il suo file di configurazione:

sudo nano /etc/wireguard/wg0.conf

Incolla il seguente blocco di codice dopo la sezione [Interface]:

[Peer]  
PublicKey= INCOLLA-LA-TUA-CHIAVE-PUBBLICA-CLIENT1-QUI  
AllowedIPs= 10.0.0.2/32  
PersistentKeepalive= 25

Imposta la variabile PublicKey sulla chiave pubblica del tuo client Wireguard.

Un terminale che mostra la posizione del blocco [Peer] e evidenzia la chiave pubblica del client.

Nota: puoi ottenere la chiave pubblica eseguendo sudo cat /etc/wireguard/client1-public-key sulla tua macchina client.

Salva il file di configurazione, quindi esegui il seguente comando per avviare il servizio Wireguard sul tuo server:

sudo wg-quick up wg0

Aggiungere un secondo client al server

Una caratteristica chiave di ogni servizio VPN è che può collegare insieme più macchine provenienti da reti diverse. Questo è utile se hai computer in diverse posizioni o vuoi ospitare un server di gioco privato per i tuoi amici.

Per fare questo in Wireguard, devi creare un file di configurazione per una nuova interfaccia VPN sul tuo server. Il modo più semplice per farlo è copiare la tua attuale configurazione del server e dare alla copia un nuovo nome:

sudo cp /etc/wireguard/wg0.conf /etc/wireguard/wg1.conf

Apri il tuo nuovo file di configurazione utilizzando il tuo editor di testo preferito:

sudo nano /etc/wireguard/wg1.conf

Imposta la variabile ListenPort su 60102. Fare ciò impedirà eventuali collisioni di porta tra le interfacce VPN wg0 e wg1.

Un terminale che evidenzia la variabile ListenPort modificata per la seconda interfaccia Wireguard.

Vai alla sezione [Peer] e cambia la variabile AllowedIPs da “10.0.0.2/32” a “10.0.0.3/32”, quindi salva il tuo file di configurazione.

Un terminale che evidenzia la variabile AllowedIPs modificata per il secondo client Wireguard.

Configurare il secondo client Wireguard

Accedi alla tua seconda macchina, quindi prepara la tua directory di configurazione Wireguard:

cd/etc/wireguard  
sudo umask 077

Genera una nuova coppia di chiavi Wireguard utilizzando il seguente comando:

sudo sh -c 'wg genkey | tee /etc/wireguard/client2-private-key | wg pubkey > /etc/wireguard/client2-public-key'

Crea un nuovo file di configurazione utilizzando il tuo editor di testo preferito:

sudo nano /etc/wireguard/wg0.conf

Incolla il seguente blocco di codice all’interno del tuo nuovo file di configurazione:

[Interface]  
PrivateKey= INCOLLA-LA-TUA-CHIAVE-PRIVATA-CLIENT2-QUI  
Address= 10.0.0.3/32  
ListenPort= 60102  
  
[Peer]  
PublicKey= INCOLLA-LA-TUA-CHIAVE-PUBBLICA-SERVER-QUI  
AllowedIPs= 0.0.0.0/0  
Endpoint= INCOLLA-L'INDIRIZZO-IP-DELLA-TUA-SERVER-QUI:60102  
PersistentKeepalive= 25

Imposta la variabile PrivateKey sulla chiave privata della tua seconda macchina, quindi cambia la variabile PublicKey sulla chiave pubblica del tuo server.

Sostituisci la variabile Endpoint con l’indirizzo IP del tuo server, seguito da “:60102.”

Salva il tuo file di configurazione, quindi avvia il client Wireguard della seconda macchina:

sudo wg-quick up wg0

Collegare il secondo client al server Wireguard

Accedi di nuovo al tuo server Wireguard, quindi apri la configurazione dell’interfaccia VPN per il tuo secondo client:

sudo nano /etc/wireguard/wg1.conf

Scorri verso il basso fino alla sezione [Peer], quindi sostituisci la variabile PublicKey con la chiave pubblica del tuo secondo client.

Un terminale che evidenzia la chiave pubblica del secondo client all'interno del file di configurazione wg1 del server.

Salva il tuo file di configurazione, quindi avvia la seconda interfaccia VPN utilizzando il comando wg-quick:

sudo wg-quick up wg1

Conferma che i tuoi primi e secondi client Wireguard appaiano correttamente sul tuo server eseguendo wg.

Un terminale che mostra i due nodi client che comunicano con il server Wireguard.

Testare la rete Wireguard

Con sia il tuo server che i client sulla rete Wireguard, puoi ora testare la connettività e la latenza tra i tuoi nodi. Per fare ciò, assicurati di avere installati gli strumenti di diagnostica di rete sul tuo sistema:

sudo apt install net-tools curl

In Fedora, devi solo installare curl poiché viene già fornito con gli strumenti di rete pronti all’uso:

sudo dnf install curl

Per Arch Linux, puoi usare pacman per installare gli strumenti di rete e curl:

sudo pacman -S traceroute curl

Inizia tracciando il percorso di un pacchetto tra due client. Il seguente mostrerà come un pacchetto IP va da “10.0.0.2” a “10.0.0.3:”

traceroute 10.0.0.3

Controlla se uno dei tuoi nodi può accedere a internet pubblico pingando un indirizzo IP comune:

ping -c 5 8.8.8.8

Un terminale che mostra la latenza dalla rete Wireguard a un sito esterno.

Infine, conferma che i tuoi nodi condividano lo stesso indirizzo IP pubblico con il tuo server Wireguard:

curl ipinfo.io/ip

Un terminale che evidenzia l'indirizzo IP esterno simile tra tre nodi Wireguard.

Imparare a configurare una rete Wireguard su Linux è il primo passo per esplorare il mondo affascinante delle VPN. Fai un tuffo profondo e guarda le nostre scelte per i migliori fornitori di VPN focalizzati sulla sicurezza che puoi ottenere oggi.

Crediti immagine: Kari Shea tramite Unsplash e Wikimedia Commons. Tutte le modifiche e gli screenshot di Ramces Red.