Skip to content

Instantly share code, notes, and snippets.

@chrisgate
Forked from kendallroth/forward_wsl2_ports.ps1
Created February 23, 2024 07:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisgate/af58fe17b366b661c6660ed3497c8b68 to your computer and use it in GitHub Desktop.
Save chrisgate/af58fe17b366b661c6660ed3497c8b68 to your computer and use it in GitHub Desktop.
Forward WSL2 ports to host
# Forward WSL2 ports to host machine/platform (handles Windows Firewall)
#
# NOTE: 'iex' is a shortform for 'Invoke-Expression'
# Ports that should be forwarded to WSL2 and allowed through firewall (comma-separated)
$ports = @(8081);
# WSL IP address changes whenever WSL restarts
$wsl_ip = $(wsl hostname -I).Trim();
# Incoming requests from any IP should be matched
$listen_all_ips = '0.0.0.0';
if ( -Not $wsl_ip ) {
Write-Output "IP address for WSL 2 cannot be found";
exit;
}
Write-Output "WSL IP: '$wsl_ip'";
### Windows Firewall #####
$firewall_rule = "WSL2 Forwarded Ports";
$firewall_ports = $ports -join ",";
# Remove existing firewal rule (will error if not already present; can ignore)
iex "Remove-NetFireWallRule -DisplayName '$firewall_rule' ";
# Allow Expo ports through Windows Firewall
iex "New-NetFireWallRule -DisplayName '$firewall_rule' -Direction Inbound -LocalPort $firewall_ports -Action Allow -Protocol TCP;"
iex "New-NetFireWallRule -DisplayName '$firewall_rule' -Direction Outbound -LocalPort $firewall_ports -Action Allow -Protocol TCP;"
### WSL Port Proxy #####
# Show all previously proxied ports
iex "netsh interface portproxy show v4tov4"
# Configure port forwarding (via remove/add)
for ( $i = 0; $i -lt $ports.length; $i++ ) {
$port = $ports[$i];
# Remove previously proxied port
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$listen_all_ips"
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$listen_all_ips connectport=$port connectaddress=$wsl_ip"
}
# Show all newly proxied ports
iex "netsh interface portproxy show v4tov4"
cmd /c pause
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment