Skip to content

Instantly share code, notes, and snippets.

@juansedo
Created October 12, 2021 21:14
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 juansedo/960547083b9972316ff29ca30326d022 to your computer and use it in GitHub Desktop.
Save juansedo/960547083b9972316ff29ca30326d022 to your computer and use it in GitHub Desktop.
Port Binding WSL2 Instance on Windows 10 via PowerShell

Install net-tools on WSL2:

sudo apt install net-tools

File network.ps1 on Windows:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {   
  $arguments = "& '" + $myinvocation.mycommand.definition + "'"
  Start-Process powershell -Verb runAs -ArgumentList $arguments
  Break
}

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if ($found) {
  $remoteport = $matches[0];
}
else {
  Write-Output "IP address could not be found";
  exit;
}

$ports = @(5001, 19000, 19001);

Invoke-Expression "netsh interface portproxy reset";

for ($i = 0; $i -lt $ports.length; $i++) {
  $port = $ports[$i];
  Invoke-Expression "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport";
  Invoke-Expression "netsh advfirewall firewall add rule name=$port dir=in action=allow protocol=TCP localport=$port";
}

Invoke-Expression "netsh interface portproxy show v4tov4";

You can modify $ports array for your WSL2 ports.


Enable PowerShell to execute scripts:

set-executionpolicy remotesigned

Then, execute network.ps1 file.

Done!

Based on https://dev.to/vishnumohanrk/wsl-port-forwarding-2e22

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