# 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_ips = $(wsl hostname -I).Trim() -split '\s+'; $wsl_ip = $wsl_ips[0] # 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