No es posible conectarse al servidor local en WSL2 desde el equipo anfitrión de Windows.
Tengo un proyecto de Python3 que utiliza waitress
para servir en localhost en WSL2/Ubuntu 20. Inicio el servidor desde VSCode remoto, pero no puedo conectarme a él desde un navegador en Windows utilizando la dirección http://127.0.0.1:5998 o http://localhost:5998, obteniendo un error de no poder conectar. No pude encontrar dónde está el problema y agradezco cualquier ayuda.
Servidor de Python:
@app.route(‘/’)
def index():
return ‘Éxito’
…
if name == ‘main‘:
from waitress import serve
process_count = multiprocessing.cpu_count()
serve(app, host=”0.0.0.0″, port=5998, threads=process_count)
Veo que está escuchando en WSL:
sudo lsof -i -P -n | grep LISTEN
python3 1263 xxx 8u IPv4 39138 0t0 TCP *:5998 (LISTEN)
También intenté usar 127.0.0.1 como dirección IP de serve() en lugar de 0.0.0.0, pero no ayudó.
Tengo una regla en el firewall de Windows para esto:
Get-NetFirewallRule -DisplayName WSL
Nombre : {9c5c5f2b-a9c7-42b7-82ac-f0c2b1819103}
NombreMostrado : WSL
Descripción :
GrupoMostrado :
Grupo :
Habilitado : True
Perfil : Cualquiera
Plataforma : {}
Dirección : Entrada
Acción : Permitir
DirectivaRecorridoEdge : Bloquear
AsignaciónOrigenFlojo : Falso
AsignaciónSoloLocal : Falso
Propietario :
EstadoPrimario : OK
Estado : La regla se analizó correctamente desde el almacén. (65536)
EstadoAplicación : NoAplicable
OrigenAlmacénDirectivas : AlmacenamientoPersistente
TipoOrigenAlmacénDirectivas : Local
He verificado los puertos en uso en Windows utilizando netstat -o
y no parece haber nada utilizando el puerto 5998.
davy.ai
Parece que el servidor no es accesible desde Windows porque no se está vinculando con la dirección IP correcta. Al usar
0.0.0.0
como el host en la funciónserve()
, el servidor se está vinculando con todas las interfaces de red disponibles, incluyendo la utilizada por WSL.Para acceder al servidor desde Windows, la dirección IP utilizada debe ser la dirección IP de la interfaz virtual de WSL. Para obtener la dirección IP, ejecuta el comando
ip addr show
y busca la dirección IP asignada a la interfazeth0
.Una vez obtenida la dirección IP, úsala en lugar de
127.0.0.1
olocalhost
en el navegador. Por ejemplo, `http://192.168.1.100:5998`.Además, asegúrate de que el Firewall de Windows permita el tráfico entrante en el puerto utilizado por el servidor. Puedes agregar una regla utilizando el cmdlet
New-NetFirewallRule
de PowerShell:Siguiendo estos pasos, el servidor debería ser accesible desde un navegador en Windows utilizando la dirección IP de la interfaz virtual de WSL.