60

从 WSL 升级到 WSL2 后

sudo apt-get update

不再工作。后:

wsl --set-version Ubuntu-18.04 2

输出是:

> sudo apt-get update
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu bionic InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic-backports/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

回到 WSL1 后,问题再次消失。在 Debian 上也是如此,在 CentOS 上也是如此。所以 WSL2 一定有一个错误。

Windows10 build 版本为 19041,今天安装。

WSL2 的任何解决方法?问候

4

11 回答 11

121

生成的文件 /etc/resolv.conf 是:

名称服务器 172.24.0.1

..必须将其更改为

名称服务器 8.8.8.8

这解决了问题

于 2020-02-19T14:47:18.370 回答
33

原答案:

在我的情况下,我在 Windows 中使用 VPN,从 VPN 断开连接时问题得到了解决。

编辑:

然而,这正在成为一个更广泛的问题,它再次发生在我身上,我通过删除 Hyper-V 虚拟交换机扩展适配器解决了它。

目前针对此问题最广泛使用的两种解决方案是:

1防止 /etc/resolfv.conf 被“损坏”

  1. 创建一个文件:/etc/wsl.conf.
  2. 将以下行放入文件中
[network]
generateResolvConf = false
  1. 在一个cmd窗口中,运行wsl --shutdown
  2. 重启 WSL2
  3. 创建一个文件:/etc/resolv.conf. 如果存在,则用这个新文件替换现有文件。
  4. 将以下行放入文件中
nameserver 8.8.8.8
  1. 重复第 3 步和第 4 步。您会看到git现在工作正常。

感谢在github上分享它的NonStatic

2删除损坏的网络接口驱动程序(可能是永久性的)

  1. 首先进入设备管理器 在此处输入图像描述

  2. 显示隐藏的设备 在此处输入图像描述

  3. 删除所有 Hyper-V 虚拟交换机扩展适配器 在此处输入图像描述

感谢在GitHub 上分享它的Jaysonsantos

于 2020-08-27T14:08:06.153 回答
11

我遇到了同样的问题。

cat /etc/resolv.conf,看看输出是否有这样的东西:

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.X.X.X

您需要将名称服务器更改为8.8.8.8,因此运行sudo nano /etc/resolv.conf、编辑并保存文件。

但是,这或多或少是一个临时解决方案,因为每次 WSL 启动时都需要这样做。您可能想运行一个脚本来检查名称服务器,并在每次重新启动 wsl 时将其更新到 8.8.8.8。此更改确实适用于我的 WSL2-Debian。但我不需要重新启动 WSL。

于 2020-09-04T12:16:51.997 回答
7

最有可能的是,分发版有自己的虚拟适配器,首先您可以尝试一些步骤:

  1. 需要检查数据包是否真的通过了 Windows 防火墙 然后检查在此处输入图像描述 在此处输入图像描述%systemroot%\system32\LogFiles\Firewall\pfirewall.log

  2. 如果数据包没有通过防火墙,很可能发行版获得了它自己的虚拟适配器,请检查从 Debian 内部获得分布的 IP:

    ifconfig

或者如果您没有ifconfig

perl -MSocket -le 'socket(S, PF_INET, SOCK_DGRAM, getprotobyname("udp"));
connect(S, sockaddr_in(1, inet_aton("8.8.8.8")));
print inet_ntoa((sockaddr_in(getsockname(S)))[1]);'

ipconfig在 Windows WSL2 主机上,查看 WSL 适配器下机器的 IP

  1. 如果您需要通过 Windows IP 访问 Internet,请检查此问题:https ://github.com/microsoft/WSL/issues/4150

解决方法是使用执行以下操作的脚本:

一个。获取 WSL 2 机器的 IP 地址

湾。删除以前的端口转发规则

C。添加端口转发规则

d。删除以前添加的防火墙规则

e. 添加新的防火墙规则

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if( $found ){
  $remoteport = $matches[0];
} else{
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

#[Ports]

#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000);


#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";


#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectpor t=$port connectaddress=$remoteport";
  }

另一种解决方案是转到 Hyper-V 管理器并更改绑定到物理 NIC 的虚拟交换机 在此处输入图像描述

于 2020-02-24T15:37:38.693 回答
3

在 cmd 上运行这些命令:

$ wsl --shutdown
$ netsh winsock reset
$ netsh int ip reset all
$ netsh winhttp reset proxy
$ ipconfig /flushdns
$ netsh winsock reset
$ shutdown /r 
于 2021-09-14T00:04:24.787 回答
2

对我来说,我有一个全新的 Ubuntu 20.04 WSL 实例,在安装 apache 并使用此命令允许 apache 配置文件之后

sudo ufw allow in "Apache"

然后,

sudo service ufw start && sudo ufw enable

我注意到这个问题已经触发,并且在再次使用禁用防火墙后

sudo ufw disable && sudo service ufw stop

一切正常。

于 2020-12-08T09:02:09.683 回答
2

它对我有用,我正在使用 CiscoAnyConnect for VPN

Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 4000

Get-NetIPInterface -InterfaceAlias "vEthernet (WSL)" | 设置-NetIPInterface -InterfaceMetric 1

学分:思科 AnyConnect

于 2021-01-18T12:30:18.043 回答
2

我解决了更改/etc/resolv.conf为:

nameserver 8.8.8.8

接着

$ sudo chattr -f +i /etc/resolv.conf

实际上使用属性“锁定”文件,+i==immutable因此操作系统无法重新生成。这样用户修改的/etc/resolv.conf将是持久的。

我发现创建/etc/wsl.conf不起作用,但还是留下了它:

[network]
generateResolvConf = false
于 2021-10-21T04:37:51.293 回答
1

检查您使用的防病毒软件。我启用了 McAfee 和端点安全。如果断开端点安全防火墙连接将立即工作(无需重新启动)。

https://kc.mcafee.com/corporate/index?page=content&id=KB91411

于 2021-05-21T09:17:53.147 回答
1

当我在磁盘上应用 Windows NTFS 驱动器压缩时,我遇到了同样的错误C:。进一步调查表明,仅压缩两个文件夹会导致该错误:

  1. WSL 文件夹 ( %LocalAppData%\Packages\CanonicalGroupLimited*)
  2. %TEMP%(即C:\Users\<Username>\AppData\Local\Temp

因此,如果您在 WSL 上出现Temporary failure resolving...错误,sudo apt-get update我建议您根本不要将 NTFS 磁盘压缩应用于系统驱动器,或者至少保持这两个目录未压缩。

解压缩后不要忘记在 CMD 或 PowerShell 终端中重新启动 WSLwsl --shutdown

于 2021-08-19T21:57:00.147 回答
0

也许这是一个巧合Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All,但是通过以管理员身份在 Powershell 中运行并重新启动来激活 Hyper-V似乎为我解决了这个问题,而没有其他办法。除了涉及 Hyper-V 管理器的解决方案外,我尝试了大多数解决方案。我正在激活 Hyper-V 来尝试那个,但最终我不需要做任何其他事情。

如果巧合,archive.ubuntu.com 服务器可能暂时不可用。我从未失去 ping 其他地址的能力这一事实支持了这一点。对此AskUbuntu 问题的评论指出:

有时您会发现服务器不可用或已关闭。. . 通常问题会在一段时间后自行解决。

换句话说,有时这个问题是服务器端的。我认为这里没有人提到过这种可能性。

于 2021-06-26T08:56:07.027 回答