If apt update crawls, curl stalls, or git clone takes forever inside WSL, the problem almost always lives at the Windows networking layer, not inside Linux itself. WSL 2 runs behind a virtual NAT adapter, and that NAT layer introduces overhead, mismatched settings, and conflicts with Windows security tools that together kill download speed. This guide walks through every real fix, starting with the most effective one.

Why Is WSL 2 Internet So Slow on Windows?
WSL 2 uses a virtualized network adapter with Network Address Translation (NAT). Every packet your Linux environment sends or receives travels through this NAT layer before reaching your physical adapter. That extra hop adds latency and creates opportunities for things to go wrong.
Common causes of slow WSL network speed:
- NAT overhead from WSL 2’s virtual adapter
- DNS mismatches where WSL inherits a slow or broken Windows resolver
- Windows Defender scanning every packet and file WSL touches
- IPv6 fallback delays when your router or ISP handles IPv6 poorly
- Incorrect MTU size causing packet fragmentation and retransmissions
- TCP Segmentation Offload conflicts between the WSL virtual interface and the host adapter
Work through the fixes below in order. Most users solve the problem at Fix 1 or Fix 3.
Fix 1: Enable Mirrored Networking Mode
Mirrored networking makes WSL share the same IP address and network interfaces as your Windows host. It bypasses the NAT layer entirely, which removes the biggest source of slowness and reduces latency significantly.
Step 1. Close all WSL terminals and instances.
Step 2. Open PowerShell as Administrator and run this command to open the WSL config file:
notepad "$env:USERPROFILE\.wslconfig"Step 3. Add the following lines to the file (create it if it does not exist):
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=trueStep 4. Save the file, then shut down WSL completely:
wsl --shutdownStep 5. Relaunch WSL and test your download speed.
Mirrored mode requires Windows 11 22H2 or later. If you run an older build, skip to Fix 2.
Fix 2: Disable IPv6 Inside WSL
Many routers and ISPs handle IPv6 poorly. When WSL tries an IPv6 connection and it times out, it falls back to IPv4, adding several seconds of delay to every request. Disabling IPv6 inside WSL forces all traffic through the faster IPv4 path directly.
Step 1. Open your WSL terminal.
Step 2. Edit the sysctl config file:
sudo nano /etc/sysctl.confStep 3. Add these two lines at the bottom:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1Step 4. Save the file and apply the changes immediately:
sudo sysctl -pStep 5. Test your download speed to confirm the improvement:
curl -4 -o /dev/null http://speedtest.tele2.net/100MB.zipFix 3: Switch to a Faster DNS Resolver
WSL inherits Windows DNS settings but often ends up using a slow or unreliable resolver. Every package download, apt update, and git operation starts with a DNS lookup. A slow resolver adds noticeable delay to every single one of those requests. Switching to Cloudflare (1.1.1.1) or Google (8.8.8.8) cuts that delay significantly.
Step 1. In your WSL terminal, open the WSL config file:
sudo nano /etc/wsl.confStep 2. Add these lines to disable automatic DNS generation:
[network]
generateResolvConf = falseStep 3. Save and exit. Then remove the old resolver config and create a new one:
sudo rm /etc/resolv.conf
sudo nano /etc/resolv.confStep 4. Paste the following into the new file:
nameserver 1.1.1.1
nameserver 8.8.8.8Step 5. Save the file, then protect it from being overwritten automatically:
sudo chattr +i /etc/resolv.confStep 6. Restart WSL from PowerShell:
wsl --shutdownRelaunch WSL and run apt update to verify the speed improvement.
Fix 4: Exclude WSL from Windows Defender Real-Time Scanning
Windows Defender scans every file that WSL reads or writes, including temporary download data. That scanning adds substantial CPU overhead and cuts download throughput significantly. Excluding the WSL virtual file system from real-time scanning stops this interference immediately.
Step 1. Open Windows Security from the Start menu.
Step 2. Go to Virus and threat protection > Manage settings.
Step 3. Scroll down to Exclusions and click Add or remove exclusions.
Step 4. Click Add an exclusion > Folder.
Step 5. Paste this path and click Select Folder:
\\wsl.localhost\Step 6. Optionally, also add your specific distribution folder. You can find it at a path similar to:
C:\Users\YourName\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\rootfsStep 7. Shut down WSL from PowerShell and relaunch:
wsl --shutdownFix 5: Adjust the Network MTU Size
An incorrect Maximum Transmission Unit (MTU) causes packet fragmentation. When packets fragment, your system retransmits them, adding silent overhead to every network operation. The correct MTU is usually 1500 for Ethernet or 1420 for PPPoE and VPN connections.
Step 1. Find your optimal MTU. Open PowerShell as Administrator and run:
ping -f -l 1472 8.8.8.8Lower the number (try 1472, then 1450, then 1400) until you get a reply without fragmentation. Add 28 to that number to get your MTU value.
Step 2. Inside WSL, open the WSL config file:
sudo nano /etc/wsl.confStep 3. Add a boot command to set the MTU at startup (replace 1500 with your actual value if different):
[boot]
command = "ip link set dev eth0 mtu 1500"Step 4. Save the file, shut down WSL, and relaunch:
wsl --shutdownFix 6: Disable TCP Segmentation Offload (Advanced)
If you use mirrored networking mode with systemd enabled and still see slow speeds, TCP Segmentation Offload (TSO) conflicts between the WSL virtual interface and the host adapter can cause the problem. Disabling TSO at the guest OS level resolves this for many users.
Step 1. Confirm that systemd runs in your WSL instance. Open /etc/wsl.conf and verify it contains:
[boot]
systemd=trueStep 2. Edit the network link file inside WSL:
sudo nano /etc/systemd/network/99-default.linkStep 3. Add TCPSegmentationOffload=false under the [Link] section. The full file should look like this:
[Match]
OriginalName=*
[Link]
NamePolicy=keep kernel database onboard slot path
AlternativeNamesPolicy=database onboard slot path
MACAddressPolicy=persistent
TCPSegmentationOffload=falseStep 4. Save the file, then restart WSL:
wsl --shutdownRelaunch WSL and test your download speed again.
Update WSL Before Anything Else
If you have not updated WSL recently, do that first. Microsoft ships performance improvements in WSL updates regularly, and running an outdated version can explain slow speeds on its own.
Open PowerShell as Administrator and run:
wsl --updateAfter the update completes, shut down and relaunch WSL:
wsl --shutdownWSL Slow Internet Fixes: Which One Should You Try First?
| Fix | What It Does | Best For |
|---|---|---|
| Mirrored Networking | Removes NAT overhead entirely | Windows 11 22H2+ users |
| Disable IPv6 | Stops IPv6 fallback delays | All WSL 2 users |
| Faster DNS | Speeds up every domain lookup | All WSL 2 users |
| Defender Exclusion | Removes real-time scan overhead | High download usage |
| MTU Adjustment | Eliminates packet fragmentation | VPN or PPPoE users |
| Disable TSO | Fixes virtual interface conflicts | Mirrored mode + systemd |
Run wsl --update first, then apply the fixes from top to bottom. Most users see full speed restored after enabling mirrored networking and switching their DNS resolver.
