Uno de los problemas que suelen encontrar los desarrolladores cuando utilizan Linux (WSL) en el subsistema de Windows es Conexión de host local WSL rechazada Es un error. Esto suele ocurrir cuando un servidor web, una base de datos u otro servicio de red se ejecuta en un entorno Linux pero Windows no puede acceder a él. La solución puede estar oculta en la configuración de la red y en los ajustes del firewall, por lo que es fundamental comprender las causas fundamentales del error y tomar las medidas adecuadas.
Evitar los obstáculos del cortafuegos
Al intentar acceder a un servicio que se ejecuta a través de WSL desde Windows, una de las razones más comunes es que el Firewall de Windows bloquea esta conexión. De forma predeterminada, el firewall protege contra conexiones entrantes desconocidas. Para superar esta situación, puede ser necesario crear reglas de entrada y salida, especialmente en instalaciones que utilizan un adaptador de red virtual como WSL 2. Estos pasos incluyen la configuración adecuada del firewall para acceder a los servicios en WSL a través de puertos específicos.
Para configurar los ajustes del firewall, suele ser suficiente abrir el símbolo del sistema (CMD) como administrador y utilizar los siguientes comandos. No hay que olvidar que `[PORT_NUMARASI]En la sección `, debes ingresar el número de puerto utilizado por el servicio al que deseas acceder (por ejemplo, 80, 443, 3000, 8080). Estos comandos liberan conexiones entrantes y salientes de cualquier programa a través del puerto especificado y facilitan la comunicación entre WSL y Windows.
netsh advfirewall firewall agregar nombre de regla =”WSL2 [PORT_NUMARASI] Directorio “entrante” = en acción = permitir protocolo = puerto local TCP =[PORT_NUMARASI]
netsh advfirewall firewall agregar nombre de regla =”WSL2 [PORT_NUMARASI] Saliente” dir=acción de salida=permitir protocolo=puerto local TCP=[PORT_NUMARASI]
Después de la ejecución exitosa de estos comandos, las posibilidades de que el firewall bloquee la conexión WSL se reducen significativamente. Sin embargo, si la conexión aún se rechaza, el problema puede estar en otra capa y puede ser necesario profundizar en la configuración de la red.
Comprensión de la configuración de red WSL
WSL, especialmente con su arquitectura WSL 2, tiene su propio adaptador de red virtual y dirección IP dinámica. Esto puede provocar que las llamadas realizadas directamente a localhost desde Windows no alcancen el servicio WSL esperado. Dado que WSL 1 utiliza la dirección IP del host directamente, estos problemas son menos comunes. En WSL 2, averiguar la dirección IP actual de la máquina virtual WSL es el primer paso para diagnosticar problemas de conectividad.
Puede abrir la terminal de Linux en WSL y ejecutar el siguiente comando. Este comando mostrará la dirección IP de su instancia WSL en la red local. Por lo general, deberá consultar la dirección inet que aparece debajo del adaptador eth0. Esta dirección IP es una dirección válida que se puede utilizar para acceder a su servicio dentro de WSL desde Windows. Debido a su naturaleza IP dinámica, esta dirección puede cambiar cada vez que se reinicia WSL, lo que puede requerir configuraciones adicionales para un acceso continuo.
dirección IP mostrar eth0
Desde su navegador o aplicación de Windows utilizando la dirección IP resultante http://[WSL_IP_ADRESI]:[PORT_NUMARASI] Puedes intentar acceder a él de la siguiente manera. Si la conexión se realiza correctamente con este método, queda claro que el problema se debe directamente a la falta de resolución del host local o al reenvío de puertos. En este caso, es importante recurrir a soluciones más permanentes en lugar de actualizar manualmente la dirección IP en cada reinicio.
Reenvío de puertos y gestión dinámica de IP
Dado que la naturaleza de IP dinámica de WSL 2 hace que reciba una IP diferente en cada reinicio, el reenvío de puertos entra en juego para proporcionar una solución estática. Es posible enrutar conexiones entrantes a una IP y un puerto específicos dentro de WSL escuchando en un puerto en el host de Windows. Esto hace que sea más fácil acceder a través de localhost en Windows porque Windows no tiene que lidiar directamente con el cambio de IP de WSL.
El comando netsh interface portproxy se utiliza para el reenvío de puertos. Este comando transfiere tráfico desde un puerto específico en Windows a una IP y un puerto en WSL. En el siguiente ejemplo, se supone que las solicitudes al puerto 8000 en Windows se dirigen a la dirección de WSL 172.20.10.2:8000. Debe personalizar este comando utilizando su propia dirección IP WSL y puerto de destino.
interfaz netsh portproxy agregar v4tov4 listeningport=[ANA_BILGISAYAR_PORTU] dirección de escucha=0.0.0.0 puerto de conexión=[WSL_SERVIS_PORTU] dirección de conexión =[WSL_IP_ADRESI]
La mayor desventaja de este método es que la dirección IP WSL es dinámica. Si la dirección IP de WSL cambia, deberá actualizar esta regla manualmente o actualizarla en cada inicio mediante un script automatizado. De lo contrario, la regla de enrutamiento creada anteriormente dejará de ser válida y es posible que vuelvan a ocurrir problemas de conexión. Esto hace que la automatización sea inevitable para los entornos de desarrollo continuo.
Soluciones alternativas y puntos de control
Incluso después de comprobar la configuración del firewall y de reenvío de puertos Conexión de host local WSL rechazada Si el error persiste, el origen del problema puede ser más simple. En primer lugar, es importante comprobar si el servicio dentro de WSL está realmente en funcionamiento. A veces, los servicios pueden detenerse inesperadamente o dar errores al iniciarse. En la terminal de Linux, ejecute comandos que verifiquen el estado del servicio (por ejemplo, sudo systemctl status [SERVIS_ADI] o ps auxiliar | grep [SERVIS_ADI]) será útil para ejecutar.
Además, el software antivirus de terceros o los clientes VPN también pueden bloquear las conexiones de red. Deshabilitar temporalmente dicho software o ajustar su configuración compatible con WSL puede resolver el problema. Finalmente, si el problema persiste a pesar de todos estos pasos, un reinicio completo de Windows y WSL puede ofrecer una solución simple pero efectiva. Esto ayuda a solucionar problemas temporales de la red restableciendo la pila de red y la máquina virtual WSL. Para cerrar WSL por completo, simplemente escriba wsl –shutdown en el símbolo del sistema y luego inícielo nuevamente.
Preguntas frecuentes
¿Por qué se produce un error de conexión localhost rechazada en WSL?
Este error generalmente ocurre porque el Firewall de Windows está bloqueando las conexiones WSL, WSL está usando una dirección IP dinámica o el servicio dentro de Linux no se está ejecutando.
¿Cómo puedo encontrar la dirección IP de WSL 2?
Puede averiguar la dirección IP actual de su instancia WSL ejecutando el comando ‘ip addr show eth0’ en la terminal WSL. Esta dirección suele aparecer bajo la etiqueta ‘inet’.
¿Por qué se infringe la regla de reenvío de puertos cada vez que se reinicia WSL?
Debido a que WSL 2 utiliza una dirección IP dinámica, la dirección IP puede cambiar cada vez que se reinicia. Esto hace que las reglas de reenvío de puertos predefinidas dejen de ser válidas y requieran una actualización manual o automática.
