
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:
Setzen Sie die Fiddler-Option „Verbindung zu Remotecomputern zulassen“ und starten Sie Fiddler neu.
Holen Sie sich Ihre WSL-Netzwerkverbindungsinformationen (auf meinem Computer heißt der Adapter
vEthernet (WSL)
)Verwenden Sie diese Adresse, z. B. 172.26.224.1, wo Sie normalerweise localhost verwenden würden
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.
Lassen Sie die erforderlichen Ports durch die Firewall.
1.1 Start
Windows 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 „
Port
Weiter“.1.5 Wählen Sie
TCP
undSpecific 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
Public
Profil prüfen. Weiter.1.8 Geben Sie einen Namen für die Regel ein, z
WSL
. B. „Fertig“.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)
.
Testen Sie die Verbindung zum Windows-Host mit
curl
odertelnet
:3.1
curl 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 hosts
Datei zu aktualisieren.
In WSL:
Ausführen
cat /etc/hosts
, um den Namen des Windows-Hosts herauszufinden.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.internal
um 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.internal
von WSL aus zu starten. Wenn der Fiddler-Proxy-Port beispielsweise 8888 ist,
nc -v -w5 -z host.internal 8888