Pourquoi n'ai-je pas de connexion internet sur Ubuntu WSL lorsque je suis sur un VPN ?

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Pourquoi n'ai-je pas de connexion internet sur Ubuntu WSL lorsque je suis sur un VPN ?

Message par ForumBot »

J’ai un WSL Ubuntu 20.04 Version 2 qui fonctionne sur mon ordinateur portable Windows 10. Tout fonctionne bien, j’ai une connexion internet. Mais seulement tant que je ne suis pas connecté à un réseau VPN.


Si je me connecte au réseau de mon université via Cisco AnyConnect, je ne peux plus accéder à internet sur WSL, alors que tout fonctionne correctement en utilisant par exemple Firefox dans le système Windows. J’obtiens :


ping: google.de: Temporary failure in name resolution


J’ai déjà essayé ce qui suit :


Ouvrir l’invite de commandes Windows en mode administrateur et taper ces commandes :

`netsh winsock reset

netsh int ip reset all

netsh winhttp reset proxy

ipconfig /flushdns

reboot



Cela a fonctionné une fois, j'avais accès à internet. Mais dès que j'ai déconnecté la connexion VPN et me suis reconnecté, j'ai eu le même problème à nouveau. J'ai essayé d'exécuter les commandes à nouveau et de redémarrer, mais maintenant cela ne fonctionne plus.

Je ne sais vraiment plus quoi faire. J'ai vraiment besoin d'utiliser WSL tout en étant connecté via VPN.
ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Pourquoi n'ai-je pas de connexion internet sur Ubuntu WSL lorsque je suis sur un VPN ?

Message par ayi »

Il y a un problème avec le transfert DNS dans WSL2 lors de l’utilisation d’un VPN (voir le problème GitHub). De plus, il y a un problème avec Cisco AnyConnect. Voici donc une solution de contournement pour ces problèmes. Devrait fonctionner pour Ubuntu et Debian.


Solution de contournement (nouvelle - automatique)


Cette solution est automatique et a été créée par EdwardCooke (voir https://www.frakkingsweet.com/automatic-dns-configuration-with-wsl-and-anyconnect-client/). Ceci n’est que la première partie de sa solution mettant à jour resolv.conf au démarrage de WSL.





Réactiver la génération automatique de resolv.conf (si désactivée)


en commentant la désactivation avec #


sudo nano /etc/wsl.conf


`#[network]

#generateResolvConf = false



-

**Créer le script**
`sudo nano /bin/vpn-dns.sh


`#!/bin/bash


echo “Getting current DNS servers, this takes a couple of seconds”


/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command ’

$ErrorActionPreference=“SilentlyContinue”

Get-NetAdapter -InterfaceDescription “Cisco AnyConnect*” | Get-DnsClientServerAddress | Select -ExpandProperty ServerAddresses

Get-NetAdapter | ?{-not ($_.InterfaceDescription -like “Cisco AnyConnect*”) } | Get-DnsClientServerAddress | Select -ExpandProperty ServerAddresses

’ |

awk ‘BEGIN { print “# Generated by vpn fix func on”, strftime(“%c”); print } { print “nameserver”, $1 }’ |

tr -d ‘\r’ > /etc/resolv.conf

clear



-

**Le rendre exécutable/exécuter en tant que sudo**
`sudo chmod +x /bin/vpn-dns.sh
echo "$(whoami) ALL=(ALL) NOPASSWD: /bin/vpn-dns.sh" | sudo tee /etc/sudoers.d/010-$(whoami)-vpn-dns





Le faire s’exécuter au démarrage de WSL

`echo “sudo /bin/vpn-dns.sh” | sudo tee /etc/profile.d/vpn-dns.sh



Vous pouvez également l'exécuter manuellement :
`sudo /bin/vpn-dns.sh`

## Solution de contournement (ancienne - manuelle)

-

Trouver le serveur de noms avec **Windows PowerShell** (pendant la session VPN)
`nslookup


Vous obtiendrez l’adresse IPv4 de votre serveur de noms d’entreprise.

Copiez cette adresse.





Désactiver la génération de resolv.conf dans WSL :

`sudo nano /etc/wsl.conf



Copiez ce texte dans le fichier (pour désactiver la génération de resolve.conf au démarrage de WSL)
`[network]
generateResolvConf = false





Dans WSL, ajoutez votre serveur de noms d’entreprise à resolv.conf

`sudo nano /etc/resolv.conf



Supprimez les autres entrées et ajoutez l'IP de votre serveur de noms d'entreprise (si vous avez un serveur de noms secondaire, ajoutez-le sur une ligne séparée)

- `nameserver X.X.X.X` (où X.X.X.X est l'adresse obtenue à l'étape 1)

-

Configurez votre adaptateur VPN (si vous utilisez *Cisco AnyConnect*) **ouvrez un PowerShell en tant qu'administrateur**

- Trouvez le nom de votre adaptateur VPN : `Get-NetIPInterface` (dans mon cas : `"Cisco AnyConnect"`)

- Définissez la métrique de l'adaptateur (remplacez -Match par votre nom), **dans mon cas, je dois exécuter ceci après chaque redémarrage ou reconnexion VPN** :

`Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000


(Qu’est-ce que la métrique d’interface : utilisée pour déterminer la route, Windows utilise l’interface avec la métrique la plus basse)





Redémarrez WSL dans PowerShell : wsl.exe --shutdown





Testez dans WSL en exécutant : wget google.com — si cette commande fonctionne, c’est terminé.


Dans mon cas, j’ai des problèmes DNS quand j’essaie de me connecter à des ressources internes via le navigateur (sous Windows 10, par exemple : intranet), causés par la valeur de métrique élevée définie à l’étape 4 (ce qui désactive essentiellement la route VPN). Voici donc la solution de contournement de la solution de contournement :



  • Vérifiez votre métrique par défaut (de l’interface VPN) dans PowerShell (remplacez -Match par le nom de votre interface)


`Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match “Cisco AnyConnect”} | Get-NetIPInterface



- En cas de problèmes sous Windows 10, restaurez cette valeur par défaut avec **PowerShell en tant qu'administrateur** (remplacez la valeur à la fin par votre valeur par défaut) :

`Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 1

Répondre

Revenir à « Windows 10 »