WireGuard è un protocollo VPN moderno che permette di configurare una connessione sicura su Linux in pochi minuti. Per configurare una WireGuard VPN su Linux, installa il pacchetto, genera le chiavi crittografiche, definisci il file di configurazione su server e client, e avvia il tunnel con systemctl. In 15 minuti ottieni una connessione stabile, veloce e crittografata.
| Aspetto | WireGuard | OpenVPN |
|—|—|—|
| Righe di codice | 4.000 | 100.000 |
| Handshake | < 100ms | > 1.000ms |
| File di config | ~10 righe | ~200 righe |
| Crittografia | Curve25519, ChaCha20 | AES, RSA |
OpenVPN su un VPS. 80ms di latenza. Configurazione di 200 righe. Un client che si disconnetteva ogni 30 minuti. WireGuard in produzione da 15 minuti ha risolto tutto e tre. Quando ho migrato la connettività remota di un ente sanitario pubblico da OpenVPN a WireGuard, i ticket per la VPN instabile si sono azzerati. Il 73% dei breach parte da credenziali rubate secondo il Verizon DBIR 2025, e avere un tunnel VPN affidabile riduce il rischio che gli utenti disabilitino la protezione per frustrazione. WireGuard è nel kernel Linux dalla versione 5.6 e gestisce il roaming in modo nativo: se cambi rete, il tunnel non cade.
Prerequisiti / Ambiente di test
Ti serve un server Linux (VPS o macchina locale) con kernel 5.6 o superiore e i permessi di root. Per questa guida ho usato Ubuntu 22.04 LTS come server e un client Linux. Ti servirà anche un client mobile per testare il QR code.
Installare WireGuard su server e client (configurare WireGuard VPN su Linux)
L’installazione richiede un solo pacchetto. Sui sistemi Debian e derivati:
sudo apt install wireguard
Su RHEL, CentOS o Fedora:
sudo dnf install wireguard-tools
Il modulo kernel è già incluso nelle distribuzioni moderne. Se usi un kernel personalizzato molto vecchio, verifica la presenza con modprobe wireguard. WireGuard gestisce circa 4.000 righe di codice, contro le 100.000 di OpenVPN, riducendo la superficie di attacco in modo drastico.
Generare le chiavi (privata e pubblica)
WireGuard non usa certificati X.509. Usa solo coppie di chiavi crittografiche. Genera le chiavi per il server:
wg genkey | tee privatekey | wg pubkey > publickey
Proteggi la chiave privata:
chmod 600 privatekey
Ripeti lo stesso processo sul client Linux. Avrai due coppie di chiavi: una per il server e una per il client. La chiave privata non lascia mai la macchina che la genera. La chiave pubblica va condivisa con la controparte.
Configurare il server
Crea il file /etc/wireguard/wg0.conf sul server. Inserisci la chiave privata del server e la chiave pubblica del client.
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <CHIAVE_PRIVATA_SERVER>
# Abilita il NAT per i client
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <CHIAVE_PUBBLICA_CLIENT>
AllowedIPs = 10.0.0.2/32
Sostituisci eth0 con l’interfaccia di rete principale del tuo server (verifica con ip a). Abilita l’IP forwarding sul server, altrimenti il traffico non verrà inoltrato:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
Configurare il client Linux
Sul client, crea il file /etc/wireguard/wg0.conf:
[Interface]
Address = 10.0.0.2/24
PrivateKey = <CHIAVE_PRIVATA_CLIENT>
DNS = 1.1.1.1
[Peer]
PublicKey = <CHIAVE_PUBBLICA_SERVER>
Endpoint = <IP_PUBBLICO_SERVER>:51820
AllowedIPs = 10.0.0.0/24
L’indirizzo IP pubblico del server deve essere raggiungibile dal client. La direttiva AllowedIPs definisce quali destinazioni passano attraverso il tunnel. Con 10.0.0.0/24 passano solo gli indirizzi interni della VPN.
Leggi anche: Hardening SSH Linux: Guida Completa 2026 (10 Impostazioni Critiche)
Configurare il client mobile (QR code)
Per i dispositivi Android o iOS, genera un QR code dalla configurazione del client. Installa il tool:
sudo apt install qrencode
Crea un file di testo con la configurazione del client (la stessa vista sopra) e genera il QR code:
qrencode -t ansiutf8 < client_mobile.conf
Inquadra il codice con l’app WireGuard ufficiale sullo smartphone. Il tunnel si configura in 5 secondi senza digitare nulla.
Avviare e testare il tunnel
Avvia il tunnel sul server:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
Fai lo stesso sul client Linux. Verifica lo stato del tunnel:
sudo wg show
Controlla che l’handshake sia avvenuto. Se vedi un timestamp sotto Latest handshake, il tunnel è attivo. Fai un test di connettività:
ping 10.0.0.1
Se ricevi risposta, la tua WireGuard VPN su Linux è operativa. Il traffico verso la subnet 10.0.0.0/24 passa crittografato.
Leggi anche: UFW Firewall Ubuntu: Configurazione Completa dalla A alla Z (2026)
Far passare tutto il traffico via VPN (full tunnel)
Per instradare tutto il traffico di navigazione del client attraverso la VPN, modifica la direttiva AllowedIPs nel file di configurazione del client:
AllowedIPs = 0.0.0.0/0
Questo instrada ogni connessione attraverso il server. Assicurati che il server abbia il NAT configurato correttamente (come visto nella sezione PostUp del server) e che il firewall permetta il traffico in uscita. Imposta un DNS valido nella sezione [Interface] del client, come DNS = 1.1.1.1, per evitare perdite di risoluzione DNS.
Aggiungere più client
Ogni client necessita di una coppia di chiavi univoca e di un indirizzo IP dedicato. Genera chiavi sul nuovo client, poi aggiungi un blocco [Peer] sul server:
[Peer]
PublicKey = <CHIAVE_PUBBLICA_CLIENT_2>
AllowedIPs = 10.0.0.3/32
Sul nuovo client, configura Address = 10.0.0.3/24. Riavvia l’interfaccia sul server per applicare le modifiche. Per evitare di far cadere le connessioni attive, ricarica la configurazione a caldo:
sudo wg syncconf wg0 <(wg-quick strip wg0)
Leggi anche: Fail2ban su Linux: Configurazione Completa e Sicurezza SSH
Troubleshooting
Se il tunnel non si stabilisce, controlla questi punti.
- Nessun handshake: Verifica che l’IP pubblico e la porta del server siano corretti nel client. Controlla che il firewall del server permetta il traffico UDP sulla porta 51820.
- Handshake presente ma niente connettività: Assicurati che l’IP forwarding sia attivo sul server (
sysctl net.ipv4.ip_forward). Controlla le regole iptables per il NAT. - MTU errato: Se il ping funziona ma il browsing no, riduci la MTU. Aggiungi
MTU = 1360nella sezione[Interface]del client. - Client disconnesso dopo cambio rete: WireGuard gestisce il roaming in modo nativo. Se il problema persiste, verifica che il client invii dati per mantenere attivo lo stato sul firewall stateful del server.
Per monitorare il traffico in tempo reale e verificare dove si blocca:
sudo tcpdump -i wg0
Consulta la documentazione ufficiale per approfondire i parametri avanzati: WireGuard Official Documentation.
FAQ — Domande Frequenti
Come faccio a configurare WireGuard VPN su Linux dietro un NAT?
Se il server è dietro NAT, devi configurare il port forwarding sulla porta UDP 51820 verso l’IP interno del server. Il client deve puntare all’IP pubblico del router. WireGuard funziona bene anche con NAT traversale grazie al supporto UDP.
Qual è la differenza tra WireGuard e OpenVPN per la VPN su Linux?
WireGuard ha una base di codice di 4.000 righe contro le 100.000 di OpenVPN. Offre handshake più veloci, latenza inferiore e configurazione più semplice. OpenVPN rimane più diffuso per compatibilità legacy e supporto TCP, ma WireGuard è superiore per prestazioni.
Posso usare WireGuard per accedere alla rete locale aziendale?
Sì. Sul server, aggiungi la subnet locale (es. 192.168.1.0/24) nella direttiva AllowedIPs del client e configura le rotte sul server per inoltrare il traffico dalla VPN alla LAN.
WireGuard è sicuro per la produzione?
Sì. Usa crittografia moderna (Curve25519, ChaCha20, Poly1305) e ha superato audit di sicurezza indipendenti. La superficie di attacco è minima rispetto a soluzioni legacy.
Come gestisco il DNS su più client WireGuard?
Specifica un server DNS nella sezione [Interface] di ogni client. Se usi un resolver interno, inserisci il suo IP. Per ambienti complessi, usa resolvconf o systemd-resolved per gestire le interfacce dinamiche.
Conclusioni con takeaway operativi
WireGuard risolve il problema della complessità delle VPN legacy. La configurazione richiede 10 righe contro le 200 di OpenVPN. L’handshake avviene in meno di 100ms e il roaming tra reti non fa cadere il tunnel.
Tre takeaway operativi:
- Usa chiavi a 256 bit e disabilita l’accesso SSH password-based per proteggere il server VPN.
- Abilita il full tunnel (
AllowedIPs = 0.0.0.0/0) per i client mobili per evitare perdite di traffico su reti non sicure. - Gestisci i client aggiuntivi con indirizzi IP statici e ricarica la configurazione a caldo con
wg syncconf.
Configura WireGuard sul tuo VPS oggi. In 15 minuti avrai una VPN personale stabile e veloce.
Aggiornato: Aprile 2026