WSL2 X-Server 网络问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSL2 X-Server 网络问题相关的知识,希望对你有一定的参考价值。
参考技术A 从WSL1升级WSL2之后,X-Server 出现问题,Ubuntu图形界面弹出不来。DISPLAY没起作用。Ubuntu环境里面可以联通外网,ping 和 apt 都没有问题,ping局域网内其他主机也没有问题。
Ubuntu环境ping主机IP无法ping通。
升级WSL2 之后, 开启了虚拟化,有虚拟网卡。 看起来是虚拟机环境的网卡被block了,而且单单无法ping通主机。
直接放开WSL虚拟网卡的访问:
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
https://lengthmin.me/posts/wsl2-network-tricks/
https://github.com/microsoft/WSL/issues/4585
WSL2网络无法访问[关闭]
【中文标题】WSL2网络无法访问[关闭]【英文标题】:WSL2 network unreachable [closed] 【发布时间】:2021-05-26 01:03:28 【问题描述】:几周前,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
【问题讨论】:
从技术上讲,我认为这应该在Super User 或Unix & Linux Stack 上,但我知道很难争辩说,自从this one 以来,你已经看到了这里的生活。赞成这个问题,因为您肯定已经完成了研究。希望我对你有一些想法。 我实际上在这上面坐了大约一天,在争论是否把它放在这里。还讨论了交叉发布,但是当您违反 SO 礼仪时,这里的协议机器人(双关语)可能会很残酷。 我注意到您确实最终交叉发布了,经过这么长时间没有答案,我可以理解。但我建议您在两个问题中都参考交叉发布。如果您要求答案转到两个问题中的 一个(此时可能是 SU 问题),这样就不会分散工作,这也很好。或者,鉴于在 SU 的重新发布,此时可能只是删除这个? 对我来说 ***.com/a/66340554/3804422 工作 当我与“移动热点”共享互联网时,如果您共享可能导致网络冲突的以太网连接,我能够复制此问题。如果您没有与“移动热点”共享您的网络,请忽略我的评论。 【参考方案1】:在命令下运行(并再次访问控制台)为我修复了 “网络无法访问” 问题
wsl --shutdown
【讨论】:
oo - 这对我有用! 因为我的机器没有成功终止而工作 相同。为我工作。 (在windows中运行命令) 这对我也有用,为什么其他地方没有提到这种解决方案? 它也适用于我,谢谢。【参考方案2】:我刚刚在我的电脑上解决了这种情况。我的背景是:
-
我正在使用 WSL2
在 Ubuntu 16.04 和 Ubuntu 20.04 上试用
使用 *** 时我仍然无法连接到互联网
**第 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
** 第二步:创建一个/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。
谢谢,如果您有任何问题,请随时与我联系。
【讨论】:
谢谢,但它没有用,但我继续尝试了一遍。仍然没有工作......我现在在我的第二台电脑上,它也在那个电脑上做。 (╯°□°)╯︵ ┻━┻ 您的 /etc/resolv.conf 是保留还是被覆盖? 它肯定会留下来。-rw-r--r-- 1 root root 23 May 7 16:47 resolv.conf
我可以看一下内容吗?另外,您是否确保执行了第 3 步和第 4 步(从 /run/ 删除符号链接和文件)?
nameserver 192.168.0.1
$ ll /run total 4 drwxr-xr-x 8 root root 160 May 10 08:55 。 drwxr-xr-x 18 root root 4096 May 10 08:25 .. drwxrwxrwt 2 root root 40 May 10 08:25 lock drwxr-xr-x 2 root root 40 May 10 08:25 mount drwxrwxrwt 2 root root 40 May 10 08 :25 shm drwx--x--x 3 root root 60 May 10 08:55 sudo drwxr-xr-x 2 root root 40 May 10 08:25 user drwxr-xr-x 2 root root 60 May 10 08:25 WSL $ cd /etc $ ll resolv.* -rw-r--r-- 1 root root 23 May 7 16:47 resolv.conf【参考方案3】:
嗯,你没有提到 WSL Github 问题 #5437 也没有提到 #6427,所以这里有一些其他的尝试:
通过添加禁用交换:
[wsl2]
swap=0
致%userprofile%\.wslconfig
似乎是this comment 中很多人的解决方案。搜索"FIB table does not exist" "hyper-v"时遇到了这个
【讨论】:
其实很抱歉。在更仔细地阅读这两个问题时,禁用交换似乎只有在没有 IP 地址时才是一种解决方案。您的问题更类似于 #6427 中的问题,该问题尚未解决。还有一些建议,但它们似乎反映了您已经尝试过的内容(%temp% 压缩)。 #6427 虽然,他可以出去,但是名称解析存在问题。我什至看不到本地主机。不过我还没有看过这些,所以感谢您观看更多内容。 节省了几天!没有这样的文件。我创建了它并做了一个wsl --shutdown
【参考方案4】:
除了Juan Carlos Martinez Carrillo,我还必须运行此命令才能在我的 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 终端中。
【讨论】:
【参考方案5】:从 build 19042.1052 开始,这又可以正常工作了,我的结果没有任何变化。我不确定实际原因,但由于我无法再重现它,进一步的故障排除似乎没有实际意义。
【讨论】:
很高兴听到您成功了!我敢肯定,这在此期间令人沮丧。希望这意味着 Microsoft 发现并修复了网络中的一些问题,并且我们会看到(交叉手指)在这个领域的未来失败更少。【参考方案6】:我曾经遇到过这个问题,并且尝试了所有方法都没有运气!但今天早上找到了解决方案。
我在 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
【讨论】:
【参考方案7】:从您的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
来启动它,然后在 Windows 中键入 wsl --shutdown
重新启动 wsl,然后再次启动 wsl。
【讨论】:
像这样的发行版特定设置不太可能跨越多个发行版。因此,这不太可能是解决方案。以上是关于WSL2 X-Server 网络问题的主要内容,如果未能解决你的问题,请参考以下文章
Windows10 WSL2 Ubuntu / Debian # 无网络