Windows10 WSL2 Ubuntu / Debian # ошибка обновления apt-get # нет сети

После обновления с WSL до WSL2

sudo apt-get update

больше не работает после

wsl --set-версия 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? С уважением

16 ответов

Решение

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

  1. Необходимо проверить, действительно ли пакеты проходят через брандмауэр Windows. Затем проверьте %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

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

Чтобы решить эту проблему, используйте сценарий, который:

а. Получить 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";
  }

Альтернативное решение - перейти в диспетчер Hyper-V и изменить виртуальный коммутатор, привязанный к физическому сетевому адаптеру.

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

сервер имен 172.24.0.1

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

сервер имен 8.8.8.8

что решает проблему

Оригинальный ответ:

В моем случае я использовал VPN в Windows, при отключении от 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 теперь работает нормально.

Кредиты NonStatic, которые поделились им на github

2 Удалите поврежденные драйверы сетевого интерфейса (может быть навсегда)

  1. Сначала зайдите в диспетчер устройств

  2. Показать скрытые устройства

  3. Удалить все адаптер расширения виртуального коммутатора Hyper-V

Благодарим Jaysonsantos, который поделился им на GitHub

У меня была такая же проблема.

Делать 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. Возможно, вы захотите запустить сценарий, который проверяет сервер имен и обновляет его до версии 8.8.8.8 при каждой перезагрузке wsl.

Я решил, что проблема изменилась на:

      nameserver 8.8.8.8

а потом

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

Это "блокирует" файл (с +i==immutableатрибут и, следовательно, не может быть восстановлен ОС. Таким образом, измененный пользователем /etc/resolv.conf будет настойчивым.

Я нашел создание /etc/wsl.conf не сработало, но все равно оставил:

      [network]
generateResolvConf = false

запустите эти команды на cmd:

      wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
netsh winsock reset
shutdown /r 

У меня была такая же ошибка, когда я применил сжатие диска Windows NTFS на диске C. Дальнейшее исследование показало, что сжатие только двух папок приводит к этой ошибке:

  1. Папка WSL ( %LocalAppData%\Packages\CanonicalGroupLimited*)
  2. %TEMP% (т.е. C:\Users\<Username>\AppData\Local\Temp)

Итак, если у вас есть Temporary failure resolving... ошибка с sudo apt-get update на WSL я рекомендую вообще не применять сжатие NTFS-диска к системному диску или, по крайней мере, оставить эти два каталога несжатыми.

Также не забудьте перезагрузить WSL в терминале CMD или PowerShell после распаковки с помощью wsl --shutdown

Может быть, это совпадение , но активация Hyper-V запуском Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -Allв Powershell в качестве администратора и перезапуск, казалось, решил проблему для меня, когда ничего не помогло. Я перепробовал большинство решений, кроме того, что связано с Hyper-V Manager; Я активировал Hyper-V, чтобы попробовать это, но в конечном итоге мне больше не пришлось ничего делать.

Если это было совпадением, возможно, серверы archive.ubuntu.com были временно недоступны. Тот факт, что я никогда не терял возможность пинговать другие адреса, подтверждает это. Комментарий к этому вопросу AskUbuntu гласит:

Иногда вы обнаруживаете, что серверы недоступны или не работают. . . Обычно проблема через некоторое время решается сама собой.

Другими словами, иногда эта проблема возникает на стороне сервера. Я не думаю, что кто-то здесь упоминал о такой возможности.

Для меня у меня был свежий экземпляр 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

все работало нормально.

у меня это сработало, я использую CiscoAnyConnect для VPN

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

Get-NetIPInterface -InterfaceAlias ​​«vEthernet (WSL)» | Set-NetIPInterface -InterfaceMetric 1

Кредиты: Cisco AnyConnect

после редактирования в /etc/resolv.conf. это решило проблему навсегда

Это известное ограничение WSL 2 (WSL 1 против WSL 2).

Идеальным решением является использование WSL 1. Microsoft также рекомендовала обходные пути (doc), но для них требуются права администратора:

Проверьте, какой антивирус вы используете. У меня были включены McAfee и защита конечных точек. Если отключить конечную точку, подключение к брандмауэру будет работать сразу (перезагрузка не требуется).

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

мое решение в windows 10 wsl2 ubuntu 20.04 с компанией таково: windows:ipconfig /allвы берете информацию

      Serveurs DNS. . .  . . . . . . . . . . : 10.54.X.X

и на убунту

      sudo vi /etc/resolv.conf

изменить сервер имен XXXX на адрес серверов DNS

Если раньше работало нормально, а сейчас нет.

Была такая же ошибка, теперь я могу решить ее, выполнив следующие действия:

-Удалить установленные районы. -Удалите Docker (если он у вас есть) -Откройте консоль в режиме администратора и введите:

      wsl -l

список установленных дистрибутивов. -Удалите все дополнительные дистрибутивы из консоли с помощью следующей команды:

      wsl --unregister NAME_DISTRO

В NAME_DISTRO измените свой дистрибутив. Удаляйте каждый из дистрибутивов, пока у вас не останется ни одного.

Он предоставит вам следующие команды, выполните их с терминалом в режиме администратора.

      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

Установите ядро, если оно у вас уже установлено, вам не нужно устанавливать его снова.

      wsl --set-default-version 2

Теперь, если вы можете установить нужный дистрибутив из Магазина Microsoft.

Я надеюсь, что это работает для вас!

Прежде чем пытаться ответить на любой другой вопрос, просто попробуйте выключить систему и начать заново. Это определенно решит проблему подключения.

Я столкнулся с той же проблемой и пробовал разные решения, но ничего не помогло. Я спал, выключив свой ноутбук, на следующий день я без проблем перезапустил WSL Ubuntu, подключенный к Интернету.

Другие вопросы по тегам