AnonymFlow
securite-reseauINFO

Fuite IPv6 et VPN : votre système préfère l'IPv6, et c'est exactement pour ça qu'il fuit

Une fuite IPv6 n'est pas un bug de votre VPN. C'est votre système d'exploitation qui applique la RFC 6724, laquelle lui dit de préférer l'IPv6 à l'IPv4. Si le tunnel ne transporte que l'IPv4, le chemin préféré passe à côté. Comment vérifier, et la ligne qui corrige sur WireGuard.

Par Eric Gerard · Éditeur · AnonymFlow6 min de lecturePhoto via Pexels

Votre VPN est connecté. Le tunnel est actif, le client affiche protégé, et votre trafic IPv4 passe bien par lui. Et un site que vous visitez enregistre quand même votre adresse réelle, parce qu'il vous a joint en IPv6.

Il n'y a aucune panne à chercher. Ce sont deux systèmes corrects qui ne s'accordent pas, et ce désaccord est inscrit dans une norme.

Votre système ne dysfonctionne pas, il applique la RFC 6724

Quand une destination est joignable à la fois en IPv4 et en IPv6, il faut bien choisir. Ce qui choisit, c'est la RFC 6724, qui définit une table de politique par défaut pour la sélection d'adresses. Trois de ses lignes comptent ici :

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

::/0, c'est l'IPv6 en général. ::ffff:0:0/96, c'est la façon dont les adresses IPv4 sont représentées dans cette table. Quarante l'emporte sur trente-cinq, et la règle de sélection de destination est explicite : si Precedence(DA) > Precedence(DB), alors préférer DA.

La RFC énonce la conséquence en clair plutôt que de vous laisser la déduire : un autre effet de la table de politique par défaut est de préférer la communication en adresses IPv6 à la communication en adresses IPv4, si des adresses source correspondantes sont disponibles.

Pour chaque site en double pile que vous visitez, votre système d'exploitation tend donc d'abord vers l'IPv6. C'est un comportement correct, et il est bien antérieur à votre VPN.

Pourquoi cela devient une fuite

Posez maintenant par-dessus un VPN qui ne transporte que l'IPv4.

Votre machine conserve une adresse IPv6 native fournie par votre opérateur. Le tunnel ne revendique pas le trafic IPv6, donc rien ne l'intercepte. Votre système, appliquant la règle ci-dessus, préfère l'IPv6 pour toute destination qui en propose. Résultat : votre chemin préféré est celui qui contourne le tunnel, et le chemin protégé ne reçoit que ce que l'IPv6 n'a pas pu servir.

Voilà pourquoi la fuite passe si facilement inaperçue. Elle n'a pas l'air d'un dysfonctionnement. Votre VPN affiche connecté parce qu'il l'est. Vos vérifications IPv4 passent parce qu'elles passent réellement. Le trafic qui s'échappe est précisément celui que votre système a jugé le meilleur.

Un technicien devant une baie réseau ouverte, les deux mains dans un faisceau de câbles blancs et bleus qui rejoignent un commutateur, dont on aperçoit les diodes derrière le câblage.
Un technicien devant une baie réseau ouverte, les deux mains dans un faisceau de câbles blancs et bleus qui rejoignent un commutateur, dont on aperçoit les diodes derrière le câblage.

Vérifier, et l'erreur qui rend la vérification inutile

La vérification est simple : VPN connecté, regardez ce qu'un site voit réellement, et lisez spécifiquement la ligne IPv6 plutôt que de jeter un œil à l'IPv4 et passer à autre chose.

Si l'adresse IPv6 affichée appartient à votre connexion plutôt qu'au fournisseur de VPN, l'IPv6 est hors du tunnel. Si aucune adresse IPv6 n'apparaît, soit votre réseau n'en a pas, soit elle est bloquée, et les deux cas sont sains du point de vue des fuites.

Deux choses ruinent cette vérification en pratique :

Tester avant de se connecter. La question n'est pas de quoi vous avez l'air sans protection. C'est ce qui s'échappe pendant que vous vous croyez protégé.

Ne tester qu'une fois. Une configuration qui transporte l'IPv6 aujourd'hui peut cesser de le faire après une reconnexion, un changement de réseau ou un passage du Wi-Fi aux données mobiles, parce que les adresses disponibles changent avec le réseau. Un unique résultat propre prouve que la configuration était correcte sur un réseau, à un instant.

La ligne qui compte, sur WireGuard

WireGuard rend la cause exceptionnellement lisible, parce que le même réglage décide à la fois de ce qui entre et de l'endroit où les choses sortent. Le manuel wg définit AllowedIPs comme une liste d'adresses IP (v4 ou v6) séparées par des virgules, avec masques CIDR, depuis lesquelles le trafic entrant de ce pair est autorisé et vers lesquelles le trafic sortant de ce pair est dirigé, et ajoute que le fourre-tout 0.0.0.0/0 peut être indiqué pour correspondre à toutes les adresses IPv4, et ::/0 pour correspondre à toutes les adresses IPv6.

Lisez cela comme une instruction de routage, car c'est ce que c'est. Un pair configuré avec le seul 0.0.0.0/0 dirige l'IPv4 dans le tunnel et ne dit rien de l'IPv6, qui continue donc d'emprunter la route normale. Ajouter ::/0 y dirige également l'IPv6.

Une condition s'applique : encore faut-il que le tunnel dispose de sa propre adresse IPv6. Si votre fournisseur n'en attribue pas, router ::/0 dans un tunnel sans extrémité IPv6 ne crée pas de connectivité IPv6. C'est à ce moment-là que bloquer l'IPv6 devient le repli honnête, et non un raccourci.

Bloquer l'IPv6 fonctionne, et coûte quelque chose

Désactiver l'IPv6 sur la machine supprime le chemin préféré : tout retombe en IPv4, donc dans le tunnel. C'est efficace, et c'est ce que font plusieurs clients VPN sous l'étiquette protection contre les fuites IPv6.

Le coût est réel malgré tout. Vous perdez l'IPv6 pour tout le reste sur cette machine, y compris sur les réseaux où c'est le seul transport utilisable, et le réglage survit à la raison qui vous l'a fait changer. Six mois plus tard, un problème de connectivité sans rapport devient très difficile à diagnostiquer parce que plus personne ne se souvient que l'IPv6 est coupé.

Router l'IPv6 dans le tunnel conserve la capacité et règle le même problème. Préférez-le chaque fois que votre fournisseur le permet, et traitez le blocage comme le repli pour les cas où il ne le permet pas.

Le kill switch ne couvre pas ce cas

À dire séparément, parce que les deux se confondent dans le même écran de réglages.

Un kill switch guette la chute du tunnel et coupe le trafic quand elle survient. Une fuite IPv6 se produit tunnel actif. Il n'y a aucune chute à détecter, aucun événement de panne, rien à quoi le dispositif puisse réagir. Un kill switch qui fonctionne parfaitement restera là à faire son travail impeccablement pendant que le trafic IPv6 passe devant lui.

Si votre client propose une protection contre les fuites IPv6 comme réglage distinct, c'est un mécanisme différent, et avoir l'un ne vous donne pas l'autre.

En résumé

Une fuite IPv6 n'est pas votre VPN qui casse. C'est la RFC 6724 qui dit à votre système de préférer l'IPv6, un tunnel qui ne transporte que l'IPv4, et la conséquence parfaitement logique de ces deux faits.

Vérifiez VPN connecté, lisez la ligne IPv6, et recommencez après un changement de réseau. Sur WireGuard, AllowedIPs est le réglage qui décide, et ::/0 est ce qui dirige l'IPv6 dans le tunnel. Là où le tunnel n'a pas d'IPv6 propre, bloquer l'IPv6 est un repli légitime, avec un coût qu'il vaut mieux noter quelque part où vous le retrouverez.

La table de politique par défaut, les valeurs de précédence, la règle de sélection de destination et l'énoncé selon lequel la table préfère la communication IPv6 à l'IPv4 proviennent de la RFC 6724. La définition d'AllowedIPs et la notation fourre-tout pour 0.0.0.0/0 et ::/0 proviennent de la page de manuel wg(8). Les deux ont été consultées au moment de la rédaction.

Guides liés

Choix éditorial
4.6 / 5

Sécurise ta connexion avec NordVPN

Threat Protection bloque traqueurs & malwares · kill switch · 30 jours remboursé

Audit Deloitte 2024Garantie 30 jours14M+ utilisateurs
Voir l'offre
Tout ce qu'il faut savoir.

Questions fréquentes

Qu'est-ce qu'une fuite IPv6, exactement ?

C'est du trafic qui quitte votre machine en IPv6 alors que votre VPN ne transporte que l'IPv4. Le tunnel est actif, votre trafic IPv4 est bien protégé, tout paraît normal, mais n'importe quel site joignable en IPv6 voit votre adresse réelle. Rien n'a échoué. Votre VPN fait ce pour quoi il a été configuré, et votre système fait ce que la norme lui dit de faire. Les deux ne s'accordent simplement pas sur les chemins qui existent.

Pourquoi mon système préfère-t-il l'IPv6 ?

Parce que la RFC 6724 le lui demande. La table de politique par défaut qu'elle définit donne à ::/0 une précédence de 40 et aux adresses IPv4 représentées (::ffff:0:0/96) une précédence de 35, et la règle de sélection de destination dit que si Precedence(DA) > Precedence(DB), alors préférer DA. La RFC énonce l'intention directement : un autre effet de la table de politique par défaut est de préférer la communication en adresses IPv6 à la communication en adresses IPv4, si des adresses source correspondantes sont disponibles. Pour toute destination double pile, l'IPv6 l'emporte donc par conception.

Comment savoir si je fuis ?

Connectez le VPN, puis regardez ce qu'un site voit réellement. Si l'adresse IPv6 affichée appartient à votre propre connexion plutôt qu'au fournisseur de VPN, votre trafic IPv6 est hors du tunnel. Faites-le VPN connecté, pas avant : tout l'enjeu est ce qui s'échappe pendant que vous vous croyez protégé. Un seul test ne suffit pas non plus, une fuite peut apparaître après une reconnexion, un changement de réseau, ou un passage du Wi-Fi aux données mobiles.

Comment corriger sur WireGuard ?

En routant aussi l'IPv6 dans le tunnel. Le manuel wg définit AllowedIPs comme une liste d'adresses IP (v4 ou v6) séparées par des virgules, avec masques CIDR, depuis lesquelles le trafic entrant de ce pair est autorisé et vers lesquelles le trafic sortant de ce pair est dirigé, et précise que le fourre-tout 0.0.0.0/0 peut être indiqué pour correspondre à toutes les adresses IPv4, et ::/0 pour correspondre à toutes les adresses IPv6. Une configuration ne portant que 0.0.0.0/0 envoie donc l'IPv4 dans le tunnel et laisse l'IPv6 se débrouiller. Ajouter ::/0 y dirige aussi l'IPv6, à condition que le tunnel dispose réellement d'une adresse IPv6.

Ne vaut-il pas mieux simplement désactiver l'IPv6 ?

Ça marche, et c'est l'instrument brutal. Désactiver l'IPv6 supprime le chemin préféré, tout retombe donc en IPv4 et dans le tunnel. Le coût est que vous perdez l'IPv6 sur cette machine pour tout le reste, y compris sur les réseaux où c'est le seul transport utilisable, et qu'il faut se souvenir de l'avoir fait. Router l'IPv6 dans le tunnel conserve la capacité et règle le même problème : c'est pourquoi c'est le meilleur choix par défaut quand votre fournisseur le permet.

Un kill switch me protège-t-il d'une fuite IPv6 ?

Pas à lui seul, et c'est le malentendu qu'il vaut la peine de lever. Un kill switch réagit à la CHUTE du tunnel. Une fuite IPv6 se produit alors que le tunnel est parfaitement ACTIF : il n'y a aucune panne à détecter et rien à couper. Certains clients bloquent l'IPv6 séparément sous l'étiquette protection contre les fuites IPv6, ce qui est un mécanisme différent du kill switch même quand le même écran de réglages les présente côte à côte.