banner
wsl can't parse IP Address

wsl无法访问网址

Scroll down

事情的起因是主播想安装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
2
3
4
sudo tee /etc/wsl.conf > /dev/null <<'EOF'
[network]
generateResolvConf = false
EOF

然后删掉我们这个老的 resolv.conf

1
sudo rm -f /etc/resolv.conf

最后创建新的 resolv.conf
我们将 /etc/resolv.conf 进行修改,将DNS 改为公网(Google + Cloudflare DNS)

1
2
3
4
sudo bash -c 'cat > /etc/resolv.conf <<EOF
nameserver 8.8.8.8
nameserver 1.1.1.1
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
其他文章
30+
Posts
8+
Diary
85+
fans
目录导航 置顶
  1. 1. 初始配置
  2. 2. 问题重述
  • 根本原因
    1. 1. DNS 解析失败
  • 步步尝试
    1. 1. 代理变量干扰?
    2. 2. 看看 DNS 配置
    3. 3. 测试公网IP连接
    4. 4. 测试DNS
    5. 5. 修改配置中的 DNS
    6. 6. 进行测试