Vai al contenuto principale
50% di sconto tutti i piani, tempo limitato. A partire da $2.48/mo
12 min left
Sicurezza e rete

Come configurare WireGuard VPN su un VPS

Pius Bodenmann Di Pius Bodenmann 12 min di lettura Aggiornato da Mir 12d ago
WireGuard VPN tunnel active on an Ubuntu VPS terminal and a phone client

Una VPN WireGuard self-hosted offre al tuo portatile e al tuo telefono un percorso cifrato verso un server che controlli tu. È utile quando vuoi un IP di uscita stabile, un accesso sicuro su Wi-Fi non affidabili o una rotta privata verso un'altra rete. Non ti rende anonimo: i siti web vedono comunque un solo indirizzo del VPS e il provider di hosting continua a gestire la rete sottostante.

Questa guida costruisce una VPN IPv4 full-tunnel su Ubuntu Server. Installerai WireGuard, genererai chiavi con permessi restrittivi, abiliterai il routing, aggiungerai regole di firewall e NAT, collegherai client desktop e mobili e verificherai il tunnel. Lo stesso schema può supportare IPv6, ma solo dopo che il VPS dispone di spazio IPv6 instradato e hai configurato separatamente il forwarding e le regole firewall IPv6.

Che cos'è WireGuard?

WireGuard è un protocollo VPN moderno e multipiattaforma, insieme alla sua implementazione, che trasporta pacchetti IP cifrati su UDP. La specifica del protocollo WireGuard definisce un insieme fisso di primitive crittografiche, tra cui ChaCha20-Poly1305, Curve25519, BLAKE2s, SipHash24 e HKDF. Questo impianto volutamente ridotto rende la configurazione e l'audit più semplici rispetto ai protocolli con molte cipher suite intercambiabili.

WireGuard non ha un sistema centrale di account né una rubrica utenti integrata. Ogni dispositivo è un peer con la propria coppia di chiavi, il proprio indirizzo nel tunnel e le proprie regole AllowedIPs. Su un VPS di solito un peer fa da gateway verso internet, mentre portatili e telefoni avviano le connessioni verso di esso.

Perché usare WireGuard su un VPS?

  • Modello peer semplice: Ogni dispositivo riceve una coppia di chiavi e una voce peer.
  • Superficie di attacco ridotta: WireGuard adotta un protocollo compatto e una suite crittografica fissa, invece di esporre un lungo elenco di opzioni legacy.
  • Buone prestazioni: L'integrazione nel kernel su Linux e una crittografia efficiente possono garantire un throughput elevato, anche se il risultato dipende comunque da CPU, capacità di rete, latenza e dimensione dei pacchetti.
  • Client multipiattaforma: Sono disponibili client ufficiali per Windows 10 e 11, macOS, Android e iOS, mentre Linux e diversi sistemi BSD offrono strumenti o pacchetti nativi.
  • Roaming: Un peer può cambiare rete e indirizzo IP di origine senza ricevere una nuova identità WireGuard; il server apprende l'ultimo endpoint autenticato.
  • Controllo del routing chiaro: AllowedIPs determina sia quali destinazioni passano dal tunnel sia quali indirizzi del tunnel appartengono a ciascun peer.

Letture correlate: la guida Cloudzy al VPS per VPN. Per installazioni più datate, vedi la guida Cloudzy alla configurazione di PPTP; non scegliere PPTP per una nuova VPN in cui la sicurezza conta.

Salta l'installazione manuale: WireGuard con un clic

Se non hai una formazione tecnica, o preferisci non occuparti tu dell'installazione, Cloudzy offre un deployment di WireGuard VPN con un clic. Il resto di questa guida tratta la costruzione manuale; questa sezione tratta la scorciatoia.

  1. Accedi al pannello di controllo Cloudzy.
  2. Seleziona WireGuard dall'elenco delle applicazioni.
  3. Crea un VPS nella località che preferisci con il piano che vuoi. Basta una macchina Ubuntu con specifiche di base.

Quando il VPS è pronto, accedi ed esegui il comando seguente per visualizzare la configurazione:

cat client.conf

Vedrai qualcosa di simile:

Terminal output of cat client.conf on a one-click WireGuard VPS, showing the Interface and Peer blocks with the keys and endpoint redacted

Usa quella configurazione per creare un nuovo tunnel nel client WireGuard sul tuo PC e la connessione è pronta. Se invece preferisci capire ogni singolo pezzo, o ti serve uno schema che l'immagine con un clic non copre, prosegui con la costruzione manuale qui sotto.

Come configurare WireGuard su Ubuntu

Six-step WireGuard setup cycle around a VPS: install, generate keys, configure wg0 with 10.8.0.1/24, enable forwarding between wg0 and eth0, add firewall and NAT rules on UDP 51820, then start and verify the interface

I comandi seguenti sono pensati per una release attuale di Ubuntu Server. Eseguili via SSH con un utente dotato di sudo. Tieni aperta la sessione SSH finché il firewall non è confermato e, se il tuo provider lo consente, crea prima uno snapshot del VPS.

Prerequisiti

  • Un VPS Ubuntu con indirizzo IPv4 pubblico
  • Un account non root con accesso sudo
  • Accesso SSH e i dati della console di ripristino del provider VPS
  • Un dispositivo client con l'app ufficiale WireGuard o gli strumenti da riga di comando

Non ti serve un secondo server Ubuntu. Il client può essere un PC Windows, un Mac, un portatile Linux, un telefono Android o un iPhone.

Passaggio 1: installare WireGuard

sudo apt update
sudo apt install wireguard -y

Verifica che gli strumenti siano disponibili:

wg --version

Passaggio 2: generare le chiavi del server in sicurezza

Crea la directory di WireGuard e genera la coppia di chiavi con una umask restrittiva. La chiave privata non va mai copiata su un client né pubblicata nei log.

sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'

Mostra le chiavi quando devi incollarle nei file di configurazione:

sudo cat /etc/wireguard/server.key
sudo cat /etc/wireguard/server.pub

Passaggio 3: creare la configurazione del server

Apri la configurazione dell'interfaccia:

sudo nano /etc/wireguard/wg0.conf

Incolla il blocco seguente e sostituisci SERVER_PRIVATE_KEY con la chiave privata del passaggio precedente:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

La rete del tunnel 10.8.0.0/24 è solo un esempio. Scegli un altro intervallo privato se si sovrappone a una rete domestica, aziendale o cloud che devi raggiungere. Non aggiungere SaveConfig = true: può riscrivere il file allo spegnimento dell'interfaccia e cancellare le modifiche fatte a mano.

sudo chmod 600 /etc/wireguard/wg0.conf

Passaggio 4: abilitare il forwarding IPv4

Il VPS deve instradare i pacchetti tra wg0 e la sua interfaccia di rete pubblica. Metti l'impostazione in un file sysctl dedicato:

sudo nano /etc/sysctl.d/70-wireguard-routing.conf
net.ipv4.ip_forward = 1

Applica e verifica:

sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf
sysctl net.ipv4.ip_forward

Questo segue il modello di routing descritto nella guida al gateway WireGuard di Ubuntu. IPv6 richiede un prefisso IPv6 instradato, indirizzi di tunnel separati, forwarding IPv6 e regole firewall IPv6; non inviare il traffico del client a ::/0 finché quel percorso non è completo.

Passaggio 5: aggiungere regole di firewall e NAT

Individua il nome dell'interfaccia pubblica del VPS. Nell'output qui sotto, osserva il valore dopo dev; nomi comuni sono eth0, ens3 ed enp1s0.

ip route show default

Riapri wg0.conf e aggiungi le righe seguenti sotto [Interface]. Sostituisci eth0 ovunque se la tua interfaccia pubblica ha un altro nome:

PostUp = iptables -I FORWARD 1 -i %i -o eth0 -j ACCEPT; iptables -I FORWARD 1 -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Se UFW è attivo, consenti SSH prima di toccarne lo stato, poi apri la porta UDP di WireGuard:

sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw status

Se UFW è attualmente disattivato e vuoi abilitarlo, verifica prima che esista la regola OpenSSH. Non disattivare e riattivare UFW via SSH solo per applicare queste regole: aggiunge un rischio di lockout del tutto evitabile.

Passaggio 6: avviare l'interfaccia WireGuard

sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show

Se il servizio fallisce, esegui journalctl prima di modificare qualsiasi altra cosa:

sudo journalctl -u wg-quick@wg0 -n 50 --no-pager

Aggiungere un client WireGuard

A VPS at 10.8.0.1/32 holding separate peer entries for a laptop, tablet, and phone, each with its own keypair and /32 tunnel address, its private key staying on the device, and a QR code marked as containing a private key

Ogni dispositivo ha bisogno di una coppia di chiavi e di un IP nel tunnel univoci. Non riutilizzare mai una stessa configurazione client su due dispositivi: chiavi e indirizzi duplicati rendono il routing imprevedibile e impediscono una revoca pulita.

Passaggio 1: generare le chiavi del client

Le app ufficiali desktop e mobili possono generare le chiavi quando crei un tunnel vuoto. Su un client Linux usa:

umask 077
wg genkey | tee client.key | wg pubkey > client.pub

Tieni client.key su quel dispositivo. Copia sul server soltanto client.pub.

Passaggio 2: aggiungere il peer sul server

sudo nano /etc/wireguard/wg0.conf

Aggiungi un blocco peer. Sostituisci CLIENT_PUBLIC_KEY con la chiave pubblica del client:

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

La riga Address = 10.8.0.2/32 assegna l'indirizzo del tunnel sul client. Nel blocco [Peer] del server, AllowedIPs = 10.8.0.2/32 associa quell'indirizzo a questo peer per il routing e la validazione della sorgente. Usa 10.8.0.3/32 per il dispositivo successivo, poi prosegui in ordine crescente senza duplicati.

sudo systemctl restart wg-quick@wg0

Passaggio 3: creare la configurazione del client

Crea client.conf sul client e sostituisci tutti i segnaposto:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = VPS_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0 rende questo un full tunnel IPv4. Per accedere solo alla rete VPN, usa AllowedIPs = 10.8.0.0/24. PersistentKeepalive è utile per un client dietro NAT il cui mapping deve restare raggiungibile anche da inattivo; la guida rapida di WireGuard osserva che la maggior parte dei peer non ne ha bisogno.

Passaggio 4: importare la configurazione

Usa il guida all'installazione dei client WireGuard per ottenere il client supportato per la tua piattaforma.

  • Windows: Scegli Add Tunnel, poi importa client.conf.
  • macOS: Scegli Import tunnel(s) from file e seleziona client.conf.
  • Android o iOS: Importa il file oppure scansiona un codice QR generato da esso.

Su un client Ubuntu o Debian che contiene client.conf, installa qrencode e visualizza il file nel terminale di quel client:

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

Il codice QR contiene la chiave privata del client. Mostralo solo in un terminale affidabile, non salvare screenshot e pulisci il terminale dopo che il telefono lo ha importato.

Passaggio 5: verificare il tunnel

Attiva il tunnel, genera traffico dal client ed esegui questi controlli sul VPS:

sudo wg show
ip -brief address show wg0

Un handshake recente e contatori di trasferimento in crescita confermano che WireGuard sta scambiando pacchetti. Poi verifica l'uscita in full tunnel dal client:

curl -4 https://api.ipify.org; echo

Il comando dovrebbe restituire l'indirizzo IPv4 pubblico del VPS. Se non c'è handshake, controlla l'indirizzo dell'endpoint, la porta UDP, il firewall del cloud, la regola UFW e le chiavi. Se l'handshake c'è ma manca l'accesso a internet, controlla l'IP forwarding, il nome dell'interfaccia pubblica, le regole NAT e il DNS.

Si può mettere WireGuard dietro Nginx?

L' documentazione del modulo stream di NGINX spiega come NGINX possa inoltrare UDP da una porta a un'altra, quindi può girare UDP/80 o UDP/443 verso WireGuard su UDP/51820. Si tratta di un relay UDP, non di un reverse proxy HTTP. Non converte WireGuard in TCP o HTTPS e non fa sembrare il protocollo normale traffico web.

Per la maggior parte delle installazioni, cambiare il ListenPort di WireGuard e aprire la porta UDP corrispondente è più semplice che aggiungere NGINX. Se una rete blocca del tutto UDP o usa la deep packet inspection, un relay UDP con NGINX non risolve il problema. La documentazione sui limiti di WireGuard afferma che l'offuscamento è fuori dallo scopo del protocollo.

Collegare il VPS a una rete domestica

A VPS hub relaying a roaming laptop and phone to a home gateway over WireGuard, with full-tunnel 0.0.0.0/0 and split-tunnel 192.168.1.0/24 paths, PersistentKeepalive on the home peer, and a warning that two overlapping 192.168.1.0/24 networks cannot route cleanly

Un VPS può fare da hub tra un client in mobilità e un dispositivo dentro casa tua. Il peer lato casa avvia una connessione WireGuard in uscita verso il VPS, così non serve un IP pubblico domestico. Imposta PersistentKeepalive su quel peer domestico quando si trova dietro NAT.

Raggiungere l'intera LAN di casa richiede più che aggiungere un peer. La voce peer sul VPS relativa al gateway domestico deve includere la subnet di casa in AllowedIPs, ad esempio 192.168.1.0/24. Un client remoto in full tunnel (AllowedIPs = 0.0.0.0/0) invia già quel traffico attraverso il VPS; aggiungi 192.168.1.0/24 sul client solo se usi lo split tunneling. Anche il gateway domestico deve inoltrare il traffico tra WireGuard e la LAN. Aggiungi una rotta sul router di casa oppure una regola NAT delimitata con attenzione sul gateway domestico. Controlla prima le sovrapposizioni: un client collegato a un'altra rete 192.168.1.0/24 non può instradare entrambe le reti in modo pulito senza rinumerare o ricorrere a un policy routing più avanzato.

WireGuard self-hosted o VPN commerciale

Il self-hosting cambia chi gestisce la VPN, ma non migliora automaticamente l'anonimato. Un VPS personale ti dà un IP di uscita stabile, facile da ricondurre a una rete di hosting. Un servizio commerciale di solito offre indirizzi di uscita condivisi e cambio di località immediato, ma devi affidarti alle sue policy, alla sua gestione e agli eventuali audit indipendenti che pubblica.

WireGuard di per sé è leggero, e un VPS piccolo è spesso un punto di partenza ragionevole per una persona e pochi dispositivi. Non considerare un valore fisso di RAM o vCPU come una garanzia di throughput. Fai una prova con il numero reale di dispositivi, la tua regione, la dimensione dei pacchetti e la banda che ti aspetti, poi ridimensiona se saturazione della CPU, perdita di pacchetti o latenza diventano il limite.

Scegli il self-hosting quando un IP di uscita personale stabile, l'accesso remoto o il controllo sul server contano più della scelta della località e della comodità. Scegli una VPN commerciale quando vuoi molti Paesi, uscite condivise, ampio supporto per i dispositivi di consumo e qualcun altro che gestisca i guasti.

Fattore decisionaleWireGuard self-hostedVPN commerciale
Modello di costoUn server più il tuo tempo di amministrazioneAbbonamento, spesso scontato sui periodi più lunghi
Località di uscitaUna località per serverMolte località disponibili nell'app
ConfigurazioneConfiguri tu chiavi, routing, regole firewall e clientInstallare l'app e accedere
ManutenzioneSei tu a fare patch, monitoraggio, backup e troubleshootingIl provider gestisce il servizio
Modello di privacyControlli il server, ma il provider di hosting può comunque osservare i metadatiTi affidi alle policy del provider e agli eventuali audit indipendenti che pubblica
Migliore corrispondenzaIP di uscita personale stabile, accesso remoto e controllo dell'infrastrutturaCambio di località, poca manutenzione e ampio supporto ai dispositivi

Conclusione

Un deployment WireGuard affidabile si riduce a cinque cose: chiavi private protette, indirizzi peer univoci, AllowedIPs corretti, forwarding e NAT funzionanti e una regola firewall per la porta UDP in ascolto. Verifica sia l'handshake sia l'indirizzo pubblico di uscita prima di affidarti al tunnel, e tieni il VPS aggiornato dopo il deployment.

Se vuoi costruire il server manualmente, parti da un soluzioni Cloudzy Ubuntu VPS. Se invece preferisci saltare i passaggi di installazione, usa il deployment WireGuard con un clic di Cloudzy e passa direttamente alla configurazione del client e alla verifica.

Domande frequenti

Perché WireGuard mostra un peer ma nessun handshake?

Una voce peer dimostra soltanto che la configurazione è stata caricata. L'assenza di handshake di solito significa che il client non raggiunge il server o che le chiavi non corrispondono. Controlla l'Endpoint del client, l'IP pubblico del server, la porta UDP/51820 sia nel firewall del provider sia in UFW, e le chiavi pubbliche su entrambi i lati. Genera traffico dal client prima di verificare, perché WireGuard resta silenzioso quando è inattivo.

Perché il tunnel si connette ma l'accesso a internet si interrompe?

Un handshake senza accesso a internet di solito indica un problema di routing, non di cifratura. Verifica net.ipv4.ip_forward, conferma il nome dell'interfaccia pubblica nella regola NAT, controlla le regole FORWARD e prova il DNS separatamente dalla connettività IP pura. Assicurati inoltre che AllowedIPs sul client corrisponda allo schema full tunnel o split tunnel che avevi in mente.

Due dispositivi possono condividere una sola configurazione WireGuard?

No. Assegna a ogni dispositivo la propria chiave privata, chiave pubblica e indirizzo di tunnel /32. Riutilizzare una configurazione provoca conflitti di endpoint e di rotte e ti impedisce di revocare un dispositivo smarrito senza disconnettere l'altro.

Ogni client ha bisogno di PersistentKeepalive?

No. Aggiungilo quando un peer dietro NAT deve mantenere aperto il proprio mapping nei periodi di inattività, cosa comune per telefoni, gateway domestici e alcune reti restrittive. Omettilo quando il peer comunica di frequente o non ha bisogno di essere raggiunto dall'altro capo mentre è inattivo.

Condividi

Altro dal blog

Continua a leggere.

Pronto a distribuire? Da 2,48 $/mese.

Cloud indipendente, dal 2008. AMD EPYC, NVMe, 40 Gbps. Rimborso entro 14 giorni.