AnonymFlow
securite-reseauINFO

Fuga IPv6 con VPN: il tuo sistema preferisce IPv6, ed è proprio per questo che perde

Una fuga IPv6 non è un difetto della tua VPN. È il tuo sistema operativo che applica la RFC 6724, la quale gli dice di preferire IPv6 a IPv4. Se il tunnel trasporta solo IPv4, il percorso preferito gli passa accanto. Come verificare, e la riga che lo corregge su WireGuard.

Di Eric Gerard · Redattore · AnonymFlow6 min di letturaFoto via Pexels

La tua VPN è connessa. Il tunnel è attivo, il client dice protetto, e il tuo traffico IPv4 ci passa davvero. E un sito che visiti registra comunque il tuo indirizzo reale, perché ti ha raggiunto via IPv6.

Qui non c'è alcun guasto da trovare. Sono due sistemi corretti che non concordano, e questo disaccordo è scritto in uno standard.

Il tuo sistema non si comporta male, applica la RFC 6724

Quando una destinazione è raggiungibile sia via IPv4 sia via IPv6, qualcosa deve scegliere. Quel qualcosa è la RFC 6724, che definisce una tabella di policy predefinita per la selezione degli indirizzi. Tre delle sue righe contano qui:

Prefix        Precedence Label
::1/128               50     0
::/0                  40     1
::ffff:0:0/96         35     4

::/0 è IPv6 in generale. ::ffff:0:0/96 è il modo in cui gli indirizzi IPv4 sono rappresentati in quella tabella. Quaranta batte trentacinque, e la regola di selezione della destinazione è esplicita: se Precedence(DA) > Precedence(DB), allora si preferisce DA.

La RFC enuncia la conseguenza in chiaro invece di lasciartela dedurre: un altro effetto della tabella di policy predefinita è preferire la comunicazione con indirizzi IPv6 a quella con indirizzi IPv4, se sono disponibili indirizzi sorgente corrispondenti.

Per ogni sito dual stack che visiti, quindi, il tuo sistema operativo punta prima a IPv6. È un comportamento corretto, e precede di gran lunga la tua VPN.

Perché questo diventa una fuga

Metti ora sopra una VPN che trasporta solo IPv4.

La tua macchina conserva un indirizzo IPv6 nativo del tuo operatore. Il tunnel non rivendica il traffico IPv6, quindi nulla lo intercetta. Il tuo sistema, seguendo la regola qui sopra, preferisce IPv6 per ogni destinazione che lo offra. Il risultato è che il tuo percorso preferito è quello che aggira il tunnel, e il percorso protetto riceve solo ciò che IPv6 non ha potuto servire.

Ecco perché la fuga sfugge così facilmente. Non ha l'aria di un malfunzionamento. La tua VPN segnala connesso perché lo è. Le tue verifiche IPv4 passano perché passano davvero. Il traffico che sfugge è precisamente quello che il tuo sistema ha giudicato migliore.

Un tecnico davanti a un rack di rete aperto, con entrambe le mani in un fascio di cavi bianchi e blu che entrano in uno switch, di cui si intravedono i led dietro il cablaggio.
Un tecnico davanti a un rack di rete aperto, con entrambe le mani in un fascio di cavi bianchi e blu che entrano in uno switch, di cui si intravedono i led dietro il cablaggio.

Verificare, e l'errore che rende inutile la verifica

La verifica è semplice: a VPN connessa, guarda che cosa vede davvero un sito, e leggi specificamente la riga IPv6 invece di dare un'occhiata a quella IPv4 e passare oltre.

Se l'indirizzo IPv6 mostrato appartiene alla tua connessione anziché al fornitore VPN, IPv6 è fuori dal tunnel. Se non compare alcun indirizzo IPv6, o la tua rete non ne ha o è bloccato, e in entrambi i casi non c'è problema di fughe.

Due cose rovinano questa verifica nella pratica:

Provare prima di connettersi. La domanda non è che aspetto hai senza protezione. È che cosa sfugge mentre ti credi protetto.

Provare una volta sola. Una configurazione che oggi trasporta IPv6 può smettere dopo una riconnessione, un cambio di rete o il passaggio dal Wi-Fi ai dati mobili, perché gli indirizzi disponibili cambiano con la rete. Un unico risultato pulito dimostra che la configurazione era corretta su una rete, in un momento.

La riga che decide, su WireGuard

WireGuard rende la causa insolitamente leggibile, perché la stessa impostazione decide sia che cosa entra sia dove escono le cose. Il manuale wg definisce AllowedIPs come un elenco di indirizzi IP (v4 o v6) separati da virgole, con maschere CIDR, dai quali è consentito il traffico in ingresso per questo peer e verso i quali è diretto il traffico in uscita per questo peer, e aggiunge che il jolly 0.0.0.0/0 può essere indicato per tutti gli indirizzi IPv4, e ::/0 per tutti gli indirizzi IPv6.

Leggilo come un'istruzione di routing, perché è quello che è. Un peer configurato con il solo 0.0.0.0/0 indirizza IPv4 nel tunnel e non dice nulla di IPv6, che continua quindi a usare la rotta normale. Aggiungere ::/0 vi indirizza anche IPv6.

Vale una condizione: il tunnel deve avere un proprio indirizzo IPv6 perché questo serva a qualcosa. Se il tuo fornitore non ne assegna, instradare ::/0 in un tunnel privo di estremità IPv6 non crea connettività IPv6. È a quel punto che bloccare IPv6 diventa il ripiego onesto e non una scorciatoia.

Bloccare IPv6 funziona, e ha un costo

Disattivare IPv6 sulla macchina rimuove il percorso preferito, quindi tutto ricade su IPv4 e nel tunnel. È efficace, ed è ciò che fanno diversi client VPN sotto l'etichetta protezione dalle fughe IPv6.

Il costo però è reale. Perdi IPv6 per tutto il resto su quella macchina, comprese le reti in cui è l'unico trasporto utilizzabile, e l'impostazione sopravvive al motivo per cui l'avevi cambiata. Sei mesi dopo, un problema di connettività del tutto scollegato diventa difficilissimo da diagnosticare perché nessuno ricorda più che IPv6 era spento.

Instradare IPv6 nel tunnel conserva la capacità e risolve lo stesso problema. Preferiscilo ogni volta che il tuo fornitore lo consente, e tratta il blocco come il ripiego per quando non lo consente.

Il kill switch non copre questo caso

Da dire a parte, perché i due si confondono nella stessa schermata di impostazioni.

Un kill switch sorveglia la caduta del tunnel e taglia il traffico quando avviene. Una fuga IPv6 accade a tunnel attivo. Non c'è alcuna caduta da rilevare, nessun evento di guasto, nulla a cui l'interruttore possa reagire. Un kill switch perfettamente funzionante starà lì a fare il suo lavoro impeccabilmente mentre il traffico IPv6 gli passa davanti.

Se il tuo client offre la protezione dalle fughe IPv6 come interruttore separato, è un meccanismo diverso, e avere l'uno non ti dà l'altro.

In sintesi

Una fuga IPv6 non è la tua VPN che si rompe. Sono la RFC 6724 che dice al tuo sistema di preferire IPv6, un tunnel che trasporta solo IPv4, e la conseguenza perfettamente logica di questi due fatti.

Verifica a VPN connessa, leggi la riga IPv6, e ripeti dopo un cambio di rete. Su WireGuard è AllowedIPs a decidere, e ::/0 è ciò che indirizza IPv6 nel tunnel. Dove il tunnel non ha un IPv6 proprio, bloccare IPv6 è un ripiego legittimo, con un costo che conviene annotare da qualche parte dove lo ritroverai.

La tabella di policy predefinita, i valori di precedenza, la regola di selezione della destinazione e l'affermazione che la tabella preferisce la comunicazione IPv6 a quella IPv4 provengono dalla RFC 6724. La definizione di AllowedIPs e la notazione jolly per 0.0.0.0/0 e ::/0 provengono dalla pagina di manuale wg(8). Entrambe sono state consultate al momento della stesura.

Guide correlate

Scelta editoriale
4.6 / 5

Proteggi la tua connessione con NordVPN

Threat Protection blocca tracker e malware · kill switch · 30 giorni di rimborso

Audit Deloitte 2024Garanzia di 30 giorni14M+ utenti
Vedi l'offerta
Tutto ciò che devi sapere.

Domande frequenti

Che cos'è esattamente una fuga IPv6?

È traffico che lascia la tua macchina via IPv6 mentre la tua VPN trasporta solo IPv4. Il tunnel è attivo, il tuo traffico IPv4 è protetto, tutto sembra normale, ma qualunque sito raggiungibile via IPv6 vede il tuo indirizzo reale. Nulla ha fallito. La tua VPN fa ciò per cui è stata configurata, e il tuo sistema fa ciò che lo standard gli dice di fare. Semplicemente non concordano su quali percorsi esistano.

Perché il mio sistema preferisce IPv6?

Perché glielo dice la RFC 6724. La tabella di policy predefinita che essa definisce assegna a ::/0 una precedenza di 40 e agli indirizzi IPv4 rappresentati (::ffff:0:0/96) una precedenza di 35, e la regola di selezione della destinazione dice che se Precedence(DA) > Precedence(DB), allora si preferisce DA. La RFC enuncia l'intento in modo diretto: un altro effetto della tabella di policy predefinita è preferire la comunicazione con indirizzi IPv6 a quella con indirizzi IPv4, se sono disponibili indirizzi sorgente corrispondenti. Per ogni destinazione dual stack, quindi, IPv6 vince per progetto.

Come faccio a sapere se sto perdendo?

Connetti la VPN, poi guarda che cosa vede davvero un sito. Se l'indirizzo IPv6 mostrato appartiene alla tua connessione invece che al fornitore VPN, il tuo traffico IPv6 è fuori dal tunnel. Fallo a VPN connessa, non prima: il punto è esattamente ciò che sfugge mentre ti credi protetto. Nemmeno provare una volta sola basta: una fuga può comparire dopo una riconnessione, un cambio di rete o il passaggio dal Wi-Fi ai dati mobili.

Come lo correggo su WireGuard?

Instradando anche IPv6 nel tunnel. Il manuale wg definisce AllowedIPs come un elenco di indirizzi IP (v4 o v6) separati da virgole, con maschere CIDR, dai quali è consentito il traffico in ingresso per questo peer e verso i quali è diretto il traffico in uscita per questo peer, e nota che il jolly 0.0.0.0/0 può essere indicato per tutti gli indirizzi IPv4, e ::/0 per tutti gli indirizzi IPv6. Una configurazione che porta solo 0.0.0.0/0 manda quindi IPv4 nel tunnel e lascia IPv6 per conto suo. Aggiungere ::/0 vi indirizza anche IPv6, a condizione che il tunnel disponga davvero di un indirizzo IPv6.

Non conviene semplicemente disattivare IPv6?

Funziona, ed è lo strumento brutale. Disattivare IPv6 rimuove il percorso preferito, quindi tutto ricade su IPv4 e nel tunnel. Il costo è che perdi IPv6 su quella macchina per tutto il resto, comprese le reti in cui è l'unico trasporto utilizzabile, e che devi ricordarti di averlo fatto. Instradare IPv6 nel tunnel conserva la capacità e risolve lo stesso problema, ed è per questo che è la scelta migliore per impostazione predefinita quando il tuo fornitore lo consente.

Un kill switch mi protegge da una fuga IPv6?

Non da solo, ed è un malinteso che vale la pena chiarire. Un kill switch reagisce alla CADUTA del tunnel. Una fuga IPv6 avviene con il tunnel perfettamente ATTIVO: non c'è alcun guasto da rilevare e nulla da tagliare. Alcuni client bloccano IPv6 separatamente sotto l'etichetta protezione dalle fughe IPv6, che è un meccanismo diverso dal kill switch anche quando la stessa schermata delle impostazioni li presenta affiancati.