Skip to content

Instantly share code, notes, and snippets.

@wenlilearn
Forked from xmeng1/wsl2-network.ps1
Last active August 5, 2021 18:31
Show Gist options
  • Save wenlilearn/8d6d64f5d69672987dfa7282e85b612c to your computer and use it in GitHub Desktop.
Save wenlilearn/8d6d64f5d69672987dfa7282e85b612c to your computer and use it in GitHub Desktop.
WSL2 Port forwarding port to linux
$remoteport = wsl hostname -I
$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=@(3000,5000,8080);
#[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 ",";
Write-Host $ports_a
Write-Host $remoteport
Write-Host $addr
#[Script]
$script = {
function run([string]$ports_a,[string]$remoteport,[string]$addr){
#Remove Firewall Exception Rules
iex \"Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock'\";
Write-Host $ports_a
Write-Host $remoteport
Write-Host $addr
#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\";
}
Start-Sleep -s 25
}
}
Start-Process -FilePath powershell.exe -ArgumentList "-Command & {$script run '$ports_a' '$remoteport' '$addr'}" -verb RunAs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment