WSL2 use “localhost” to access Windows service

You should use hostname.local to access Windows from WSL2 because that will use the correct IP. Note that hostname should be replaced with the result of the hostname command run in WSL2.
You can check the IP by running ping $(hostname).local from WSL2.

You also need to add a firewall rule to allow traffic from WSL2 to Windows. In an elevated PowerShell prompt run this:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

The command above should allow you to access anything exposed by Windows from WSL, no matter what port, however bear in mind that any apps you’ve launched get an automated rule created for them when you first launch them, blocking access from public networks (this is when you get a prompt from Windows Firewall, asking whether the app should be allowed to accept connections from public networks).

If you don’t explicitly allow, they will be blocked by default, which also blocks connections from WSL. So you might need to find that inbound rule, and change it from block to allow (or just delete it).

See info here:

https://github.com/microsoft/WSL/issues/4585#issuecomment-610061194

Leave a Comment