LPT*_*PT0 43 connection ubuntu windows-subsystem-for-linux failed-to-connect
最近我在我的 Windows 机器上安装了WSL Ubuntu 18.04,但似乎没有任何工作正常,因为我无法访问互联网。
我尝试了一些命令并sudo apt update
说“连接失败”并且ping google.com
字面上需要永远,正如您在此屏幕截图中看到的那样:
我还检查nano /etc/resolv.conf
并确保名称服务器是正确的,完全禁用了卡巴斯基及其防火墙,禁用了 Hyper-V,重新安装了几次 WSL,甚至禁用了 Windows Defender。没有任何帮助。
那么你有什么想法可能是这里的问题吗?
Sam*_*Sam 68
以管理员身份打开命令提示符并键入以下命令:
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
Run Code Online (Sandbox Code Playgroud)
重新启动您的机器。
https://github.com/microsoft/WSL/issues/3438#issuecomment-410518578
lef*_*oin 63
对我有用的食谱。(WSL2 + 思科 AnyConnect)
Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object -ExpandProperty ServerAddresses
Run Code Online (Sandbox Code Playgroud)
Get-DnsClientGlobalSetting | Select-Object -ExpandProperty SuffixSearchList
Run Code Online (Sandbox Code Playgroud)
sudo unlink /etc/resolv.conf # this will unlink the default wsl2 resolv.conf
# This config will prevent wsl2 from overwritting the resolve.conf file everytime
# you start wsl2
cat <<EOF | sudo tee -a /etc/wsl.conf
[network]
generateResolvConf = false
EOF
cat <<EOF | sudo tee -a /etc/resolv.conf
nameserver 10.50... # The company DNS/nameserver from the command in step 1
nameserver 10.50... # The company DNS/nameserver from the command in step 1
nameserver 10.50... # list all nameservers from step 1
nameserver 8.8.8.8
nameserver 8.8.4.4
search this.searchdomain.com # The search domain that we got from step 2
EOF
# Make the new /etc/resolve.conf immutable
sudo chattr +i /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
Run Code Online (Sandbox Code Playgroud)
每次 VPN 连接时都需要执行此操作。请参阅此处https://gist.github.com/machuu/7663aa653828d81efbc2aaad6e3b1431如何自动执行此任务。
Restart-Service LxssManager
Run Code Online (Sandbox Code Playgroud)
取自此处:https ://jamespotz.github.io/blog/how-to-fix-wsl2-and-cisco-vpn
Jef*_*elo 36
发生此错误的原因是 Windows 自动生成了名称服务器错误的 resolv.conf 文件。
要解决此问题,请按照以下步骤操作。
通过运行以下命令找到该文件:
sudo nano /etc/resolv.conf
您将在文件中看到以下内容:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/resolv.conf
# [network]
# generateResolvConf = false
nameserver xxx.xx.xx
Run Code Online (Sandbox Code Playgroud)
8.8.8.8
并保存文件。您现在应该可以连接到 Internet。Ech*_*o9k 28
如果您修复了该问题并更改了 DNS,但 WSL2 不断覆盖,请继续阅读。
# Replace the nameserver
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 1.1.1.1" > /etc/resolv.conf'
Run Code Online (Sandbox Code Playgroud)
如果您收到“Operation not allowed”。使用手动更改它sudo nano /etc/resolv.conf
# Turn off generateResolvConf
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
小智 18
对我来说,域名服务器不再可 ping 通。所以我做了下面的事情,它对我有用。
不幸的是我无法删除 Ubuntu,因为它包含了我的工作。我已经尝试了这篇文章和其他 stackoverflow 帖子中的所有内容,但没有成功。
但上述方法对我有用,并且没有任何工作损失。
小智 16
复制对我有用的食谱。
在 Windows 10 上使用 WSL 2。
在https://github.com/microsoft/WSL/issues/5336#issuecomment-653881695找到的解决方案
脚步
以管理员身份打开 Powershell 或 Cmd
并运行以下每个命令:
wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
Run Code Online (Sandbox Code Playgroud)
按 Windows 键,
键入Network Reset
,按
Enter。
重新启动 Windows
如果幸运的话,WSL 2 现在应该能够sudo apt-get update && sudo apt-get upgrade
.
奇怪的边缘情况
对我来说,我仍然无法 ping 站点,但是在 WSL 2 中,互联网似乎可以在其他任何地方使用。
例如,ping stackoverflow.com
(或 ping 任何站点)
导致“100% 数据包丢失”。
然而,curl --location stackoverflow.com -i
结果是成功的响应。
和sudo apt-get update && sudo apt-get upgrade
现在的作品。
找到上述配方之前的故障排除步骤:
几个月没有使用 WSL 2,sudo apt update
当我发现我的互联网无法正常工作时,我正试图从 Debian 发行版的终端使用。
花了一个小时配置我的 WSL 的 /etc/resolv.conf 和 /etc/wsl.conf 并解决自动配置错误 ( https://github.com/microsoft/WSL/issues/3928 )。还是没用。
然后我找到了这个页面。尝试了张贴的方向。没用。
终于找到了这个发布的解决方案,WSL 2突然完美运行。
我花了几个小时试图解决这个问题,希望有一天这对某人有用。
CVn*_*ame 16
就我而言,如果不使用 VPN,我的 WSL 上的互联网就可以工作。当我连接到 VPN 时,它突然停止工作。这里有一个关于使用 VPN 时 WSL 上的互联网丢失的相关讨论(在我发帖当天仍然开放)。
之前针对此问题提出的解决方案有效,但需要重新启动:
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
Run Code Online (Sandbox Code Playgroud)
之前提出的另一个解决方案:
sudo nano /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
将名称服务器更改为 8.8.8.8 或 1.1.1.1 或任何其他随机地址后,它在 VPN 上对我不起作用。
解决这个问题的方法是第二种解决方案和上面讨论的混合:
步骤1:
在 Powershell 中使用 VPN 时:
ipconfig /all
Run Code Online (Sandbox Code Playgroud)
搜索链接到您的 VPN 连接的适配器。通常你可以在描述中找到类似的内容
“思科 Anyconnect ...”
在该块中搜索您的 DNS 服务器的地址(对我来说,第一个 DNS 服务器不起作用,所以我选择了第二个)
步骤 2:取自此处的相同讨论,在 PowerShell 中:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
Run Code Online (Sandbox Code Playgroud)
步骤3:
在我的 WSL 上使用 VPN 时:
$ sudo echo "nameserver <the DNS server address from point 1>" > /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
此解决方案的缺点(与之前的解决方案一样)是您需要在每次新启动 WSL 时执行此操作。为了使它更容易一点,可以创建一个简短的 .sh 脚本来自动化它。在您的 WSL 上:
$touch restore_internet_connection.sh
$nano restore_internet_connection.sh
Run Code Online (Sandbox Code Playgroud)
将以下文本放入其中:
echo "nameserver <the output from point 1>" > /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
下次遇到问题时,只需重复步骤 2 即可:
$sudo restore_internet_connection.sh
Run Code Online (Sandbox Code Playgroud)
对我来说,当我从一个网络切换到另一个网络时会出现这个问题。比方说,例如我在办公室 wifi 工作,然后我回家并开始使用家庭 wifi。上面的/sf/answers/4450487121/答案对我有用。这似乎是一个实际问题,因此在 Windows 提出解决方案之前,我每次都必须找到更简单的方法。我复制了命令并创建了一个 bat 文件,将其保存在桌面上。因此,每次切换wifi连接/网络时,我都会以管理员身份运行bat文件并重新启动系统。我希望这对那些试图弄清楚它为什么会发生以及如何知道一种简单的方法来解决它的人有所帮助,(不是永久性的)。
创建一个包含以下内容的新 .bat 文件。
我将我的文件命名为 networkreset.bat
wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
netsh winsock reset
shutdown /r
Run Code Online (Sandbox Code Playgroud)
每次切换 wifi/网络时,以管理员身份运行脚本并重新启动。
重新启动互联网后,在连接的网络上的 WSL 上工作。
所以我不知道这是否对任何人有帮助,但我在 Windows 上安装了 Docker,并按照 Microsoft 的说明按照 Docker 的建议安装了 WSL2 引擎。
然后使用 WSL2 安装 Ubuntu 18.04 LTS 并遇到了完全相同的问题 - 没有互联网。我真正想做的就是在我的工作笔记本电脑上构建一些 docker 映像进行测试,因此没有互联网的 WSL2 对我来说完全不行。
经过大量研究各种论坛和指南(包括此线程)后,以下是最终对我有用的内容:
第一个命令显示发行版列表:
C:\users\xyz> wsl -l -v
姓名 | 状态 | 版本 |
---|---|---|
Ubuntu-20.04 | 跑步 | 1 |
docker-桌面-数据 | 跑步 | 2 |
docker-桌面 | 跑步 | 2 |
因此,现在使用以下命令来设置 WSL 版本 - 替换您的发行版名称并使用 1 切换到 WSL v1
C:\users\xyz> wsl --set-version
结果
底线:我有一个 WSL1 Ubuntu 发行版,它连接到互联网,我可以使用 Dockerfiles 在 Ubuntu 中使用 CLI 构建 docker 映像,没有任何问题。
注意- 此修复解决了 WSL 中的 DNS 解析问题。荒谬的设置可能会导致 WSL 发行版根本没有任何互联网连接。
解决方法是将以太网/WiFi 适配器的 DNS 设置为您的首选。WSL 使用主机的 DNS。像这样的命令wget
对我有用,但是像这样的命令apt update
似乎不起作用 - 基本上它无法解析 ubuntu 存档 URL。
如此图中所示,DNS 值为空。它是从主机的 DNS 推断出来的。
以下是手动提供 DNS 的主机适配器属性的图像。如果您为主机选择自动 DNS 选项,则某些功能可能无法在 ISP 提供的 DNS 上运行。
建议使用 OpenDNS、Google DNS 或 CloudFlare DNS,因为它们非常快速且可靠。使用 DNSBenchmark 查找最适合您的连接的 DNSBenchmark。我想强调的是,这完全是您的选择。