Configurazione di WireGuard su Windows
Questa guida spiega come configurare un tunnel VPN WireGuard tra due computer Windows: un server WireGuard in esecuzione su un host Windows remoto, ad esempio un VPS Windows, e un client WireGuard in esecuzione sul proprio computer Windows locale. Una volta che il tunnel è attivo, i due computer scambiano dati tramite una connessione privata crittografata ed è possibile, se lo si desidera, instradare tutto il traffico del client attraverso il server.
Per semplificare la generazione delle chiavi, questa guida crea sia la configurazione del server che quella del client all’interno di un’unica applicazione WireGuard, per poi distribuire ciascun file di configurazione al computer a cui appartiene. La configurazione del server viene eseguita sul server, mentre quella del client sul client. Il server e il client sono sempre computer distinti. Lo stesso procedimento viene utilizzato per aggiungere un numero qualsiasi di client aggiuntivi.
Prima di iniziare, installa l’ultima versione di WireGuard dalla pagina di installazione di WireGuard sia sul server che sul client e assicurati di disporre dei diritti di amministratore su ciascuna macchina.
La configurazione descritta in questa guida è la seguente:
Server (public IP, listening on UDP 51820) Tunnel address 10.0.0.1/24 | | encrypted WireGuard tunnel | Client Tunnel address 10.0.0.2/32
Creazione della configurazione del server
Esegui C:\Program Files\WireGuard\wireguard.exe, fai clic su "Aggiungi tunnel" e seleziona "Aggiungi tunnel vuoto". WireGuard genera automaticamente una coppia di chiavi. La chiave pubblica visualizzata nella parte superiore della finestra è la chiave pubblica del server. Ne avrai bisogno in seguito per configurare il client.

Assegnare un nome al tunnel e compilare la sezione relativa all’interfaccia con la chiave privata del server, la porta su cui WireGuard sarà in ascolto e l’indirizzo interno che il server utilizzerà all’interno del tunnel.
[Interface] PrivateKey = # private key of the WireGuard server ListenPort = # port that WireGuard will listen on Address = # internal IP address of the WireGuard server, for example 10.0.0.1/24

Utilizza una sottorete privata per la rete del tunnel e mantieni il server e tutti i client nello stesso intervallo. Una scelta comune è 10.0.0.1/24 per il server e 10.0.0.2/32, 10.0.0.3/32 e così via per ciascun client. Il server utilizza un prefisso /24, quindi considera l’intero intervallo del tunnel come raggiungibile tramite l’interfaccia WireGuard. Ogni client utilizza /32, poiché un client rappresenta un singolo indirizzo anziché una sottorete. Un client impostato su /24 presumerebbe che l’intero intervallo si trovi sulla propria interfaccia e non invierebbe traffico destinato ad altri indirizzi del tunnel attraverso il tunnel stesso.
Nell’editor del tunnel, sotto il campo di configurazione, è possibile abilitare facoltativamente l’opzione “Blocca traffico non tunnelizzato (kill-switch)”, che blocca qualsiasi traffico che uscirebbe dal tunnel, e impostare una “Chiave pre-condivisa”, che aggiunge un ulteriore livello di sicurezza. Entrambe le opzioni sono facoltative. Consultare la sezione "Informazioni su AllowedIPs" per sapere quando è utile il kill-switch e cosa blocca.

Creazione della configurazione del client
Fare clic su "Aggiungi tunnel " e selezionare "Aggiungi tunnel vuoto " una seconda volta, questa volta per il client. La chiave pubblica visualizzata per questo tunnel è la chiave pubblica del client, necessaria al server per accettare il client.
Compila la configurazione del client:
[Interface] PrivateKey = # private key of the WireGuard client Address = # internal IP address of the WireGuard client, for example 10.0.0.2/32 DNS = 1.1.1.1, 1.0.0.1 [Peer] PublicKey = # public key of the WireGuard server AllowedIPs = # 0.0.0.0/0 for a full tunnel, or 10.0.0.0/24 for a split tunnel Endpoint = # public IP address and port of the WireGuard server PersistentKeepalive = 25
L’Endpoint deve essere l’indirizzo IP pubblico reale del server insieme alla porta impostata nel campo ListenPort del server, non l’indirizzo interno del tunnel. Per assistenza nella scelta del valore di AllowedIPs, consultare la sezione "Informazioni su AllowedIPs" riportata di seguito.
Le righe "DNS " e "PersistentKeepalive " sono facoltative. "DNS" imposta i server DNS utilizzati mentre il tunnel è attivo, il che previene problemi di risoluzione dei nomi dopo la connessione. È possibile utilizzare resolver pubblici come 1.1.1.1, 1.0.0.1 o 8.8.8.8, 8.8.4.4, oppure il server DNS della rete VPN stessa. PersistentKeepalive = 25 invia un piccolo pacchetto ogni 25 secondi e aiuta a mantenere aperta la connessione quando il client si trova dietro un NAT.
Copiare con molta attenzione le chiavi e l’Endpoint. Una chiave digitata in modo errato o un Endpoint sbagliato sono le cause più comuni per cui un tunnel non riesce a connettersi.

Aggiunta del client al server
Aprire nuovamente la configurazione del server e aggiungere una sezione [Peer] per il client, utilizzando la chiave pubblica del client ottenuta nel passaggio precedente.
[Peer] PublicKey = # public key of the WireGuard client AllowedIPs = # internal IP address of the client
Nella configurazione del server, AllowedIPs ha due funzioni. Indica al server quale indirizzo del tunnel appartiene a questo client e funge da elenco di instradamento: qualsiasi pacchetto indirizzato a quegli intervalli viene crittografato e inviato a questo peer. Per un singolo client, questo è il suo indirizzo del tunnel, ad esempio 10.0.0.2/32. Se il client deve rendere accessibile anche una rete locale tramite il tunnel, aggiungere qui anche quella sottorete, ad esempio 10.0.0.2/32, 192.168.1.0/24. Ripetere questo passaggio per ogni client aggiuntivo.

Configurazione del Firewall di Windows sul server
Il server deve accettare il traffico WireGuard in entrata sulla propria porta UDP. Aprire Windows Defender Firewall con sicurezza avanzata, selezionare Regole in entrata e fare clic su Nuova regola. Scegliere "Porta" e fare clic su "Avanti". Selezionare "UDP", inserire la porta WireGuard, ad esempio 51820, e fare clic su "Avanti". Se si utilizzano più porte, elencarle separate da virgole, ad esempio 51820, 51821. Selezionare Consenti la connessione e fare clic su Avanti. Selezionare i profili a cui si applica la regola. Se il server è ospitato in un data center, di solito è sufficiente il profilo Pubblico; in caso contrario, lasciare selezionati i profili Dominio, Privato e Pubblico. Fare clic su Avanti, assegnare alla regola un nome chiaro come WireGuard UDP 51820 e fare clic su Fine.
Questa regola in entrata è necessaria solo sul server, poiché è il server a ricevere le connessioni in entrata. Su un VPS, assicurati inoltre che il tuo provider di hosting consenta il traffico UDP in entrata su questa porta a livello di rete, non solo nel Firewall di Windows.
Esportazione e distribuzione delle configurazioni
Quando entrambe le configurazioni sono pronte, fare clic su “Esporta tutti i tunnel in un file ZIP”, scegliere una posizione e salvare.

Apri l’archivio per trovare i file di configurazione di tutti i tunnel. Copia la configurazione del server sul server stesso e assegna a ciascun client il proprio file di configurazione. Se la macchina ospita molti tunnel, puoi anche esportare un singolo tunnel dal relativo menu contestuale. L’esportazione in un file zip è comoda quando entrambi i tunnel sono stati creati sulla stessa macchina, come in questa guida. Se si crea ogni configurazione direttamente sul proprio host, l’esportazione non è necessaria ed è possibile copiare manualmente il file di configurazione.
Sul server, selezionare la configurazione del server e fare clic su Attiva.

Sul client, fare clic su “Aggiungi tunnel”, selezionare il file di configurazione del client e aprirlo.

Quindi fare clic su Attiva.

Il primo client è ora configurato. Aggiungere ulteriori client allo stesso modo: creare un nuovo tunnel vuoto per ciascun client e aggiungere alla configurazione del server una sezione [Peer] corrispondente contenente la chiave pubblica e l’indirizzo del tunnel di quel client, come descritto in "Aggiunta del client al server".
Se si configura WireGuard su un server remoto tramite una sessione RDP, leggere la sezione "Informazioni su AllowedIPs" prima di attivare un tunnel che instrada tutto il traffico. Una configurazione con AllowedIPs = 0.0.0.0/0 può reindirizzare il traffico del server stesso nel tunnel e interrompere la connessione RDP.
Verifica della connessione
Dopo aver attivato il tunnel, Windows potrebbe visualizzare l’adattatore WireGuard come «Nessun accesso alla rete» o «Nessun accesso a Internet» nel Centro connessioni di rete e condivisione. Si tratta di un comportamento previsto, poiché Windows non tratta gli adattatori dei tunnel VPN come connessioni Internet standard e ciò non influisce sul tunnel. Windows determina questo stato tramite il proprio controllo di connettività, che esegue prove su specifici URL Microsoft; pertanto, l’avviso può comparire anche se tali prove vengono bloccate o non risolte dal proprio DNS, anche quando il tunnel funziona.
Per verificare che il tunnel funzioni, controlla il suo stato nel client WireGuard. Un tunnel attivo mostra lo stato "Attivo " insieme ai contatori di trasferimento dati. Se i contatori aumentano, il tunnel sta trasmettendo traffico.
Sul server è inoltre possibile verificare che WireGuard sia in ascolto sulla propria porta UDP mentre il tunnel è attivo:
netstat -ano | findstr 51820
In PowerShell l’equivalente è:
Get-NetUDPEndpoint -LocalPort 51820
Sostituisci 51820 con la tua porta WireGuard. Se non viene restituito nulla, il tunnel non è attivo oppure la porta differisce da quella impostata nella configurazione del server.
Successivamente, apri il Prompt dei comandi ed esegui il comando ping sull’indirizzo interno del tunnel del server:
ping 10.0.0.1
Sostituisci 10.0.0.1 con l'IP interno effettivo che hai impostato per il server. Le risposte confermano che il tunnel funziona.
Se il client utilizza AllowedIPs = 0.0.0.0/0, è anche possibile verificare che il traffico venga instradato attraverso il tunnel:
tracert 8.8.8.8
Il primo hop dovrebbe essere l’indirizzo IP interno del server WireGuard.
Verifica dell’handshake di WireGuard
L'handshake è l'indicatore più utile per la diagnosi di una connessione WireGuard. Nell'applicazione WireGuard, apri il tunnel e osserva il campo "Ultimo handshake ". Su un tunnel funzionante, l'handshake appare entro pochi secondi dall'attivazione e poi si aggiorna periodicamente durante il trasferimento dei dati. Se il tunnel è inattivo, può trascorrere un po' di tempo tra un handshake e l’altro, quindi un breve intervallo è normale. Se il campo rimane vuoto, i peer non riescono a raggiungersi a vicenda, il che di solito indica un endpoint errato, una porta UDP chiusa o chiavi non corrispondenti.
È inoltre possibile verificare l’handshake dalla riga di comando utilizzando lo strumento wg fornito con WireGuard:
wg show
L'output elenca ciascun peer insieme all'ora dell'ultimo handshake e ai relativi contatori di trasferimento.
Comprendere AllowedIPs
Il valore AllowedIPs nella configurazione del client determina quale traffico viene inviato attraverso il tunnel. In breve, sul client AllowedIPs stabilisce quali pacchetti vengono inviati nel tunnel, mentre sul server stabilisce quali pacchetti vengono accettati da un determinato client e dove vengono instradati.
Un valore pari a 0.0.0.0/0 instrada tutto il traffico attraverso il tunnel, compresa la normale navigazione in Internet. Utilizzalo quando desideri una protezione completa del traffico. Affinché questo traffico raggiunga Internet, il server deve tradurlo. Vedi "Configurazione del NAT sul server per il tunneling completo" di seguito.
Un valore come 10.0.0.0/24 instrada solo il traffico della rete interna attraverso il tunnel, mentre il normale traffico Internet continua a utilizzare la connessione standard. Utilizzarlo quando è necessario raggiungere solo risorse specifiche sulla rete remota.
È possibile elencare diverse sottoreti separate da virgole, ad esempio 10.0.0.0/24, 192.168.1.0/24.
L’opzione " Blocca traffico non instradato tramite tunnel (kill-switch) " nell’editor del tunnel ha pieno effetto con AllowedIPs = 0.0.0.0/0. Blocca qualsiasi traffico che uscirebbe dal tunnel, bloccando così anche la rete locale. Se è necessario accedere a stampanti o altri dispositivi LAN, lasciare il kill-switch disabilitato.
Impostando AllowedIPs = 0.0.0.0/0, ogni connessione viene instradata attraverso il tunnel. Se si applica questa impostazione su un server remoto gestito tramite RDP, la sessione RDP potrebbe interrompersi nel momento in cui il tunnel diventa attivo, poiché il traffico del server viene reindirizzato. Su un server raggiungibile tramite RDP, instradate solo le sottoreti necessarie ed effettuate dei test con un valore ridotto di AllowedIPs prima di passare a 0.0.0.0/0.
Configurazione del NAT sul server per il tunneling completo
Se i client utilizzano AllowedIPs = 0.0.0.0/0 e si desidera che il loro traffico raggiunga effettivamente Internet attraverso il server, quest’ultimo deve tradurre gli indirizzi WireGuard interni nel proprio indirizzo esterno. Su Windows ciò avviene tramite il comando New-NetNat, non con gli script PostUp e PostDown utilizzati su Linux.
Apri PowerShell come amministratore sul server ed esegui il seguente comando, utilizzando la sottorete del tunnel che hai assegnato al server:
New-NetNat -Name WireGuardNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/24
Sostituisci 10.0.0.0/24 con la tua sottorete del tunnel e assicurati che il prefisso copra tutti gli indirizzi dei client che assegni. Un client al di fuori di questo intervallo, ad esempio 10.0.1.2, non verrebbe riconosciuto da questa regola. Puoi controllare le regole attive in qualsiasi momento:
Get-NetNat
Per rimuovere la regola NAT in un secondo momento, eseguire:
Remove-NetNat -Name WireGuardNAT
Se i client si connettono e l’handshake va a buon fine, ma il loro traffico Internet continua a non passare attraverso il server, abilita l’inoltro IP sulle interfacce coinvolte nell’instradamento ed esegui nuovamente il test. La sintassi esatta dipende dalla versione di Windows, ad esempio:
Set-NetIPInterface -InterfaceAlias "Ethernet" -Forwarding Enabled
Applicatela all’interfaccia esterna che trasporta il traffico Internet e all’interfaccia WireGuard, utilizzando i loro nomi reali ottenuti da Get-NetIPInterface.
New-NetNat richiede Windows 10, Windows 11 o Windows Server 2016 e versioni successive; su alcuni sistemi è necessario che la funzionalità Hyper-V sia abilitata, anche se Hyper-V non viene utilizzato per altri scopi. Su alcuni piani VPS Hyper-V non può essere abilitato, il che impedisce l'utilizzo di questo metodo. Il fatto che New-NetNat sia sufficiente da solo o che sia necessario abilitare anche l'inoltro IP può dipendere dalla versione di Windows, quindi verificatelo sul vostro server quando il tunneling completo non funziona
Risoluzione dei problemi
Il tunnel è attivo ma non c’è connessione al server. Verifica che la porta UDP di WireGuard, ad esempio la 51820, sia aperta nel firewall del server. Assicurati che le chiavi pubbliche siano state copiate correttamente tra le configurazioni del server e del client. Assicurarsi che l’Endpoint nella configurazione del client punti all’indirizzo IP pubblico reale del server, non all’indirizzo interno del tunnel.
Il DNS non funziona dopo la connessione. Aggiungere un server DNS nella sezione dell’interfaccia del client:
[Interface] PrivateKey = ... Address = ... DNS = 1.1.1.1, 1.0.0.1
I contatori di pacchetti non aumentano. Il tunnel non sta trasmettendo dati. Verificare che AllowedIPs sia impostato correttamente su entrambe le parti, che gli indirizzi WireGuard interni non entrino in conflitto con la rete locale esistente e che la porta di ascolto (ListenPort) non sia già utilizzata da un'altra applicazione.
Sono necessari ulteriori dettagli per diagnosticare un problema. Apri il tunnel nell'applicazione WireGuard e consulta la scheda Log, che registra gli handshake, gli errori e gli eventi di connessione man mano che si verificano. Da lì puoi esportare il log se devi condividerlo.
Avvio automatico di WireGuard dopo il riavvio del server
Per mantenere il tunnel attivo anche dopo i riavvii, installalo come servizio di Windows. Quando un tunnel è installato come servizio, si avvia automaticamente dopo un riavvio. Apri il Prompt dei comandi o PowerShell come amministratore ed esegui quanto segue, utilizzando il percorso del file di configurazione del tuo server:
wireguard /installtunnelservice "C:\Program Files\WireGuard\wg_server.conf"
Eseguire questo comando una sola volta, non ad ogni avvio. L’attivazione del tunnel dall’applicazione WireGuard di solito installa lo stesso servizio, quindi in molti casi è sufficiente attivarlo una volta. Per rimuovere il servizio in un secondo momento, utilizzare il nome del tunnel, che corrisponde al nome del file di configurazione senza l’estensione .conf.
wireguard /uninstalltunnelservice wg_server
Per riavviare il servizio, ad esempio dopo aver modificato la configurazione, eseguire nuovamente il comando di disinstallazione seguito dal comando di installazione.
Poiché il tunnel viene eseguito come servizio, non è necessaria un’attività separata nell’Utile di pianificazione.
Riavvia il server e verifica che il tunnel si avvii automaticamente.
