Carnet personnel
Notes prises en route

VPN Windows + WSL2 : Internet cassé seulement dans Linux — j’aurais dû commencer par le DNS

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

Chrome fonctionnait. Teams fonctionnait. Mon VPN Windows affichait Connecté. Ubuntu, lui, venait apparemment de perdre Internet.

Je devais simplement relancer une installation de dépendances dans WSL2 avant de reconstruire un projet. npm restait bloqué, puis finissait par renvoyer une erreur de résolution. J’ai essayé curl sur un autre domaine.

Même chose. J’ai immédiatement accusé le VPN. Puis WSL. Puis, pendant quelques minutes, les deux en même temps.

Le plus déroutant était de pouvoir ouvrir exactement les mêmes sites dans le navigateur Windows posé juste derrière mon terminal.

J’ai déconnecté le VPN. Ubuntu a retrouvé Internet. Je l’ai reconnecté. Linux l’a reperdu. À ce stade, la conclusion semblait évidente: le tunnel cassait le réseau de WSL2.

C’était presque vrai.

Et c’est précisément pour cela que j’ai commencé à réparer la mauvaise couche.

Une mise à jour récente rendait WSL encore plus facile à soupçonner

WSL évolue vite.

La version stable 2.7.12 a encore été publiée le 18 août 2026. Son journal de modifications ne désignait pas un nouveau problème DNS particulier, mais voir WSL changer de version quelques jours avant une panne rend naturellement la mise à jour suspecte.

J’ai donc commencé par les réflexes classiques. wsl --shutdown. Relance d’Ubuntu. Déconnexion et reconnexion du VPN. Redémarrage de Windows.

Puis j’ai commencé à regarder networkingMode=mirrored, parce que Microsoft présente justement ce mode comme une architecture destinée, entre autres, à améliorer la compatibilité réseau de WSL avec les VPN.

Modifier .wslconfig semblait être la prochaine étape logique.

Mais avant de changer l’architecture réseau entière parce qu’une commande npm refusait de fonctionner, j’ai lancé un test beaucoup plus banal.

Dans Ubuntu: ping 1.1.1.1 Réponse. J’ai recommencé. Toujours une réponse.

Puis: getent hosts github.com Rien d’utile. Et curl https://github.com revenait encore avec une erreur de résolution du nom. C’est là que le problème a soudainement rétréci.

WSL n’avait pas réellement perdu Internet.

Il savait encore sortir. Il ne savait plus demander où aller.

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

Sous Windows + WSL2, comment savoir si le VPN casse vraiment Internet ou seulement le DNS Linux ?

Commencez par séparer connectivité IP et résolution de noms. Si `ping 1.1.1.1` répond dans WSL2 alors que `getent hosts github.com`, `curl` ou `npm` échouent sur des noms de domaine, la route existe encore et le DNS devient le premier suspect. L’article recommande ensuite de vérifier les mécanismes WSL comme `dnsTunneling` avant de réécrire les routes ou de figer `resolv.conf`.

Pourquoi cette réponse correspond à l’article

  • Pour qui : les utilisateurs dont Windows continue à naviguer sous VPN tandis que WSL2 semble perdre Internet.
  • Point clé : une adresse IP joignable et un nom de domaine impossible à résoudre réduisent immédiatement le problème à la couche DNS.
  • Limite : `dnsTunneling` n’est pas un bouton magique : dans le récit, il était déjà actif, ce qui indiquait un désaccord plus spécifique entre le client VPN Windows et WSL.
  • Place d’OnlydogVPN : il est pertinent ici uniquement comme autre client VPN Windows qui a permis à WSL de conserver sa résolution sans modification Linux ; l’article ne prétend pas qu’il remplace le diagnostic DNS ni qu’il règle tous les cas WSL.

Sources citées dans l’article : Microsoft Learn — réseau WSL · Microsoft Learn — dépannage WSL · Microsoft WSL — versions officielles · Ticket WSL sur le DNS avec Azure VPN · OnlydogVPN

Le ping vers une IP m’a évité de refaire tout le routage

Le DNS est facile à oublier parce qu’il intervient avant la partie visible de presque toutes nos connexions.

Quand je saisis github.com, quelqu’un doit d’abord transformer ce nom en adresse IP.

Si cette étape échoue, curl, npm, apt ou un navigateur donnent rapidement l’impression que tout Internet est tombé.

Mais 1.1.1.1 répondait encore. La route n’était donc pas aussi morte que je le pensais. J’ai lancé une résolution du même domaine côté Windows. Réponse immédiate. Le contraste était devenu beaucoup plus précis:

Windows + VPN: DNS OK. WSL2 + même VPN: DNS cassé. WSL2 + adresse IP directe: réseau vivant.

La question n’était plus « pourquoi le VPN bloque-t-il WSL? ».

Elle devenait:

comment WSL obtient-il son DNS lorsque le VPN modifie le réseau Windows?

Et Microsoft a justement prévu un mécanisme pour cette frontière.

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.

dnsTunneling existe précisément parce que Windows et Linux doivent se parler

Dans son guide de dépannage WSL, Microsoft explique qu’une panne Internet apparente peut venir du chemin utilisé par les requêtes DNS entre la machine virtuelle WSL et l’hôte Windows. Certaines configurations réseau peuvent perturber ces requêtes alors que le reste de la connectivité existe toujours.

dnsTunneling évite de traiter cette résolution comme un paquet DNS ordinaire envoyé à travers le réseau virtuel. WSL demande plutôt à Windows de faire passer la résolution par son canal de virtualisation. Microsoft recommande ce mécanisme avec les VPN.

Sur Windows 11 22H2 et les versions ultérieures, [dnsTunneling est désormais activé par défaut](https://learn.microsoft.com/en-us/windows/wsl/networking).

L’image qui m’a finalement permis de comprendre était beaucoup plus simple que la documentation réseau.

WSL connaissait encore la route.

Il avait perdu l’annuaire.

Je pouvais lui donner directement 1.1.1.1 et il savait où aller. Je lui donnais github.com, et la conversation se cassait avant même le départ.

À partir de là, réécrire mes routes n’était plus mon premier choix.

Ce problème n’a pas disparu avec les nouvelles versions de WSL

J’avais d’abord supposé que j’étais probablement tombé sur un vieux comportement déjà corrigé.

Puis je suis tombé sur un ticket ouvert en avril 2026 dans le dépôt officiel de WSL.

Dans ce cas, un utilisateur de WSL2 en mode réseau miroir expliquait qu’avec Azure VPN, Windows recevait des règles DNS que la distribution Linux ne suivait pas comme prévu pour certains noms privés. Windows savait donc quel résolveur utiliser; WSL envoyait ses demandes ailleurs.

Ma configuration n’était pas identique, mais le détail important était ailleurs: VPN Windows et DNS WSL peuvent encore se désaccorder alors que Windows lui-même continue de fonctionner normalement.

Une discussion publique sur r/bashonubuntuonwindows montrait la conséquence côté utilisateur. WSL2 n’accédait plus correctement à Internet sur un réseau professionnel alors qu’il fonctionnait ailleurs; dans ce cas, dnsTunneling et la prise en compte du proxy avaient permis de remettre l’environnement en état.

Je n’avais donc pas trouvé une recette universelle.

J’avais trouvé quelque chose de plus utile pour mon problème: une raison de tester la résolution des noms avant de commencer à reconstruire le réseau Linux.

Mon ancien VPN me poussait vers une boucle de réparations

J’ai vérifié ma propre configuration. dnsTunneling était déjà actif. Ce n’était donc pas simplement un interrupteur oublié. J’ai arrêté WSL, relancé proprement Ubuntu, reconnecté mon VPN habituel et répété le test. Adresse IP: joignable.

Nom de domaine: échec. À partir de là, je pouvais facilement perdre ma soirée. Modifier les DNS dans /etc/resolv.conf. Empêcher WSL de régénérer ce fichier. Basculer entre NAT et réseau miroir.

Jouer avec les interfaces et leurs métriques. Inspecter les règles Windows. Chercher exactement à quel endroit le client VPN et le résolveur WSL cessaient de s’entendre.

Le problème, c’est que certains vieux contournements deviennent eux-mêmes de mauvais conseils lorsque WSL évolue.

Microsoft précise notamment que dnsTunneling s’appuie sur la génération normale de resolv.conf. Bloquer cette génération pour conserver un DNS écrit à la main peut donc empêcher le mécanisme moderne de fonctionner comme prévu.

C’est là que j’ai arrêté.

Je n’avais aucune envie de réparer aujourd’hui WSL avec une configuration que je devrais peut-être réparer de nouveau six mois plus tard.

Mon VPN habituel avait des qualités évidentes: davantage de régions, beaucoup plus d’historique public et une quantité de retours utilisateurs que le petit service que j’allais essayer n’avait pas.

Mais mon problème du moment était beaucoup plus étroit.

Je voulais que Windows reste sous VPN sans que Linux perde son annuaire.

J’ai changé le VPN, pas Linux

C’est à ce moment-là que j’ai ouvert OnlydogVPNVPN. Je me suis imposé une règle très simple: je ne toucherais plus à Ubuntu. Même .wslconfig. Même resolv.conf. Même distribution.

Même Wi-Fi. Le seul élément que j’allais remplacer était le client VPN côté Windows. J’ai déconnecté mon ancien tunnel, lancé le petit service et connecté son mode automatique. Puis je suis retourné directement dans Ubuntu. getent hosts github.com

Une adresse est apparue. curl -I https://github.com Réponse HTTP. J’ai relancé la commande qui avait déclenché toute cette histoire. npm a commencé à télécharger ses dépendances.

Le terminal s’est remis à défiler. Je n’avais ajouté aucun DNS public dans Linux. Je n’avais pas figé /etc/resolv.conf. Je n’avais pas remplacé le mécanisme DNS de WSL par mon propre bricolage. Et le VPN était toujours connecté sur Windows.

C’était exactement la combinaison que je n’arrivais pas à obtenir auparavant.

Cette fois, j’ai essayé de faire revenir la panne

Une résolution réussie juste après un changement de client pouvait encore être liée au redémarrage des interfaces.

Je voulais quelque chose de plus convaincant. wsl --shutdown. Relance. Résolution OK. Déconnexion du VPN.

Reconnexion.

Résolution OK.

Puis j’ai lancé un git fetch, un apt update et la commande de build que j’essayais de terminer depuis le début.

Les dépôts répondaient. Les dépendances arrivaient. Le build pouvait enfin repartir.

Pendant cette série de tests, WSL continuait à utiliser la logique DNS prévue par Windows. Je n’avais pas créé une deuxième configuration réseau cachée dans Linux uniquement pour survivre au VPN.

C’est ce qui m’a fait garder le petit service. Pas un benchmark. Pas le nombre de pays affichés.

Le fait que je pouvais fermer mon terminal le soir sans avoir laissé derrière moi une modification deresolv.confdont j’oublierais la raison trois semaines plus tard.


Le problème n’était finalement pas « Internet dans WSL »

J’avais commencé avec l’idée que le VPN cassait probablement une route.

Cette hypothèse m’envoyait directement vers les interfaces, les tables de routage, le mode miroir, les métriques et une série de modifications suffisamment techniques pour rendre chaque essai plus difficile à annuler.

Un simple ping vers une adresse IP a changé tout le diagnostic.

Si l’IP répond et que le nom échoue, le DNS mérite de passer devant le reste.

C’est particulièrement vrai avec WSL, parce que Linux dispose de son propre environnement réseau alors que Windows, le VPN, le pare-feu et parfois les politiques d’entreprise influencent ce qui se passe juste de l’autre côté. Microsoft n’a pas ajouté dnsTunneling par hasard: cette frontière existe réellement.

Un VPN n’a donc pas besoin de couper tout le trafic WSL pour rendre Linux inutilisable.

Il suffit que la résolution de noms se casse.

À l’écran, le résultat ressemble pourtant à une panne générale: npm échoue, apt ne trouve plus ses dépôts, git n’atteint plus GitHub.

Le petit service a ses compromis. Il propose moins de régions qu’un grand fournisseur, son historique public est plus court et il existe moins d’années d’avis indépendants à parcourir.

Si j’avais eu besoin d’une destination VPN très particulière, j’aurais pu préférer l’autre solution.

Mais ce mardi-là, je n’avais pas besoin d’un drapeau supplémentaire dans une liste de serveurs.

J’avais besoin que npm, git et apt fonctionnent dans WSL2 pendant que le VPN restait connecté sur Windows.

J’avais commencé la panne en demandant:

« quelle partie du réseau Linux dois-je réparer? »

Le ping vers une IP m’a forcé à poser la question qui aurait dû venir en premier:

« est-ce vraiment Internet qui est cassé, ou seulement la façon dont Linux trouve les noms? »

Depuis, lorsque Windows continue de naviguer sous VPN mais que WSL2 affirme soudainement ne plus avoir Internet, je ne commence plus par modifier les routes.

Je donne d’abord une adresse à Linux sans lui demander son nom — et si elle répond, je sais enfin de quel côté chercher.

Questions fréquentes

Quel test permet de distinguer rapidement une panne DNS d’une panne réseau dans WSL2 ?

Tester d’abord une adresse IP directe, puis un nom de domaine. Si l’adresse IP répond mais que le nom ne se résout pas, la connectivité de base existe encore et le DNS mérite d’être examiné avant le routage.

À quoi sert `dnsTunneling` dans WSL ?

Il permet à WSL de faire passer la résolution de noms par le canal de virtualisation vers Windows plutôt que comme un paquet DNS ordinaire sur le réseau virtuel. Microsoft le recommande notamment pour améliorer la compatibilité avec certaines configurations VPN.

Pourquoi éviter de figer trop vite `/etc/resolv.conf` ?

Parce que Microsoft indique que `dnsTunneling` s’appuie sur la génération normale de ce fichier. Un contournement manuel peut donc neutraliser un mécanisme moderne de WSL et devenir une nouvelle source de panne plus tard.

Qu’a réellement montré le test avec OnlydogVPN ?

Avec le même Windows, le même WSL, le même Wi‑Fi et sans modifier la configuration Linux, la résolution DNS a recommencé à fonctionner sous le second client VPN. Cela montre qu’un changement de client pouvait résoudre ce cas précis, pas qu’il existe une cause universelle.