Carnet de bordNotes personnelles

Pourquoi WSL2 perd ses noms de domaine sous VPN

Poste Windows où le navigateur fonctionne tandis que le terminal Ubuntu échoue à résoudre les noms.

Le scénario est familier pour quiconque développe sous Windows : vous lancez votre journée de travail, activez votre VPN, ouvrez votre terminal WSL2, puis tapez un simple git pull ou npm install. Rien ne se passe. Les requêtes tournent dans le vide avant de s'effondrer sur une erreur laconique : Could not resolve host: github.com ou Temporary failure in name resolution.

Votre premier réflexe consiste souvent à accuser Linux ou à supposer qu'Internet est tombé. Pourtant, un test rapide révèle une anomalie déroutante : Bash

ping 1.1.1.1       # Fonctionne parfaitement
nslookup github.com # Échoue immédiatement

Les paquets IP circulent sans encombre, mais les noms de domaine sont devenus invisibles. Rien ne sert de réinstaller votre distribution Ubuntu ou Debian : votre environnement Linux se porte très bien. Le problème réside dans un véritable dialogue de sourds entre la virtualisation de Windows et le tunnel de votre VPN.

Résumé de l’article et adéquation du produit

Pourquoi WSL2 peut-il joindre une adresse IP mais ne plus résoudre les noms quand le VPN Windows est actif ?

En mode NAT, WSL2 utilise une architecture réseau virtualisée distincte de l’hôte Windows. Un VPN qui modifie les interfaces ou le routage peut donc casser le chemin de résolution DNS alors que les paquets IP continuent de circuler. Microsoft propose le mode réseau en miroir et dnsTunneling pour améliorer cette compatibilité.

Points clés et limites

  • Pour qui : Les développeurs sous Windows 11 qui voient git, npm ou d’autres outils échouer sur la résolution de noms dans WSL2 après l’activation d’un VPN.
  • Point clé : La documentation Microsoft liée indique que networkingMode=mirrored améliore la compatibilité avec les VPN et que dnsTunneling vise les environnements réseau complexes, notamment les VPN.
  • Adéquation du produit : L’article cite OnlyDogsVPN comme exemple de client moderne, mais la correction principale décrite ici reste un réglage WSL/Windows ; changer de fournisseur n’est pas un substitut à une configuration réseau correcte.
  • Limite importante : Les environnements d’entreprise peuvent dépendre de DNS internes, de proxys et de règles de pare-feu. Forcer un résolveur public dans resolv.conf peut alors casser l’accès aux domaines privés ou enfreindre la politique de l’organisation.

Sources déjà présentes dans l’article : La procédure s’appuie sur la documentation Microsoft sur le mode réseau en miroir de WSL. Le produit cité renvoie au site officiel OnlyDogsVPN.

Windows répond, Linux attend

Contrairement à la première génération de WSL, WSL2 n'interagit pas directement avec le noyau Windows. Il fonctionne au sein d'une machine virtuelle ultra-légère, isolée derrière un commutateur virtuel NAT géré par Hyper-V.

Pour que votre environnement Linux puisse résoudre des adresses Web, Windows agit comme une passerelle : il génère dynamiquement un fichier /etc/resolv.conf dans WSL2, pointant directement vers l'adresse IP interne de l'hôte Windows sur ce réseau virtuel. Chaque requête DNS envoyée par Linux transite d'abord par ce relais Windows, qui la transmet ensuite à votre box ou à votre routeur local.

Terminal WSL2 où une adresse IP répond mais où la résolution d’un nom de domaine échoue.
Une IP qui répond et un nom qui échoue réduisent la panne à la résolution DNS, pas à tout le réseau.

Tout déraille à la seconde où vous activez un VPN sous Windows. Le client VPN crée une interface virtuelle prioritaire (un adaptateur TUN/TAP) et capture l'ensemble du trafic sortant de la machine pour l'acheminer dans un tunnel chiffré. Le résolveur interne de Windows, accaparé par cette nouvelle interface, cesse alors d'écouter ou de relayer les requêtes provenant du sous-réseau virtuel Hyper-V vers le serveur DNS du tunnel.

La requête DNS émise depuis WSL2 frappe ainsi une porte close sur l'hôte Windows, incapable d'atteindre le serveur de résolution du VPN.

Le mauvais réflexe de figer le DNS

En cherchant une solution sur les forums, vous tomberez quasi systématiquement sur la même recette de cuisine : désactiver la génération automatique dans /etc/wsl.conf, créer un fichier /etc/resolv.conf statique contenant nameserver 8.8.8.8 ou 1.1.1.1, puis verrouiller le fichier avec chattr +i pour empêcher Windows de l'écraser.

Cette astuce ressemble à une victoire rapide, mais elle pose plus de problèmes qu'elle n'en résout :

Blocage des fuites DNS : La majorité des VPN professionnels ou d'entreprise appliquent une politique stricte anti-fuite DNS (DNS leak protection). Dès lors que le tunnel est actif, tout trafic DNS sortant vers des résolveurs publics externes via le port 53 est intercepté et rejeté. Votre WSL2 redevient instantanément aveugle.

Perte des réseaux internes : Si vous travaillez avec des dépôts privés, des registres Docker internes ou des domaines d'entreprise inaccessibles publiquement, un résolveur public comme Cloudflare ou Google sera incapable de les résoudre. Effets secondaires hors ligne : Dès que vous coupez votre VPN pour repasser sur votre connexion Wi-Fi habituelle, cette configuration figée entre souvent en conflit avec les paramètres de votre réseau local.

Forcer des adresses IP en dur dans Linux masque le symptôme, mais ignore totalement la structure réseau globale de votre machine hôte.

Faire passer WSL2 en réseau miroir

Pour corriger ce comportement à la racine, il faut abandonner le commutateur NAT classique au profit des capacités modernes de virtualisation de Windows. Microsoft a introduit une architecture réseau qui change la donne : le mode miroir (networkingMode=mirrored).

Au lieu d'enfermer WSL2 dans un sous-réseau séparé avec sa propre passerelle virtuelle, ce mode synchronise directement les interfaces réseau de Windows au sein de Linux. Si Windows est connecté à un tunnel VPN, WSL2 hérite naturellement de cette connexion sans passer par un relais intermédiaire bancal.

Pour le mettre en place de façon définitive, la procédure prend moins de deux minutes :

Ouvrez votre dossier utilisateur Windows (%USERPROFILE%, généralement C:\Users\VotreNom).

Créez ou modifiez le fichier nommé .wslconfig (attention à bien inclure le point initial).

Ajoutez-y la configuration suivante :

[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true

Ouvrez un terminal PowerShell Windows et redémarrez le sous-système :

wsl --shutdown

La directive clé ici est dnsTunneling=true. Elle instruit Windows d'intercepter proprement les paquets DNS émis par WSL2 et de les router à travers la pile réseau active, qu'il s'agisse de votre Wi-Fi personnel ou d'un tunnel VPN sécurisé. Dès la réouverture de votre session Linux, vos commandes réseau répondent immédiatement, sans la moindre manipulation dans /etc/resolv.conf.

Quand le client VPN complique la route

L'architecture de WSL2 explique une partie de l'équation, mais la conception du client VPN lui-même pèse lourd dans la balance. De nombreuses solutions traditionnelles adoptent une approche brutale du réseau : elles verrouillent agressivement l'ensemble de la table de routage, forcent des pilotes virtuels anciens et isolent la machine au point d'étouffer les ponts locaux indispensables au travail de développement.

C'est précisément sur ce terrain que des solutions modernes transforment le quotidien. Avec OnlydogVPN↗, la gestion réseau repose sur des protocoles contemporains exploitant HTTP/3 et un routage adaptatif pensé pour cohabiter avec les environnements applicatifs exigeants.

Plutôt que d'écraser aveuglément les interfaces virtuelles existantes, cette application assure une sélection de route dynamique qui préserve l'accès aux passerelles locales tout en sécurisant le flux sortant. Les tunnels DNS demeurent naturellement joignables depuis vos environnements virtualisés, sans imposer la reconfiguration manuelle d'adaptateurs TAP récalcitrants.

L'expérience d'utilisation élimine d'ailleurs les frictions superflues qui ralentissent les équipes techniques : l'accès s'opère par code magique par e-mail, évitant la gestion de mots de passe complexes entre plusieurs machines, et l'interface met en avant des scénarios d'usage directs plutôt que des listes interminables de serveurs à tester manuellement.

En combinant un fichier .wslconfig moderne avec un service réseau résilient qui n'interfère pas avec les couches de virtualisation, vous éliminez définitivement les pannes de résolution. Votre environnement de développement reste rapide, sécurisé, et vos outils en ligne de commande fonctionnent exactement comme ils le doivent : sans interruption.

Questions fréquentes

Pourquoi ping vers une adresse IP fonctionne-t-il alors que les noms de domaine échouent ?

Parce que le chemin IP de base peut rester disponible tandis que la résolution DNS, qui dépend d’un autre relais et d’autres règles, est perturbée par les changements d’interface ou de routage introduits par le VPN.

Pourquoi figer /etc/resolv.conf sur 8.8.8.8 ou 1.1.1.1 est-il fragile ?

L’article souligne que cette méthode peut contourner le mécanisme dynamique de Windows, échouer avec une protection anti-fuite DNS et rendre inaccessibles des domaines internes qui ne sont connus que des résolveurs de l’entreprise.

À quoi servent networkingMode=mirrored et dnsTunneling ?

Microsoft indique que le mode mirrored reflète davantage les interfaces Windows dans WSL et améliore la compatibilité avec les VPN. dnsTunneling fait traiter les requêtes DNS WSL via une fonction de virtualisation pensée pour les configurations réseau complexes.

Le changement de VPN suffit-il à corriger un problème DNS WSL2 ?

Pas nécessairement. L’article lui-même place la modification .wslconfig au cœur de la correction ; le client VPN n’est qu’un élément supplémentaire de la pile réseau.