我已经在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.
步骤:
-
获取DNS服务器地址
在powershell中运行:ipconfig /all
-
每次重新连接到VPN时的排名接口度量
我的VPN是:Cisco AnyConnect
在powershell中运行:Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
要自动执行此操作,请参阅:创建用于自动更新的Windows计划任务 -
更新wsl.conf
在wsl shell中作为根用户sudo su -
运行:
echo "[network]
generateResolvConf=false" >> /etc/wsl.conf;
- 使用正确的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
- 下载软件包并使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进行验证。