In diesem Post erfährst du, wie du Ports von Programme welche in WSL2 laufen in der Windows Firewall freigibst, damit sie aus dem Heimnetzwerk erreichbar sind. Wie kann ich mit SSH auf ein WSL2 Linux zugreifen? Wie gebe ich einen Webserver über WSL2 frei? Diese Fragen werden im Folgenden beantwortet

IP Adresse in WSL2 herausfinden

Zuerst wird die WSL2 IP-Adresse benötigt, damit man Windows mitteilen kann, an welche Adresse die Anfrage weiter geleitet werden muss. Der Befehl ist dabei von der Linux-Distribution abhängig.

Ubuntu

ifconfig

Debian

ip a

In meinem Fall war die IP-Adresse des WSL2 Linux 172.29.192.157, diese sollte in allen folgenden Kommandos angepasst werden.

PowerShell oder Eingabeaufforderung als Administrator ausführen

Für die folgenden Befehle ist es notwendig, die Windows PowerShell oder Eingabeaufforderung als Administrator zu starten (Rechtsklick: Als Administrator ausführen)

Wichtig ist nochmal, die IP-Adresse in den Befehlen anzupassen.

OpenSSH Server freigeben

Will man OpenSSH freigeben ist dies standardmäßig der Port 22, alternativ kann man auch einen anderen Port in der Config des SSH Servers einstellen.

Proxy Weiterleitung

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=22 connectaddress=172.29.192.157 connectport=22

Firewall Regel

netsh advfirewall firewall add rule name=”WSL2 Freigabe Port 22” dir=in action=allow protocol=TCP localport=22

WebServer freigeben

Will man Apache oder Nginx freigeben ist dies standardmäßig der Port 80.

Proxy Weiterleitung

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=172.29.192.157 connectport=80

Firewall Regel

netsh advfirewall firewall add rule name=”WSL2 Freigabe Port 80” dir=in action=allow protocol=TCP localport=80

Proxy Regeln überprüfen

Zum Anzeigen aller eingetragenen Proxy Regel kann folgender PowerShell Befehl verwendet werden

netsh interface portproxy show v4tov4

Firewall Regeln überprüfen

Windows Defender Firewall -> Erweiterte Einstellungen -> Eingehende Regeln

Proxy Regeln löschen

Will man eine Proxy-Regel mit einem spezifischen Port löschen, funktioniert dies mit dem folgenden PowerShell Befehl, vor der Benutzung sollte {port} durch den gewünschten zu löschenden Port ausgetauscht werden

netsh interface portproxy delete v4tov4 listenport={port} listenaddress=0.0.0.0

Firewall Regeln löschen

Windows Defender Firewall -> Erweiterte Einstellungen -> Eingehende Regeln

Freigabe funktioniert nach dem Reboot nicht mehr

Nach jedem Reboot bekommt das WSL2 Linux eine neue IP-Adresse, wodurch die alten Regeln nicht mehr funktionieren, um diese zu lösen, habe ich ein PowerShell Script geschrieben.

Das Script ruft die IP-Adresse einer WSL2 Ubuntu Distribution ab, löscht alle existierenden PortProxy Regeln und erstellt diese wieder mit der neuen WSL2 IP-Adresse

#### ------------ Neue WSL 2 IP-Adresse setzen ------------ ####

$wsl_ip = (ubuntu.exe -c "ifconfig eth0 | grep 'inet '").trim().split()| where {$_}
$regex = [regex] "\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"

$ip_array = $regex.Matches($wsl_ip) | %{ $_.value }

$wsl_ip = $ip_array[0]

Write-Host "WSL Machine IP: ""$wsl_ip"""

#### ------------ Alle PortProxy Regeln löschen ------------ ####

netsh int portproxy reset all

#### ------------ SSH Regel - Port 22 ------------ ####

netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=$wsl_ip

#### ------------ Webserver SSL Regel - Port 443 ------------ ####

netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=$wsl_ip

#### ------------ Webserver SSL Regel - Port 80 ------------ ####

netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=$wsl_ip