Skip to content

Instantly share code, notes, and snippets.

@tusharsnx
Last active June 26, 2022 09:14
Show Gist options
  • Save tusharsnx/7131c39a9ec4ad052cc735a08b193dda to your computer and use it in GitHub Desktop.
Save tusharsnx/7131c39a9ec4ad052cc735a08b193dda to your computer and use it in GitHub Desktop.
port forwarding to access wsl localhost from windows
# credit: https://github.com/edwindijas
$remoteport = bash.exe -c "ip a s eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if( $found ){
$remoteport = $matches[0];
} else{
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
#[Ports]
#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000);
#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";
#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
@tusharsnx
Copy link
Author

wsl ports are not available on windows by default on wsl 2. This script can be used to port forward required ports to the windows so that it can be accessed via localhost and make it available to all the devices on the same network.
The required ports can be added to the $ports and $addr can be pointed to a specific interface(eg. 127.0.0.1) instead of 0.0.0.0 which basically makes the ports available to all the interfaces including local area network.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment