Windows10 WSL2 Ubuntu / Debian apt-get обновление не удалось - PullRequest
1 голос
/ 17 февраля 2020

После обновления с 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? Привет

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Сгенерированный файл /etc/resolv.conf:

nameserver 172.24.0.1

.. пришлось изменить его на

nameserver 8.8.8.8

, который решает проблему

1 голос
/ 24 февраля 2020

Скорее всего, у дистрибутива есть собственный виртуальный адаптер. Сначала нужно выполнить несколько шагов:

  1. Необходимо проверить, действительно ли пакеты go через Windows firewall enter image description here enter image description here Затем отметьте %systemroot%\system32\LogFiles\Firewall\pfirewall.log

  2. Если пакеты не проходят через брандмауэр, скорее всего, дистрибутив получает свой собственный Виртуальный адаптер, проверьте, какой IP получает распространение из Debian с помощью:

    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-адрес занимает машина в зависимости от адаптера WSL

Если вам нужен доступ к inte rnet через Windows IP, проверьте эту проблему: https://github.com/microsoft/WSL/issues/4150

Обходной путь - использовать скрипт, который делает:

a. Получить IP-адрес машины WSL 2 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";
  }

Альтернативным решением является go для Hyper-V Manager и изменение виртуального коммутатора, привязанного к физическому NIC enter image description here

...