VPNSmith
VPS Contabo
self-host-vpnINFO

Due dispositivi, una sola chiave WireGuard: cosa si rompe davvero, e perché sembra casuale

Copiare una stessa configurazione client su un telefono e un portatile funziona finché non sono connessi entrambi. Poi il traffico va a chi ha fatto l'ultimo handshake, il server non li distingue e non puoi revocarne uno senza tagliare l'altro. Cosa fa il protocollo, e la soluzione in tre comandi.

Di Eric Gerard · Fondatore · VPNSmith - Specialista in VPN autogestite e VPS GDPR4 min letturaPhoto via Pexels

Configuri WireGuard su un portatile, funziona, e copiare quella stessa configurazione su un telefono richiede dieci secondi. Entrambi si connettono. Per un po' niente sembra andare storto.

Poi sono connessi entrambi contemporaneamente, e uno dei due smette di ricevere traffico. Senza un errore, non in modo costante, e di solito mentre stai cercando di fare altro.

La soluzione è una coppia di chiavi per dispositivo. Il nostro generatore di configurazioni WireGuard gratuito crea una coppia di chiavi, un indirizzo e una configurazione separati per ogni peer direttamente nel browser, e se il server devi ancora noleggiarlo, un Contabo Cloud VPS 4 a 5,50 €/mese (link affiliato) include il proprio IPv4 pubblico. Se preferisci un host statunitense con garanzia di rimborso di 30 giorni, Ultahost VPS Basic costa 5,52 $ al mese con impegno di 24 mesi (1 GB di RAM, IPv4 dedicato, letto il 21 ottobre 2026), sufficiente per un server WireGuard per qualche dispositivo. Il generatore è gratuito fino a 10 dispositivi; oltre, WireGuard Pro (un nostro prodotto, 9 EUR una tantum, nessun abbonamento) alza il limite a 250 e aggiunge un unico ZIP con ogni .conf client e il relativo codice QR in PNG, comodo per configurare un intero ufficio o una famiglia in un colpo solo.

Cosa vede il server

WireGuard identifica un peer tramite la sua chiave pubblica. Non tramite IP, non tramite dispositivo, non tramite nome. Due dispositivi con la stessa chiave privata sono, per il server, un unico peer che continua a spostarsi.

Ogni handshake aggiorna l'endpoint registrato per quel peer, cioè l'indirizzo e la porta a cui il server invia le risposte. Il telefono fa l'handshake, le risposte vanno al telefono. Il portatile fa l'handshake, le risposte vanno al portatile. Quello che non ha fatto l'handshake più recente continua a inviare pacchetti che arrivano senza problemi, e smette di ricevere qualsiasi risposta.

Questo è tutto il meccanismo, e spiega il sintomo esattamente: una connettività che salta da un dispositivo all'altro a intervalli che nessuno controlla, perché l'intervallo di handshake non è qualcosa che programmi tu.

Le tre conseguenze, in ordine di quanto ti costeranno

Non puoi distinguerli. wg show elenca un peer, un orario di handshake, un contatore di trasferimento. Il traffico del telefono e del portatile viene sommato. Se un giorno ti serve sapere quale dispositivo ha fatto qualcosa, quell'informazione non esiste.

Non puoi revocarne uno solo. Rimuovere la chiave dal server toglie l'accesso a ogni dispositivo che la possiede. Un telefono perso significa tagliare anche il portatile, e poi riemettere le chiavi a entrambi.

AllowedIPs diventa ambiguo. Sul server, AllowedIPs è il modo in cui un pacchetto viene associato a un peer. Due dispositivi dietro una sola voce peer condividono un solo indirizzo nel tunnel, quindi tutto ciò che viene instradato verso quell'indirizzo raggiunge il dispositivo che in quel momento detiene l'endpoint.

Un fabbro al lavoro su un banco in un'officina, mentre taglia una chiave su una macchina, con centinaia di chiavi grezze appese a un pannello forato sulla parete dietro di lui
Un fabbro al lavoro su un banco in un'officina, mentre taglia una chiave su una macchina, con centinaia di chiavi grezze appese a un pannello forato sulla parete dietro di lui

La soluzione: una chiave e un indirizzo per dispositivo

Sul client, o sul server se generi le chiavi per qualcun altro:

wg genkey | tee phone.key | wg pubkey > phone.pub

Sul server, aggiungi un blocco peer per dispositivo, ognuno con il proprio indirizzo:

[Peer]
# laptop
PublicKey = <laptop.pub>
AllowedIPs = 10.10.0.2/32

[Peer]
# phone
PublicKey = <phone.pub>
AllowedIPs = 10.10.0.3/32

Aggiungilo a caldo, senza disconnettere nessuno:

wg set wg0 peer <phone.pub> allowed-ips 10.10.0.3/32

⛔ Poi scrivilo anche nel file di configurazione. wg set modifica l'interfaccia in esecuzione e niente su disco; un riavvio lo perde. Questa trappola, e il resto del ciclo di vita di un peer, sono trattati in aggiungere un peer WireGuard.

Rimuovere un dispositivo in seguito è poi un singolo comando, e non tocca nient'altro:

wg set wg0 peer <phone.pub> remove

La riga di commento non è decorazione

Nulla nel protocollo trasporta il nome di un dispositivo, quindi un elenco di dodici chiavi pubbliche è illeggibile sei mesi dopo. Un commento # phone sopra ogni blocco è l'unica etichetta che esisterà mai, e il giorno in cui dovrai revocarne uno in fretta è il giorno in cui la vorrai.

Due casi vicini che non sono questo

Una chiave precondivisa è condivisa apposta. PresharedKey è simmetrica e deve essere identica ai due capi di una stessa coppia di peer. Non è riuso di chiave tra dispositivi, e i due concetti si confondono facilmente: vedi la guida alla chiave precondivisa.

Un dispositivo, più tunnel va benissimo anche questo. Un portatile può avere chiavi diverse per server diversi senza alcun conflitto, perché l'identità è per tunnel e non per macchina.

Se distribuisci regolarmente configurazioni ai dispositivi, generare il codice QR è la parte veloce, e merita la stessa disciplina: il codice QR WireGuard contiene la chiave privata per intero, quindi un codice per dispositivo e mai uno condiviso.

★ Datacenter GDPR di Norimberga · ✓ IPv4 dedicato incluso · porta da 200 Mbit/s

Ospita la tua VPN sul tuo VPS → ContaboAccesso root completo · IPv4 pubblico · scegli la tua regione→

Domande frequenti

Due dispositivi possono usare la stessa chiave WireGuard?
Possono connettersi, ed è proprio questo a trarre in inganno. Il server identifica un peer tramite la sua chiave pubblica, quindi due dispositivi che condividono una chiave sono, per lui, un unico peer. Solo l'handshake più recente detiene l'endpoint, quindi il traffico di ritorno va a un dispositivo alla volta.
Cosa si rompe esattamente quando riuso una chiave?
Il traffico di ritorno segue il dispositivo che ha fatto l'ultimo handshake, quindi l'altro sembra perdere la connettività a caso. Il server non può distinguerli né in wg show né in alcun log. E revocare l'accesso a un dispositivo lo revoca a entrambi, perché c'è una sola chiave da rimuovere.
Condividere una chiave è un problema di sicurezza o solo di routing?
Entrambi, e il lato sicurezza dura più del fastidio. Una chiave su un telefono che poi viene perso è la stessa chiave ancora installata sul portatile, quindi l'unico rimedio è revocarla ovunque e riemetterla. Una chiave per dispositivo trasforma tutto questo in una modifica di una riga.
Quanti peer può avere un server WireGuard?
In pratica non c'è un limite fisso basso; l'elenco dei peer è tenuto in memoria e migliaia sono gestibili su hardware ordinario. Aggiungere un peer per dispositivo non costa nulla, il che elimina l'ultimo argomento a favore della condivisione.
Due peer possono condividere lo stesso indirizzo AllowedIPs?
No. Sul server AllowedIPs è il modo in cui decide a quale peer appartiene un pacchetto, quindi due peer che rivendicano 10.10.0.2/32 creano un'ambiguità che il kernel risolve usandone uno solo. Ogni dispositivo ha bisogno del proprio indirizzo nel tunnel.