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 ответов
Скорее всего, у дистрибутива есть собственный виртуальный адаптер, сначала вы можете попробовать несколько шагов:
Необходимо проверить, действительно ли пакеты проходят через брандмауэр Windows. Затем проверьте
%systemroot%\system32\LogFiles\Firewall\pfirewall.log
Если пакеты не проходят через брандмауэр, скорее всего, дистрибутив получает собственный виртуальный адаптер, проверьте, какой 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
- Если вам нужен доступ в Интернет через 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
- Создайте файл:
/etc/wsl.conf
. - Поместите в файл следующие строки
[network]
generateResolvConf = false
- В
cmd
окно, бегиwsl --shutdown
- Перезапустите WSL2
- Создайте файл:
/etc/resolv.conf
. Если он существует, замените существующий этим новым файлом. - Поместите в файл следующие строки
nameserver 8.8.8.8
- Повторите шаги 3 и 4. Вы увидите
git
теперь работает нормально.
2 Удалите поврежденные драйверы сетевого интерфейса (может быть навсегда)
Сначала зайдите в диспетчер устройств
Показать скрытые устройства
Удалить все адаптер расширения виртуального коммутатора 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. Дальнейшее исследование показало, что сжатие только двух папок приводит к этой ошибке:
- Папка WSL (
%LocalAppData%\Packages\CanonicalGroupLimited*
) -
%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;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 измените свой дистрибутив. Удаляйте каждый из дистрибутивов, пока у вас не останется ни одного.
- Теперь следуйте официальному руководству по установке wsl. https://learn.microsoft.com/en-us/windows/wsl/install-manual
Он предоставит вам следующие команды, выполните их с терминалом в режиме администратора.
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, подключенный к Интернету.