16

几周前,WSL 突然无法访问任何 IP 地址,也无法解析任何域。甚至无法访问内部网络 IP。

>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.

我浏览了 GH 并找到了对其他人有用的解决方案。我尝试过的事情:

  • netsh winsock reset
    netsh int ip reset all
    netsh winhttp reset proxy
    ipconfig /flushdns
    
  • 删除 Hyper-V 虚拟适配器并重新启动以让 Windows 重建

  • 将 Hyper-V 虚拟交换机管理器中虚拟交换机的连接位置从内部网络更改为外部网络

  • 确保 %TEMP% 未被压缩

  • 确保 %TEMP% 下没有文件或文件夹被压缩

  • 确保没有防火墙在运行

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

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

  • 关闭生成resolv.conf 并将网关、9.9.9.9 和8.8.8.8 添加到resolv.conf

4

7 回答 7

29

在命令下运行(并再次访问控制台)为我修复了“网络无法访问”问题

wsl --shutdown
于 2021-07-06T06:04:01.273 回答
13

我刚刚在我的电脑上解决了这种情况。我的背景是:

  1. 我正在使用 WSL2
  2. 在 Ubuntu 16.04 和 Ubuntu 20.04 上试过
  3. 在使用 VPN 时,我仍然无法连接到互联网

第 1 步:找出您在 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

第 2 步:创建一个 /etc/wsl.conf 文件,内容如下

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

第 3 步:删除 /etc/resolv.conf 上 /run/resolvconf/resolv.conf 的符号链接

cd /etc/
sudo rm resolv.conf

第4步:也删除/run/resolvconf/resolv.conf,为什么不呢?

cd /run
sudo rm resolvconf/resolv.conf

第 5 步:创建一个自定义 /etc/resolv.conf,其中将包含您的网关地址 sudo vi /etc/resolv.conf

并粘贴此(使用您的网关地址,如步骤 1 所示)

nameserver 192.168.1.254

第 6 步:打开 powershell 并重新启动 wsl

wsl --shutdown

第 7 步:ping google.com 此时,假设您的 resolv.conf 没有被系统自动擦除,并且您仍然保留了我们在第 5 步中添加的配置,那么您应该可以访问 Internet。

谢谢,如果您有任何问题,请随时与我联系。

于 2021-05-07T04:46:46.507 回答
12

嗯,你没有提到 WSL Github 问题#5437也没有#6427,所以这里有一些其他的尝试:

通过添加禁用交换:

[wsl2]
swap=0

%userprofile%\.wslconfig

似乎是此评论中很多人的解决方案。搜索“FIB 表不存在”“hyper-v”时遇到此问题

于 2021-02-23T20:23:04.807 回答
3

除了Juan Carlos Martinez Carrillo之外,我还必须运行此命令才能eth0在我的 WSL2 环境中正确设置我的设置。

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

因此,假设以上面的示例为例,您将其192.168.1.254作为 Windows 上的默认网关,那么命令应如下所示:

sudo ifconfig eth0 inet 192.168.1.42 netmask 255.255.255.0 broadcast 192.168.1.255

然后关闭并重新启动 WSL

wsl.exe --shutdown

在 Windows 终端中。

于 2021-08-03T15:40:14.997 回答
1

从构建 19042.1052 开始,这又可以正常工作了,我的结果没有任何变化。我不确定实际原因,但由于我无法再重现它,进一步的故障排除似乎没有意义。

于 2021-07-19T14:08:36.577 回答
0

我曾经遇到过这个问题,但没有运气就尝试了一切!但今天早上找到了解决方案。

我在 Windows 的主适配器上安装了 DHCP,过去由于某些原因,我不得不启用dhcpstaticipcoexistence并添加一些静态 IP 到同一个适配器。

无论如何,删除这些并禁用dhcpstaticipcoexistence似乎已经解决了这个问题。

在特权控制台上:

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

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

然后关闭wsl:wsl --shutdown

于 2021-07-08T23:43:23.467 回答
0

从您的ip输出中,您可以看到:

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

那里说 eth0 已关闭(关闭,不工作),因此您必须通过键入ip link set eth0 up来启动它并通过键入wsl --shutdownwindows 重新启动 wsl,然后再次启动 wsl。

于 2021-07-18T14:31:44.443 回答