¿Cómo conectar wsl a un localhost de Windows?

¿Cómo conectar wsl a un localhost de Windows?

Estoy intentando permitir que WSL use un proxy de host local (en realidad es Fiddler) en mi Windows, pero no puedo ver ninguna conexión como esa y las descargas generalmente fallan, ¿cómo soluciono eso?

Sé que puedo conectarme al host local de Linux desde Windows, pero ¿cómo puedo revertir esto?

WSL es Ubuntu 18.04

Respuesta1

No estoy seguro de si lo siguiente funcionará con aplicaciones que están vinculadas ajustolocalhost, pero esto funcionó para Fiddler y WSL2:

  1. Configure la opción de Fiddler "Permitir que se conecten computadoras remotas" y reinicie Fiddler Opciones de Fiddler: permitir que se conecten computadoras remotas

  2. Obtenga la información de su conexión de red WSL (en mi máquina, el adaptador se llama vEthernet (WSL)) Detalles de conexión de red WSL

  3. Utilice esa dirección, por ejemplo, 172.26.224.1 donde normalmente utilizaría localhost curl -I 172.26.224.1 salida en WSL2

Respuesta2

Debe ejecutar el siguiente comando en PowerShell como administrador:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

Este comando viene de esto.billete WSL2. Cualquier regla de firewall relacionada con la dirección IP de WSL no será efectiva porque con WSL2 la IP cambia cada vez.

Editar 2023: Un nuevomodo espejo de redy un nuevoherramienta de gestión de cortafuegosse han aplicado.

Respuesta3

WSL 2 requiere algo de trabajo adicional en comparación con WSL 1.

  1. Permita que los puertos requeridos atraviesen el firewall.

    1.1 LanzamientoWindows Defender Firewall with Advanced Security

    1.2 En el panel izquierdo seleccione Incoming Rules.

    1.3 En el panel derecho, haga clic en New Rule.

    1.4 Para el tipo de regla seleccione Port. Próximo.

    1.5 Seleccione TCPy Specific local ports. Inserte el puerto, una lista de puertos separados por comas o un rango de puertos. Próximo.

    1.6 Seleccione Allow connection. Próximo.

    1.7 Verificar solo el Publicperfil. Próximo.

    1.8 Ingrese un nombre para la regla. p.ej WSL. Hecho.

  2. Descubra la dirección IP de WSL desde dentro:

grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'

Esta es la dirección IPv4 de la interfaz de red vEthernet (WSL).

  1. Pruebe la conexión al host de Windows usando curlo telnet:

    3.1curl ip.from.step.2:port

He utilizado este procedimiento para conectarme a un servidor Oracle y a un servidor X que se ejecuta en Windows.

Actualizar: Dado que la dirección IP de WSL cambiará cada vez que se reinicie Windows, es conveniente recuperarla y actualizar el hostsarchivo automáticamente.

En WSL:

  1. ejecútelo cat /etc/hostspara averiguar el nombre del host de Windows.

  2. Agregue el siguiente código a ~/.profile:

    HOST=<WINDOWS_HOSTNAME>
    IP_HOST=$(grep -m 1 $HOST /etc/hosts)
    OLD_IP=$(echo "$IP_HOST" | awk '{print $1}')
    NEW_IP=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}')
    
    if [ "$NEW_IP" != "$OLD_IP" ]; then
       echo "Updating IP Address-hostname mapping"
       sudo sed -i "s|$IP_HOST|$NEW_IP\t$HOST|" /etc/hosts
       echo "$HOST has the IP Address $NEW_IP"
    fi
    

Respuesta4

Hay una "función" de conveniencia que viene conWSL-VPNKit. Si instala e importa esta distribución como se muestra en las instrucciones README, podrá utilizarla host.internalpara acceder al host de Windows sin conocer su dirección IP.

Después de la descarga,

wsl --import wsl-vpnkit --version 2 $env:USERPROFILE\wsl-vpnkit wsl-vpnkit.tar.gz

Agregue a su ~/.bashrc,

wsl.exe -d wsl-vpnkit --cd /app service wsl-vpnkit status >/dev/null || wsl.exe -d wsl-vpnkit --cd /app service wsl-vpnkit start

Después de recargar el terminal, intenta golpear host.internaldesde WSL. Por ejemplo, si el puerto proxy de Fiddler es 8888,

nc -v -w5 -z host.internal 8888

información relacionada