'WSL2 network unreachable [closed]

A couple of weeks ago, WSL suddenly could not reach any IP addresses nor resolve any domains. Even internal network IPs are not reachable.

>lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal

❯ neofetch
            .-/+oossssoo+/-.               klewis@NOTEBOOK-KLEWIS
        `:+ssssssssssssssssss+:`           ----------------------
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 20.04.1 LTS on Windows 10 x86_64
    .ossssssssssssssssssdMMMNysssso.       Kernel: 5.4.72-microsoft-standard-WSL2
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Uptime: 1 hour, 20 mins
  +ssssssssshmydMMMMMMMNddddyssssssss+     Packages: 1405 (dpkg)
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Shell: zsh 5.8
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Theme: Adwaita [GTK3]
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Icons: Adwaita [GTK3]
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Terminal: Windows Terminal
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: Intel i7-7820HK (8) @ 2.903GHz
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Memory: 968MiB / 5942MiB
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Font: Cantarell 11 [GTK3]
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
  +sssssssssdmydMMMMMMMMddddyssssssss+
   /ssssssssssshdmNNNNmyNMMMMhssssss/
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.
❯ ifconfig

❯ ccat /etc/resolv.conf
nameserver 9.9.9.9
nameserver 8.8.8.8

❯ ccat /etc/wsl.conf
[user]
default=klewis

# Now make it look like this and save the file when you're done:
[automount]
root = /
options = "metadata"

[network]
generateResolvConf = false
❯ ping 127.0.0.1
ping: connect: Network is unreachable
❯ ping 192.168.0.1
ping: connect: Network is unreachable
❯ ping 8.8.8.8
ping: connect: Network is unreachable
❯ ping google.com
ping: google.com: Temporary failure in name resolution
❯ nslookup google.com 9.9.9.9
net.c:536: probing sendmsg() with IP_TOS=b8 failed: Network is unreachable
;; connection timed out; no servers could be reached

❯ ip route
Error: ipv4: FIB table does not exist.
Dump terminated

❯ ip addr show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 86:9a:be:53:f0:44 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 1e:ff:ad:a4:c4:a7 brd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
5: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:15:5d:b7:f4:da brd ff:ff:ff:ff:ff:ff
C:\> ipconfig
Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #7
   Physical Address. . . . . . . . . : 00-15-5D-E5-0C-1B
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::1962:7d4e:a75e:8d62%78(Preferred)
   IPv4 Address. . . . . . . . . . . : 192.168.16.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 1308628317
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-27-B3-1F-34-9C-B6-D0-DD-8C-CF
   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled
>sudo ip route add default via 192.168.16.1
Error: Nexthop has invalid gateway.

I have looked through GH and found solutions that worked for others. Things I have tried:

  • netsh winsock reset
    netsh int ip reset all
    netsh winhttp reset proxy
    ipconfig /flushdns
    
  • deleted Hyper-V virtual adapters and restarting to let Windows rebuild

  • Changed where the Virtual Switch connects to in Hyper-V Virtual Switch Manager from Internal Network to External Network

  • Ensured %TEMP% is not compressed

  • Ensured no file nor folder under %TEMP% were compressed

  • Ensured no firewall was running

  • https://github.com/microsoft/WSL/issues/4926

  • https://github.com/microsoft/WSL/issues/4731

  • turned off Generation of resolv.conf and add gateway, 9.9.9.9 and 8.8.8.8 to resolv.conf



Solution 1:[1]

As of build 19042.1052, this is working again with no changes from my end. I am unsure as to the actual cause, but since I can no longer reproduce it, further troubleshooting seems moot.

Solution 2:[2]

Running below command(and accessing the console again) fixed the "Network Unreachable" issue for me

wsl --shutdown

Solution 3:[3]

I just got this situation resolved on my computer. My background was :

  1. I'm using WSL2
  2. Tried on Ubuntu 16.04 and Ubuntu 20.04
  3. I still can't connect to the internet when on a VPN

Step 1 : Figure out your local Gateway address on Windows

Wireless LAN adapter Wi-Fi:



Connection-specific DNS Suffix  . : home.sercomm
   IPv4 Address. . . . . . . . . . . : 192.168.1.69
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.254 <-- this is what we care about

Step 2 : create a /etc/wsl.conf file with the following content

cat /etc/wsl.conf
# Enable DNS – even though these are turned on by default, we’ll specify here just to be explicit.
[network]
generateResolvConf = false

Step 3 : delete the symlink to /run/resolvconf/resolv.conf on /etc/resolv.conf

cd /etc/
sudo rm resolv.conf

Step 4 : also delete /run/resolvconf/resolv.conf, why not?

cd /run
sudo rm resolvconf/resolv.conf

Step 5 : create a custom /etc/resolv.conf that will contain your Gateway address sudo vi /etc/resolv.conf

and paste this (with your Gateway address as seen in step 1)

nameserver 192.168.1.254

Step 6 : Open powershell and restart wsl

wsl --shutdown

Step 7 : ping google.com At this point, assuming your resolv.conf wasn't wiped automatically by the system, and you still preserve the configurations we added on step 5, you should be able to reach the internet.

Thanks, and don't hesitate on contacting me if you have an issue.

Solution 4:[4]

Update: While this didn't work for the OP, it continues to gain a few upvotes here and there. Based on what I know now, this particular answer likely works for certain users because their Swap disk is compressed or encrypted in %TEMP% (a.k.a. ..\AppData\Local\Temp under your Windows user profile). This is something that the OP had ruled out for their system, but if disabling swap works for you, then make sure you %TEMP% in Windows is neither compressed nor encrypted.


Hmm, you didn't mention WSL Github issue #5437 nor #6427, so here's something else to try:

Disable swap by adding:

[wsl2]
swap=0

to %userprofile%\.wslconfig

Seems to be the solution for a lot of people in this comment. Came across this when searching for "FIB table does not exist" "hyper-v"

Exit WSL, then (from PowerShell or CMD):

wsl --shutdown

Solution 5:[5]

In addition to Juan Carlos Martinez Carrillo I had to run this command to set my eth0 correctly in my WSL2 environment.

sudo ifconfig eth0 inet <your_ip_address> netmask <your_netmask> broadcast <your_braodcast_ip>

So let's say take the example above and you have 192.168.1.254 as your default gateway on Windows, then the command should look like this:

sudo ifconfig eth0 inet 192.168.1.42 netmask 255.255.255.0 broadcast 192.168.1.255

Then shutdown and restart WSL with

wsl.exe --shutdown

in a Windows terminal.

Solution 6:[6]

From your ip output you can see:

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 86:9a:be:53:f0:44 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 1e:ff:ad:a4:c4:a7 brd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
5: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:15:5d:b7:f4:da brd ff:ff:ff:ff:ff:ff

There as it says the eth0 is down(closed, not working), so you have to start it by typing ip link set eth0 up to start it and reboot wsl by typing wsl --shutdown in windows then start the wsl again.

Solution 7:[7]

I used to have this problem and tried everything without luck! but found the solution this morning.

I had DHCP on my main adapter in Windows and for some reasons in past I had to enable dhcpstaticipcoexistence and add some static IPs to the same adapter.

Anyway, removing those and disabling dhcpstaticipcoexistence seem to have fixed the problem.

On a privileged console:

netsh interface ipv4 set interface "<YOUR-INTERFACE-NAME>" dhcpstaticipcoexistence=disable

netsh interface ipv4 delete address "<YOUR-INTERFACE-NAME>" <STATIC-IP-HERE>

and then shutdown wsl: wsl --shutdown

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jacrys
Solution 2 Krishnom
Solution 3 Nadeem Iqbal
Solution 4
Solution 5 VaTrab
Solution 6 dialtcp
Solution 7 Bakhshi