Netzwerkprobleme bei Verwendung von WSL2

Netzwerkprobleme bei Verwendung von WSL2

Derzeit verwende ich Windows 10 und WSL2 mit Ubuntu 20.04 für die Entwicklung. In den meisten Fällen funktioniert das hervorragend, abgesehen von einem Problem. In der Netzwerkschicht zwischen Windows/WSL2 scheint etwas kaputt zu sein. Wenn ich Angular mit „ng serve“ bediene, kann ich von Windows aus nicht darauf zugreifen.

Nur wenn Sie das Terminal in VS Code verwenden und den Browser über den Link in der Terminalausgabe öffnen, öffnet Windows es – es öffnet jedoch nicht „localhost:4200“, sondern 127.0.0.1:„random port“, was von unserem Proxy nicht zugelassen wird, was bedeutet, dass die Angular-Anwendung zwar angezeigt wird, aber nicht verwendet werden kann. Danach ist die Anwendung unter localhost:4201 verfügbar – aber nie, bevor sie von VS Code aus geöffnet wurde. Das bedeutet, dass ich keine anderen Terminals (wie das neue Windows Terminal oder ConEmu) verwenden kann, um die Anwendungen zu starten.

Soweit ich das beurteilen kann, handelt es sich hierbei eher um ein Windows-Problem als um ein Problem mit der Linux-Installation selbst, aber ich habe keine Möglichkeit gefunden, den Windows-Teil von WSL2 neu zu installieren, ohne alle Daten auf der Linux-Installation zu verlieren. Für Hinweise wäre ich dankbar.

Antwort1

Meine Antwort basiert auf dem Artikel Ausführen eines öffentlichen Servers von WSL 2, wobei die Theorie darin besteht, dass Windows einen virtuellen Adapter erstellt, der nicht richtig mit dem Internet-Netzwerkadapter verbunden ist.

Der Artikel wirft folgende Punkte auf:

  1. Stellen Sie in WSL sicher, dass Ihr Server IPv4 verwendet

  2. Wenn Sie eine Firewall in WSL verwenden, lassen Sie den entsprechenden Port (3390) zu.

  3. Leiten Sie in Windows Ihren Port in der Eingabeaufforderung oder Powershell mit Administratorrechten vom öffentlichen IP-Port an den WSL-Port weiter:

     netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=127.0.0.1
    
  4. Lassen Sie in Windows den Port mithilfe einer neuen eingehenden Regel durch die Windows-Firewall.

  5. Für den Zugriff aus dem Internet richten Sie eine Portweiterleitung für den Port im Router ein.

Ein YouTube-Video, das den Vorgang mit einigen kleinen Unterschieden beschreibt, ist WSL 2 Netzwerk.

Antwort2

Damit dies funktioniert, brauchte ich drei Dinge:

  1. Aktualisieren Sie auf die neueste Windows-Version
  2. wsl --shutdown
  3. Einstellungen > Netzwerk & Internet > Netzwerk zurücksetzen alshier beschrieben

Antwort3

Ich bin auch auf dieses Problem gestoßen. Das hier ist meine Lösung:WSL2-PortForward.cmd

Es kümmert sich für Sie um die Port-Proxy- und Firewall-Regeln und räumt hinterher auf.

@ECHO OFF
SET LXDISTRO=MyWSL2vm & SET WSL2PORT=3399 & SET HOSTPORT=3398
NETSH INTERFACE PORTPROXY RESET & NETSH AdvFirewall Firewall delete rule name="%LXDISTRO% Port Forward" > NUL
WSL -d %LXDISTRO% -- ip addr show eth0 ^| grep -oP '(?^<=inet\s)\d+(\.\d+){3}' > IP.TMP
SET /p IP=<IP.TMP
NETSH INTERFACE PORTPROXY ADD v4tov4 listenport=%HOSTPORT% listenaddress=0.0.0.0 connectport=%WSL2PORT% connectaddress=%IP% 
NETSH AdvFirewall Firewall add rule name="%LXDISTRO% Port Forward" dir=in action=allow protocol=TCP localport=%HOSTPORT% > NUL
ECHO WSL2 Virtual Machine %IP%:%WSL2PORT%now accepting traffic on %COMPUTERNAME%:%HOSTPORT%

Führen Sie den Befehl aus:

.\WSL2-PortForward.cmd

Ergebnis:

WSL2 Virtual Machine 172.17.109.95:3399 now accepting traffic on MYCOMPUTER:3398

Antwort4

Folgendes hat mein Problem gelöst:

Öffnen Sie den Hyper-V-Manager als Administrator

Wählen Sie Ihren PC aus und öffnen Sie den Virtual Switch Manager

WSL auswählen

Auf externes Netzwerk einstellen

Wählen Sie die Netzwerkkarte aus, über die der Datenverkehr läuft

Melden Sie sich dann beim WSL2-Terminal an und konfigurieren Sie eine IP-Adresse. Beispiel:

sudo ip addr flush dev eth0 sudo dhclient eth0

Hier habe ich es gefunden:https://stackoverflow.com/a/62438375/10853017

verwandte Informationen