Problemas de conexión de WSL Localhost: causas y soluciones efectivas

El Subsistema de Windows para Linux (WSL) ofrece a los desarrolladores y administradores de sistemas la experiencia de Linux en un entorno Windows, aunque ocasionalmente Problemas de conexión al host local WSL Es posible encontrar. Esta situación, que se produce especialmente cuando Windows necesita acceder a aplicaciones o servicios desarrollados, se manifiesta con el mensaje «conexión rechazada». Estos fallos suelen deberse a varias causas fundamentales, como configuraciones de red, ajustes de firewall o servicios dentro de Linux que no funcionan correctamente.

Fundamentos y diagnóstico de redes WSL

Aunque WSL se ejecuta en la capa de virtualización de Windows, tiene su propia interfaz de red independiente. Esto significa que se debe poder acceder a un servicio que se ejecuta en un entorno Linux (por ejemplo, un servidor web o API) a través de localhost de forma predeterminada. Sin embargo, el hecho de que Windows no proporcione este acceso suele indicar una interrupción en la comunicación entre sistemas. Para comprender el origen del problema, primero es necesario verificar si el servicio que está ejecutando en el entorno WSL realmente está escuchando en el puerto esperado. Este primer paso desempeña un papel fundamental a la hora de determinar si el error de rechazo de conexión se origina en la capa de aplicación o en la capa de red.

En la terminal de Linux netstat -tulnp | Con el comando grep LISTEN, puede ver qué puertos escuchan qué aplicaciones. El resultado de este comando muestra claramente si su servicio está en el puerto TCP o UDP esperado (en estado ESCUCHA). En sistemas Linux modernos ss -tulnp | El comando grep LISTEN puede realizar una función similar y proporcionar resultados más rápidos y detallados. Si el servicio que espera no está en esta lista o aparece con un número de puerto incorrecto, el problema lo causa directamente la propia aplicación. En tal caso, revisar la configuración de la aplicación (por ejemplo, número de puerto, configuración de enlace de IP), examinar los archivos de registro de la aplicación o reiniciar el servicio generalmente proporciona una solución. Por ejemplo, es importante verificar si una aplicación Node.js o Python solo se conecta a la dirección 127.0.0.1 (que solo permite el acceso desde WSL) o 0.0.0.0 (que permite el acceso desde todas las interfaces). Después de asegurarse de que el servicio funciona correctamente, sería una mejor manera de investigar los obstáculos en el lado de Windows.

Impacto de la configuración del firewall

El Firewall de Windows Defender es un factor común que bloquea la comunicación entre WSL y Windows. En la configuración predeterminada, Windows puede bloquear automáticamente algunas conexiones entrantes desde el exterior o tratar de manera sospechosa cierto tráfico de red proveniente de WSL. Esto hace que reciba un error de «conexión rechazada» cuando intenta acceder a un servidor web dentro de WSL desde un navegador de Windows. Para eliminar este obstáculo, a menudo es obligatorio crear una regla de entrada en el Firewall de Windows para un puerto específico o su aplicación WSL.

Es necesario acceder a la configuración del Firewall de Windows para la creación de reglas de entrada. Para hacer esto, puede buscar «Firewall de Windows Defender» en el menú «Inicio» y seleccionar «Configuración avanzada». En la ventana «Firewall de Windows Defender con seguridad avanzada» que se abre, vaya a la sección «Reglas entrantes» a la izquierda y haga clic en la opción «Nueva regla…» a la derecha. En el asistente que se abre, seleccione la opción «Puerto» y haga clic en «Siguiente». Aquí puede crear una regla ingresando el protocolo TCP o UDP seguido de un número de puerto específico (por ejemplo, 8080). Por ejemplo, si un servidor web que se ejecuta en WSL usa el puerto 8080, definir una regla de entrada para este puerto permite que las aplicaciones del lado de Windows accedan a este servicio. Al crear la regla, es importante seleccionar cuidadosamente los perfiles (Dominio, Privado, Público) desde los cuales se permitirá la conexión; Normalmente, el perfil «Personalizado» será suficiente, pero es posible que se requieran otros perfiles según su entorno de desarrollo. Termine dándole a la regla un nombre significativo (por ejemplo, «Servidor web WSL 8080»). Alternativamente, si su aplicación en WSL se inicia mediante una aplicación de Windows, puede permitir todas las conexiones desde esa aplicación creando una regla de «Programa».

Reenvío de puertos y gestión de direcciones IP

La estructura dinámica de direcciones IP de WSL a veces puede causar problemas de conexión. WSL puede recibir una dirección IP diferente cada vez que se inicia, lo que provoca que las reglas de red o las aplicaciones previamente configuradas con una dirección IP fija dejen de funcionar. Una forma de solucionar este problema es reenviar un puerto de Windows específico a un puerto en la dirección IP dinámica de WSL mediante el comando netsh interface portproxy en Windows. Este método ofrece una solución práctica, especialmente en escenarios donde la dirección IP del WSL cambia con frecuencia y facilita el acceso a través de ‘localhost’.

Por ejemplo, la interfaz netsh portproxy agrega v4tov4 listeningport=8080 listeningaddress=0.0.0.0 connectport=8080 connectaddress= Con el comando, puede redirigir el tráfico que llega al puerto 8080 de Windows al puerto 8080 en la dirección IP específica de WSL. El uso de `listenaddress=0.0.0.0` permite a Windows escuchar conexiones desde todas las interfaces de red, permitiendo que otros dispositivos en la red local accedan al servicio WSL. Para averiguar la dirección IP actual de WSL, en la dirección IP del terminal WSL, muestre eth0 | grep inet | awk ‘{imprimir $2}’ | Se puede utilizar el comando cut -d/ -f1. Este comando devolverá la dirección IP actual asignada al WSL. Por lo general, no se necesita ningún paso adicional para que esta regla sea permanente; permanece en vigor cuando se reinicia Windows. Puede utilizar el comando netsh interface portproxy show all para ver todas las reglas de reenvío de puertos existentes y el comando netsh interface portproxy delete v4tov4 listeningport=8080 listeningaddress=0.0.0.0 para eliminar una regla específica. Después de agregar la regla de redireccionamiento, las solicitudes realizadas desde Windows a localhost:8080 llegarán correctamente al servicio en WSL. Esta solución prácticamente resuelve los problemas de acceso que surgen especialmente debido a la estructura IP dinámica de WSL 2.

Controles sistémicos y soluciones adicionales

En algunos casos, comprobaciones más generales del sistema o ajustes adicionales pueden solucionar los problemas de conexión. Por ejemplo, usar el comando wsl.exe –shutdown en Windows PowerShell o el símbolo del sistema para reiniciar toda la máquina virtual WSL y luego reiniciar cualquier distribución WSL (por ejemplo, wsl.exe -d Ubuntu o simplemente `wsl.exe`) puede corregir errores temporales de red. Este comando cierra todas las instancias en ejecución de WSL y da como resultado una configuración de red limpia con un nuevo comienzo. Además, para cerrar una distribución específica, use wsl.exe –terminate También se puede utilizar el comando. La configuración de VPN o proxy también puede afectar las conexiones de host local entre WSL y Windows. Las VPN de “túnel completo”, en particular, pueden redirigir el tráfico de la red WSL, provocando comportamientos inesperados o denegación de conexión. Si está utilizando una conexión VPN activa, puede que valga la pena desactivarla para realizar pruebas y volver a intentar la conexión. Asegúrese de que la configuración de su proxy enrute correctamente las solicitudes de red de WSL o de su aplicación.

Además, los problemas que afectan la resolución DNS de WSL también pueden provocar indirectamente un error de denegación de conexión. Si también tiene problemas para acceder a recursos externos desde WSL, es importante verificar el archivo /etc/resolv.conf de WSL y asegurarse de que contenga los servidores DNS correctos. De forma predeterminada, WSL crea automáticamente este archivo desde la configuración DNS de Windows. Si desea desactivar la creación automática de DNS y configurar sus propios servidores DNS manualmente, vaya a /etc/wsl.conf [network] Puede agregar generateResolvConf = false en la sección y luego editar el archivo /etc/resolv.conf usted mismo. Si es necesario, puede optimizar la resolución editando este archivo o verificando la configuración DNS de Windows. Estos pasos juegan un papel importante en el diagnóstico y solución de problemas de red más complejos. Finalmente, comprobar si hay algún problema con sus adaptadores de red de Windows (especialmente los relacionados con WSL, por ejemplo, “WSL” o “vEthernet (WSL)”), actualizar los controladores o restablecer la configuración de red también se puede considerar como último recurso. Estos pasos a menudo ayudan a solucionar posibles daños en componentes clave de la red.

Preguntas frecuentes

¿Cuál es la causa más común de error de rechazo de conexión de localhost en WSL?

La causa más común puede ser que el Firewall de Windows Defender esté bloqueando las conexiones entrantes desde WSL o que el servicio dentro de WSL no esté escuchando correctamente en un puerto en particular.

¿Qué configuración debo realizar en el Firewall de Windows?

En Windows Defender Firewall con seguridad avanzada, debe permitir conexiones creando una nueva ‘Regla de entrada’ para el puerto utilizado por su aplicación en WSL.

¿Qué debo hacer si cambia la dirección IP de WSL?

Puede averiguar la dirección IP dinámica de WSL y dirigir un puerto de Windows específico a la dirección IP actual de WSL utilizando el comando ‘netsh interface portproxy’ en Windows.

We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept