curl:(6)无法解析WSL上的主机



我已经在WSL上安装了Ubuntu 20.04 LTS。

我正在尝试运行以下命令:

curl https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch

它失败并出现错误:

curl:(6(无法解析主机:developer.mozilla.org

我尝试了其他方法,它奏效了,例如

$ curl https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

以下是一些细节:

$ nslookup developer.mozilla.org
Server:         127.0.0.1
Address:        127.0.0.1#53
Non-authoritative answer:
developer.mozilla.org   canonical name = d1avawhiqh9uo1.cloudfront.net.
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 52.84.112.124
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 52.84.112.61
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 52.84.112.82
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 52.84.112.105
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:8e00:13:e62f:2040:93a1
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:9c00:13:e62f:2040:93a1
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:a000:13:e62f:2040:93a1
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:d800:13:e62f:2040:93a1
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:f600:13:e62f:2040:93a1
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:200:13:e62f:2040:93a1
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:1c00:13:e62f:2040:93a1
Name:   d1avawhiqh9uo1.cloudfront.net
Address: 2600:9000:203c:4e00:13:e62f:2040:93a1

请帮助理解这个问题。

对我来说,这发生在Windows 11升级之后。

我不得不更新我的/etc/wsl.conf并重新启动我的WSL实例

[network]
generateResolvConf = true

接受的解决方案对我不起作用。

再搜索一点让我着陆了WSL throws(6(在尝试安装NVM时无法解析主机:raw.githubusercontent.com,并且无法ping google.com

这对我很有效。见下面引用的答案

您可以尝试运行此

sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf

它会删除在以下情况下自动生成的resolve.config文件u运行WSL然后创建一个新文件;名称服务器8.8.8.8";,然后创建一个wsl.conf文件,并添加[network]和generateResolveConf=false以阻止自动生成该文件

然后

ping google.com

这对我很有效:https://github.com/microsoft/WSL/issues/4731#issuecomment-562935992

这是在我的电脑长时间睡眠后发生的。关闭wsl2(wsl.exe--shutdown(并再次打开它可以解决问题,直到下次电脑再次长时间睡眠。

问题:当我的电脑连接到VPN时,WSL网络管理器不断覆盖/etc/resolv.conf。这使我无法下载可以使resolv.conf不可变的包。

我的解决方案:
在bash-shell中运行一个脚本,该脚本不断更新resovl.conf。同时,在一个单独的shell中,下载可以使relov.conf不可变的包。参见步骤4&5.

步骤:

  1. 获取DNS服务器地址
    在powershell中运行:
    ipconfig /all
  2. 每次重新连接到VPN时的排名接口度量
    我的VPN是:Cisco AnyConnect
    在powershell中运行:
    Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
    要自动执行此操作,请参阅:创建用于自动更新的Windows计划任务
  3. 更新wsl.conf
    在wsl shell中作为根用户sudo su -运行:
echo "[network]
generateResolvConf=false" >> /etc/wsl.conf;
  1. 使用正确的DNS IP更新resolv.conf
    脚本循环300秒,其间暂停1秒
    步骤1中的实际IP替换下面脚本中的xx.xx
    *同时运行步骤5*
    在WSL shell中作为根用户sudo su -运行:
for i in {1..300}; do
echo '# non-vpn DNS IP
nameserver 8.8.8.8
# cisco any connect vpn DNS IPs
nameserver xx.xx.xx.xx
nameserver xx.xx.xx.xx' > /etc/resolv.conf;
sleep 1;
done
  1. 下载软件包并使resolv.conf不可变
    注意:我的WSL Distro是Fedora,您可能需要使用不同的软件包管理器
    在单独的WSL shell中作为根用户sudo su -运行:
dnf -y install e2fsprogs
chattr +i /etc/resolv.conf

故障排除:

cat /etc/resolv.conf                    # check content
chattr -i /etc/resolv.conf              # make resolve.conf editable

为子孙后代。。。(lsb_release-a没有可用的LSB模块。分发服务器ID:Ubuntu说明:Ubuntu 20.04.4 LTS发布时间:20.04代号:focal(

windows10中wsl2的解决方案是:

"cmd.exe /C curl http://127.0.0.1 ..."

在VM上也有相同的情况,但原因不同。添加

nameserver 127.0.0.53
options edns0 trust-ad

/etc/resolv.conf

从窗口命令中查找DNS条目,并使用其终端将其添加到ubuntu的/etc/resolv.conf文件中。重新启动ping google.com进行验证。

相关内容

最新更新