Windows10 WSL2 Ubuntu Debian # apt-get update failed # no network(没有网络)

问题描述 投票:1回答:2

从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的构建版本是19041,是今天安装的。

有什么办法解决WSL2的问题吗?

ubuntu debian windows-subsystem-for-linux apt wsl-2
2个回答
1
投票

很有可能,发行版得到了自己的虚拟适配器,首先有一些步骤你可以尝试。

  1. 需要检查数据包是否真的通过了Windows防火墙。enter image description hereenter image description here然后检查 %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主机上,看看什么IP需要机器unde WSL适配器。

  1. 如果你需要通过Windows IP访问互联网,请检查这个问题。https:/github.commicrosoftWSLissues4150

解决办法是使用一个脚本,做 。

a. 获取WSL 2机器的Ip地址 b. 删除之前的端口转发规则 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的虚拟交换机。enter image description here


8
投票

生成的文件etcresolv.conf是。

名称服务器 172.24.0.1

...只好改成

命名服务器8.8.8.8

的问题,解决了

© www.soinside.com 2019 - 2024. All rights reserved.