Problemas de red al usar WSL2

Problemas de red al usar WSL2

Actualmente estoy usando Windows10 y WSL2 con Ubuntu 20.04 para desarrollar. En la mayoría de los casos, esto funciona excelente, salvo un problema. Parece que hay algo roto en la capa de red entre Windows/WSL2. Cuando sirvo angular usando 'ngserve', no puedo acceder a él desde Windows.

Solo cuando se usa el terminal en VS Code y se abre el navegador desde el enlace en la salida del terminal, Windows lo abrirá; sin embargo, no abre 'localhost:4200', abre 127.0.0.1:'puerto aleatorio', que es nuestro proxy no lo permite, lo que significa que la aplicación angular se mostrará pero no se podrá utilizar. Después de hacer esto, la aplicación estará disponible desde localhost:4201, pero nunca antes de abrirla desde VS Code. Esto significa que no puedo usar otras terminales (como la nueva Terminal de Windows o ConEmu) para iniciar las aplicaciones.

Hasta donde puedo decir, esto es un problema de Windows más que un problema con la instalación de Linux en sí, pero no he encontrado una manera de "reinstalar" la parte de Windows de WSL2 sin perder todos los datos de la instalación de Linux. Cualquier indicador sería apreciada.

Respuesta1

Mi respuesta está basada en el artículo. Ejecutando un servidor público desde WSL 2, donde la teoría es que Windows crea un adaptador virtual que no está conectado correctamente con el adaptador de red de Internet.

El artículo plantea los siguientes puntos:

  1. En WSL, asegúrese de que su servidor esté utilizando IPv4

  2. Si está utilizando un firewall en WSL, permita el puerto correspondiente (3390)

  3. En Windows, reenvíe su puerto desde el puerto IP público al puerto WSL en el símbolo del sistema o Powershell con derechos de administrador:

     netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=127.0.0.1
    
  4. En Windows, permita que el puerto atraviese el firewall de Windows mediante una nueva regla de entrada.

  5. Para acceder desde Internet, configure el reenvío de puertos para el puerto del enrutador.

Un vídeo de YouTube que describe el proceso con algunas pequeñas diferencias es Redes WSL 2.

Respuesta2

Necesitaba tres cosas para que esto funcionara:

  1. Actualice a la última versión de Windows
  2. wsl --shutdown
  3. Configuración > Red e Internet > Restablecer red comodescrito aquí

Respuesta3

También me encontré con esto; esta es mi solución:WSL2-PortForward.cmd

Se encarga del proxy del puerto y las reglas del firewall por usted y lo limpia por sí solo.

@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%

Ejecute el comando:

.\WSL2-PortForward.cmd

Resultado:

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

Respuesta4

Hacer esto resolvió mi problema:

Abra Hyper-V Manager como administrador

Seleccione su PC, abra Virtual Switch Manager

Seleccione WSL

Establecer en red externa

Seleccione la tarjeta de red por la que pasa el tráfico

Luego inicie sesión en la terminal wsl2 y configure una dirección IP. P.ej

sudo ip addr flush dev eth0 sudo dhclient eth0

Aquí es donde lo encontré:https://stackoverflow.com/a/62438375/10853017

información relacionada