This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Windows Subsystem Linux(WSL)

  • _index

WSL Mirrored Network Mode Configuration Guide

WSL 2.6.0 networking upgrade configuration guide

Version Requirements

Current version status:

  • Latest stable: 2.5.9 (known networking issues)
  • Recommended version: 2.6.0 preview (full mirrored mode support)

Mode Comparison Analysis

Featurebridge mode (deprecated)mirrored mode (recommended)
Protocol architectureDual-stackShared stack
IP address allocationIndependent IP (Windows + WSL)Shared host IP
Port resourcesSeparateShared ports (conflict-avoidance required)
Network performanceRelatively heavyLightweight & efficient
Configuration complexitySimpleRequires deep firewall policy setup

Standard Configuration Steps

1. Network Mode Settings

Configure the base mode via WSL Settings app:

  1. Open the Settings app
  2. Select the Network tab
  3. Set network mode to Mirrored
  4. Apply the configuration and restart WSL

2. Firewall Policy Configuration

Run the complete policy configuration via PowerShell:

# Define the WSL VM GUID
$wslGuid = '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}'

# Configure firewall policies (execute in order)
Set-NetFirewallHyperVVMSetting -Name $wslGuid -Enabled True
Set-NetFirewallHyperVVMSetting -Name $wslGuid -DefaultInboundAction Allow
Set-NetFirewallHyperVVMSetting -Name $wslGuid -DefaultOutboundAction Allow
Set-NetFirewallHyperVVMSetting -Name $wslGuid -LoopbackEnabled True
Set-NetFirewallHyperVVMSetting -Name $wslGuid -AllowHostPolicyMerge True

# Verify configuration results
Get-NetFirewallHyperVVMSetting -Name $wslGuid

3. Port Mapping Validation

# Example: Check port 80 usage
Get-NetTCPConnection -LocalPort 80

Common Issue Troubleshooting

Issue 1: External Connections Fail

  • Check step: All fields returned by Get-NetFirewallHyperVVMSetting should be True/Allow
  • Solution: Re-run the firewall policy configuration commands in order

Issue 2: Port Conflicts

  • Check method: Use netstat -ano to view port usage
  • Handling advice: Prefer to release ports occupied by Windows, or change the listening port in the WSL service

Validation Steps

  1. Start your WSL service (e.g., Nginx/Apache)
  2. Access from Windows host: http://localhost:<port>
  3. Access from LAN devices: http://<host-ip>:<port>

References

  1. WSL Official Networking Docs
  2. WSL 2.6.0 Release Notes

wsl

Configure wsl

Remote access ssh

wsl

sudo apt install openssh-server
sudo nano /etc/ssh/sshd_config
/etc/ssh/sshd_config

...STUFF ABOVE THIS...
Port 2222
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::

...STUFF BELOW  THIS...

windows

service ssh start
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=172.23.129.80 connectport=2222
netsh advfirewall firewall add rule name="Open Port 2222 for WSL2" dir=in action=allow protocol=TCP localport=2222
netsh interface portproxy show v4tov4
netsh int portproxy reset all

Configure wsl

https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig

Set-Content -Path "$env:userprofile\\.wslconfig" -Value "
# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=2GB

# Sets the VM to use two virtual processors
processors=2

# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
# kernel=C:\\temp\\myCustomKernel

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
# kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=1GB

# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
swapfile=C:\\temp\\wsl-swap.vhdx

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
pageReporting=false

# Turn off default connection to bind WSL 2 localhost to Windows localhost
localhostforwarding=true

# Disables nested virtualization
nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
debugConsole=true
"