解决WSL2 DNS stops working Can't open display 172.17.0.1
2022年7月7日大约 2 分钟
上一级页面:index-wsl
前言
这个报错的直接原因是wsl的dns解析服务不能正常工作,无法解析出宿主主机地址
排查问题
检查/etc/resolv.conf
$ cat /etc/resolv.conf
可以看到172.17.0.1
,
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.17.0.1
172.17.0.1
是wsl自身的虚拟网卡地址,如何确定呢?你可以在powershell中输入命令
ipconfig
如图所示,172.17.0.1
是wsl的虚拟网卡地址,
这本身是没有问题的,正常情况下,wsl的宿主主机ip地址解析服务解析出来的结果就应当是wsl自身的虚拟网卡地址
解决方案
首先更改linux的DNS服务,以使用Windows主机的地址来进行DNS解析
见Systemd units known to be problematic under WSL · arkane-systems/genie Wiki (github.com)
进入root用户模式
sudo -s
输入下列命令
cat << EOF > /etc/systemd/network/10-eth0.network
[Match]
Name=eth0
[Link]
Unmanaged=yes
[Network]
DHCP=no
[DHCP]
UseDNS=false
EOF
退出root用户
exit
然后检查/etc/wsl.conf
,尝试将
[network]
generateResolvConf = false
改为
[network]
generateResolvConf = true
如果没有则不用改
然后尝试关闭Windows防火墙,来进行测试
访问控制面板\系统和安全\Windows Defender 防火墙\自定义设置
,或者按图寻找
重新启动xserver和wsl
wsl --shutdown
检查防火墙的所有xserver授权规则。检查x -server的所有复选框,如图所示:
- 将它们都勾上,这非常重要(特别注意对
公共
复选框的勾选):
还是没有解决问题。
关闭并重新开启systemctl(wsl-distrod),同时关闭wsl-distrod的开机自启动,详见wsl2开启systemctl命令简单方法
切换到root用户
su - root
关闭并重新开启systemctl(wsl-distrod)
/opt/distrod/bin/distrod disable
/opt/distrod/bin/distrod enable
然后重启系统,问题解决!
参考、引用、致谢
WSL2 DNS stops working · Issue #4285 · microsoft/WSL (github.com)