web-dev-qa-db-fra.com

Problèmes de réseau utilisant WSL2

Actuellement, j'utilise Windows10 et WSL2 avec Ubuntu 20.04 pour le développement. Pour la plupart des cas, cela fonctionne excellent, à part un problème. Il semble y avoir quelque chose de brisé dans la couche de réseau entre Windows/WSL2. Lorsque vous servez angular utilisant 'NG Servir', je ne peux pas y accéder à partir de Windows.

Seulement lorsque vous utilisez le terminal dans le code VS et que vous ouvrez le navigateur du lien de la sortie terminale, Windows ouvrira-t-il - cependant, il n'ouvre pas 'localhost: 4200', il ouvre 127.0.0.1: "Port" qui est Non autorisé par notre proxy, ce qui signifie que l'application angular _ sera apparue mais ne sera pas utilisable. Après cela, l'application est disponible chez Localhost: 4201 - mais jamais avant de l'ouvrir de code VS. Cela signifie que je ne peux pas utiliser d'autres terminaux (comme le nouveau terminal Windows ou Consemu) pour démarrer les applications.

Pour autant que je sache, c'est un problème de Windows plutôt qu'un problème avec l'installation Linux-installation elle-même, mais je n'ai pas trouvé de moyen de "réinstaller" la partie Windows de WSL2 sans perdre toutes les données sur l'installation de Linux. Tous les pointeurs seraient appréciés.

2
Lars Rødal

Ma réponse est basée sur l'article Exécution d'un serveur public à partir de WSL 2 , où la théorie est que Windows crée un adaptateur virtuel qui n'est pas correctement ponté avec l'adaptateur réseau Internet.

L'article soulève les points suivants:

  1. Dans WSL, assurez-vous que votre serveur utilise IPv4

  2. Si vous utilisez un pare-feu dans WSL, autorisez le port correspondant (3390)

  3. Dans Windows, transférez votre port du port de propriété intellectuelle publique au port WSL dans l'invite de commande ou PowerShell avec les droits de l'administrateur:

     netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=127.0.0.1
    
  4. Sous Windows, laissez le port via le pare-feu Windows à l'aide d'une nouvelle règle entrante.

  5. Pour l'accès à partir d'Internet, configurez le transfert de port pour le port du routeur.

Une vidéo YouTube décrivant le processus avec quelques petites différences est réseau de la WSL 2 .

1
harrymc

J'ai également rencontré cela aussi; C'est ma solution: WSL2-PORTFORWART.CMD

Il s'occupe des règles de proxy du port et de pare-feu pour vous et nettoie après elle-même.

@ECHO OFF
SET LXDISTRO=MyWSL2vm & SET WSL2PORT=3399 & SET HOSTPORT=3398
NETSH INTERFACE PORTPROXY RESET & NETSH AdvFirewall Firewall delete rule name="%LXDISTRO% Port Forward" > NUL
WSL -d %LXDISTRO% -- ip addr show eth0 ^| grep -oP '(?^<=inet\s)\d+(\.\d+){3}' > IP.TMP
SET /p IP=<IP.TMP
NETSH INTERFACE PORTPROXY ADD v4tov4 listenport=%HOSTPORT% listenaddress=0.0.0.0 connectport=%WSL2PORT% connectaddress=%IP% 
NETSH AdvFirewall Firewall add rule name="%LXDISTRO% Port Forward" dir=in action=allow protocol=TCP localport=%HOSTPORT% > NUL
ECHO WSL2 Virtual Machine %IP%:%WSL2PORT%now accepting traffic on %COMPUTERNAME%:%HOSTPORT%

Exécutez la commande:

.\WSL2-PortForward.cmd

Résultat:

WSL2 Virtual Machine 172.17.109.95:3399 now accepting traffic on MYCOMPUTER:3398
0
Daniel Milisic

J'avais besoin de trois choses pour que cela fonctionne:

  1. Mise à niveau vers la dernière version de Windows
  2. wsl --shutdown
  3. Paramètres> Réseau et Internet> Réinitialisation réseau comme décrit ici
0
Michael Cole