WSL2 网络无法访问
WSL2 network unreachable
几周前,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% 下的文件和文件夹
确保没有防火墙 运行
-
-
关闭 resolv.conf 的生成并将网关、9.9.9.9 和 8.8.8.8 添加到 resolv.conf
更新:虽然这对 OP 不起作用,但它继续在这里和那里获得一些赞成票。根据我现在所知道的,这个特定的答案可能适用于某些用户,因为他们的交换磁盘在 %TEMP%
中压缩或加密(a.k.a。..\AppData\Local\Temp
在您的 Windows 用户资料)。这是 OP 为他们的系统排除的事情,但是如果禁用交换对你有用,那么请确保你的 Windows 中的 %TEMP%
既没有压缩也没有加密。
嗯,你没有提到 WSL Github 问题 #5437 nor #6427,所以这里有一些其他的尝试:
通过添加禁用交换:
[wsl2]
swap=0
到%userprofile%\.wslconfig
似乎是 this comment. Came across this when searching for "FIB table does not exist" "hyper-v"
中很多人的解决方案
退出 WSL,然后(从 PowerShell 或 CMD):
wsl --shutdown
我刚刚在我的电脑上解决了这个问题。我的背景是:
- 我正在使用 WSL2
- 试过 Ubuntu 16.04 和 Ubuntu 20.04
- 我在 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 步添加的配置,您应该可以访问互联网。
谢谢,如果您有任何问题,请随时与我联系。
运行 下面的命令(并再次访问控制台)为我修复了 “无法访问网络” 问题
wsl --shutdown
我曾经遇到过这个问题,并且尝试了所有方法都没有运气!但今天早上找到了解决方案。
我在 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
从您的 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
来启动它并通过在 [=18] 中键入 wsl --shutdown
来重新启动 wsl =] 然后再次启动 wsl。
从 build 19042.1052 开始,这又开始工作了,我这边没有任何变化。我不确定实际原因,但由于我无法再重现它,进一步的故障排除似乎没有实际意义。
除了 之外,我还必须 运行 这个命令才能在我的 WSL2 环境中正确设置 eth0
。
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 终端中。
几周前,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% 下的文件和文件夹
确保没有防火墙 运行
关闭 resolv.conf 的生成并将网关、9.9.9.9 和 8.8.8.8 添加到 resolv.conf
更新:虽然这对 OP 不起作用,但它继续在这里和那里获得一些赞成票。根据我现在所知道的,这个特定的答案可能适用于某些用户,因为他们的交换磁盘在 %TEMP%
中压缩或加密(a.k.a。..\AppData\Local\Temp
在您的 Windows 用户资料)。这是 OP 为他们的系统排除的事情,但是如果禁用交换对你有用,那么请确保你的 Windows 中的 %TEMP%
既没有压缩也没有加密。
嗯,你没有提到 WSL Github 问题 #5437 nor #6427,所以这里有一些其他的尝试:
通过添加禁用交换:
[wsl2]
swap=0
到%userprofile%\.wslconfig
似乎是 this comment. Came across this when searching for "FIB table does not exist" "hyper-v"
中很多人的解决方案退出 WSL,然后(从 PowerShell 或 CMD):
wsl --shutdown
我刚刚在我的电脑上解决了这个问题。我的背景是:
- 我正在使用 WSL2
- 试过 Ubuntu 16.04 和 Ubuntu 20.04
- 我在 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 步添加的配置,您应该可以访问互联网。
谢谢,如果您有任何问题,请随时与我联系。
运行 下面的命令(并再次访问控制台)为我修复了 “无法访问网络” 问题
wsl --shutdown
我曾经遇到过这个问题,并且尝试了所有方法都没有运气!但今天早上找到了解决方案。
我在 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
从您的 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
来启动它并通过在 [=18] 中键入 wsl --shutdown
来重新启动 wsl =] 然后再次启动 wsl。
从 build 19042.1052 开始,这又开始工作了,我这边没有任何变化。我不确定实际原因,但由于我无法再重现它,进一步的故障排除似乎没有实际意义。
除了 eth0
。
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
然后用
关闭并重启WSLwsl.exe --shutdown
在 Windows 终端中。