事情的起因是主播想安装neovim来写代码,感觉每次用vscode实在是有点麻烦了,但是用纯 vim 也是需要退出来再运行,不管哪一种方案感觉都差一点意思,于是想到用 neovim 来进行开发,但是突然发现自己的 wsl 无法访问GitHub了,虽然通过使用清华镜像源解决了neovim 的下载,但还是无法进行lazyvim的安装,于是在google和疯狂拷打 GPT 中得出了下面的解决方案
初始配置
一开始是在我的 .zshrc 文件中配置了 http_proxy, https_proxy, socks_proxy, 将 ip 地址设置为 ipconfig
中的 WLAN ipv4 地址,一开始是有效的,现在不论怎么改都无法访问GitHub
当我输入:
1 | curl -l -v https://github.com |
会爆出
1 | * Could not resolve host: github.com * Closing connection 0 curl: (6) Could not resolve host: github.com |
问题重述
在进行 git clone
或者curl
都会发现尝试走代理但是代理不可达的错误,比如:
1 | curl: (7) Failed to connect to xx.xxx.xxx.xxx port 7899: No route to host |
根本原因
DNS 解析失败
wsl 现在无法将域名 github.com
解析为IP
WSL 会自动生成 /etc/resolv.conf,WSL 中使用 cat /etc/resolv.conf | grep nameserver
得到的地址 不一定就是 Windows 主机的真实 IPv4
按理来说,wsl 会自动生成 /etc/resolv.conf
并把宿主机的DNS或vEhernet 地址写进去,但是如果宿主机上的 DNS 被代理软件改写的话, WSL的解析就会被影响
步步尝试
代理变量干扰?
前文提到我设置了代理变量,所以现在需要使用unset
取消掉(这里是临时取消,如果需要永久取消,则直接修改 .zshrc 配置
看看 DNS 配置
cat /etc/resolv.conf
看看现在的 nameserver
测试公网IP连接
我们尝试不走 DNS 只测路由的话
1 | ping -c 3 8.8.8.8 |
如果发现 ping 通了,说明路由是可达的,那就说明只是 DNS 的问题了,如果失败了,还需要进一步检查 WSL 和 win 网络或者防火墙的问题
测试DNS
1 | nslookup github.com 8.8.8.8 |
如果我们看到输出了正常的 IP 地址的话,就说明使用 8.8.8.8 这个 DNS 是没问题的,但是我们自己却不能访问,就说明是自己的 DNS 出现了错误,现在进行修改 DNS,也就是修改/etc/wsl.conf
这个文件
修改配置中的 DNS
我们先修改wsl.conf
,将其自动覆盖 resolv.conf 的功能关闭
1 | sudo tee /etc/wsl.conf > /dev/null <<'EOF' |
然后删掉我们这个老的 resolv.conf
1 | sudo rm -f /etc/resolv.conf |
最后创建新的 resolv.conf
我们将 /etc/resolv.conf
进行修改,将DNS 改为公网(Google + Cloudflare DNS)
1 | sudo bash -c 'cat > /etc/resolv.conf <<EOF |
然后给它设置一个合理的权限
1 | sudo chmod 644 /etc/resolv.conf |
最后重启 wsl
进行测试
1 | python3 -c "import socket;print(socket.gethostbyname('github.com'))" |
如果发现输出了 IP 则说明可以正常访问了
最后进行最后一步测试
1 | curl -I -v https:www.github.com |