Wie verbinde ich WSL mit einem lokalen Windows-Host?

Wie verbinde ich WSL mit einem lokalen Windows-Host?

Ich versuche, WSL einen Localhost-Proxy (eigentlich ist es Fiddler) auf meinem Windows verwenden zu lassen, aber ich kann keine entsprechende Verbindung erkennen und Downloads schlagen normalerweise fehl. Wie kann ich das beheben?

Ich weiß, dass ich vom Windows-Localhost aus eine Verbindung zum Linux-Localhost herstellen kann, aber wie kann ich das umkehren?

WSL ist Ubuntu 18.04

Antwort1

Ich bin nicht sicher, ob das Folgende mit Anwendungen funktioniert, die gebunden sind anNurlocalhost, aber das hat für Fiddler und WSL2 funktioniert:

  1. Setzen Sie die Fiddler-Option „Verbindung zu Remotecomputern zulassen“ und starten Sie Fiddler neu. Fiddler-Optionen: Erlauben Sie Remotecomputern die Verbindung

  2. Holen Sie sich Ihre WSL-Netzwerkverbindungsinformationen (auf meinem Computer heißt der Adapter vEthernet (WSL)) WSL-Netzwerkverbindungsdetails

  3. Verwenden Sie diese Adresse, z. B. 172.26.224.1, wo Sie normalerweise localhost verwenden würden curl -I 172.26.224.1 Ausgabe in WSL2

Antwort2

Sie sollten den folgenden Befehl in einer Powershell als Administrator ausführen:

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

Dieser Befehl kommt von diesemWSL2-Ticket. Firewall-Regeln, die sich auf die WSL-IP-Adresse beziehen, sind wirkungslos, da sich die IP bei WSL2 ständig ändert.

Bearbeiten 2023: Ein neuerNetzwerkspiegelungsmodusund ein neuesTool zur Firewall-VerwaltungWurden umgesetzt.

Antwort3

WSL 2 erfordert im Vergleich zu WSL 1 etwas mehr Arbeit.

  1. Lassen Sie die erforderlichen Ports durch die Firewall.

    1.1 StartWindows Defender Firewall with Advanced Security

    1.2 Wählen Sie im linken Bereich aus Incoming Rules.

    1.3 Klicken Sie im rechten Bereich auf New Rule.

    1.4 Wählen Sie als Regeltyp „ PortWeiter“.

    1.5 Wählen Sie TCPund Specific local ports. Geben Sie den Port, eine kommagetrennte Liste von Ports oder einen Portbereich ein. Weiter.

    1.6 Wählen Sie Allow connection. Weiter.

    1.7 Nur das PublicProfil prüfen. Weiter.

    1.8 Geben Sie einen Namen für die Regel ein, z WSL. B. „Fertig“.

  2. Finden Sie die IP-Adresse von WSL darin heraus:

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

Dies ist die IPv4-Adresse der Netzwerkschnittstelle vEthernet (WSL).

  1. Testen Sie die Verbindung zum Windows-Host mit curloder telnet:

    3.1curl ip.from.step.2:port

Ich habe dieses Verfahren verwendet, um eine Verbindung zu einem Oracle-Server und einem unter Windows laufenden X-Server herzustellen.

Aktualisieren: Da sich die IP-Adresse von WSL bei jedem Windows-Neustart ändert, ist es praktisch, sie automatisch abzurufen und die hostsDatei zu aktualisieren.

In WSL:

  1. Ausführen cat /etc/hosts, um den Namen des Windows-Hosts herauszufinden.

  2. Fügen Sie den folgenden Code hinzu ~/.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
    

Antwort4

Es gibt eine Komfortfunktion, die mitgeliefert wirdWSL-VPNKit. Wenn Sie diese Distribution wie in den README-Anweisungen gezeigt installieren und importieren, können Sie sie verwenden, host.internalum den Windows-Host zu erreichen, ohne dessen IP-Adresse zu kennen.

Nach dem Herunterladen

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

Fügen Sie zu Ihrer ~/.bashrc hinzu,

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

Nachdem Sie das Terminal neu geladen haben, versuchen Sie, host.internalvon WSL aus zu starten. Wenn der Fiddler-Proxy-Port beispielsweise 8888 ist,

nc -v -w5 -z host.internal 8888

verwandte Informationen