- Вопрос или проблема
- Ответ или решение
- Временная ошибка разрешения имени в WSL: Решение проблемы
- Причины возникновения ошибки
- Шаги по устранению проблемы
- 1. Проверка и редактирование файла resolv.conf
- 2. Настройка wsl.conf для долговременных изменений
- 3. Перезапуск WSL
- 4. Настройки для VPN
- 5. Настройка брандмауэра
- 6. Проверка сетевого соединения
- Заключение
Вопрос или проблема
Запускаю Ubuntu на WSL и пытаюсь сделать пуш в github и скачать новые модули python с помощью pip, и получаю эту ошибку.
Повторная попытка (Retry(total=4, connect=None, read=None, redirect=None, status=None)) после разрыва соединения с 'NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f9d654fe0b8>: Не удалось установить новое соединение: [Errno -3] Временная ошибка разрешения имени',)': /simple/tensorflow/
Я посмотрел файл resolv.conf, и, возможно, он поврежден, так как он просто выдает несколько строк @@@. У кого-нибудь есть идеи, как это исправить?
Когда я запускаю l
ls -al /etc/resolv.conf
-rw-r--r-- 1 root root 261 Nov 28 12:54 /etc/resolv.conf
Обновление:
Мне удалось решить проблему. Нужно было отредактировать файл и добавить строку типа:
nameserver 8.8.8.8
-
Внутри WSL2 создайте или добавьте файл: /etc/wsl.conf
-
Добавьте в файл следующие строки, чтобы ваши изменения DNS не были перезаписаны. (Это заменит все, что могло существовать в wsl.conf. Также можно использовать редактор здесь.)
sudo tee /etc/wsl.conf << EOF [network] generateResolvConf = false EOF
-
В
cmd
окне (!!), выполнитеwsl --shutdown
-
Запустите WSL2
-
Запустите следующее внутри WSL2 (строка с
search
является необязательной)sudo rm -rf /etc/resolv.conf sudo tee /etc/resolv.conf << EOF search yourbase.domain.local nameserver 8.8.8.8 nameserver 1.1.1.1 EOF
У меня такая же проблема. Она также, похоже, связана с VPN.
Я выяснил, что ошибка возникает только при попытке разрешения DNS, когда я сначала подключаюсь к VPN, а потом запускаю WSL-Ubuntu после перезагрузки системы. Сначала запуск WSL-Ubuntu, а потом подключение VPN, по-видимому, работает.
Для меня это было простое решение. Из Powershell:
wsl --shutdown
А затем перезапустите wsl
, и это сработало. Да, я знаю, что это решение слишком простое и может не подойти вам, если вы пытаетесь избежать сброса до WSL. Но если вы ищете что-то простое, возможно, стоит попробовать.
У меня была такая же ошибка. Пинг IP-адресов работал, но разрешение DNS не работало. Снаружи WSL все было в порядке. Проблема возникла из-за OpenVPN для меня, когда я отключился от VPN на работе, ошибка исчезла.
Когда я выполнил ls -lah /etc/resolv.conf
, я увидел, что это символьная ссылка на ../run/resolvconf/resolv.conf
.
Но затем я заметил, что ../run/resolvconf/resolv.conf
не существует, и на самом деле, хотя директория /run/
существует, /run/resolvconf/
не существует.
Так что я создал эту директорию и также создал пустой файл sudo vim /run/resolvconf/resolv.conf
.
Затем я отредактировал этот файл, чтобы он содержал:
nameserver 1.1.1.1
После того как я сохранил этот файл, ping google.com
заработал!
(Похоже, этот файл необходим. Я не знаю, как он у меня был удален.)
https://github.com/microsoft/WSL/issues/6601 был полезен для меня.
Исправление для resolv.conf
от @matson kepson касается DNS. Если вы не можете пинговать IP-адреса, проблема может быть либо в брандмауэре, либо в VPN. Вы можете исправить это в Powershell администратора.
Разберитесь с брандмауэром, как написал @ElektronenVolt:
New-NetFirewallRule -DisplayName "WSL allow in" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
Или с помощью тяжелой артиллерии:
Set-NetFirewallProfile -DisabledInterfaceAliases "vEthernet (WSL)"
Разберитесь с VPN:
Get-NetIPInterface -InterfaceAlias "vEthernet (WSL)" | Set-NetIPInterface -InterfaceMetric 1
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
VPN в моем случае был корпоративный VPN, использующий Cisco AnyConnect. Мне также был нужен фикс resolv.conf
.
Завершите работу Линукс-ВМ перед тем, как начать её снова, прежде чем вы протестируете новые настройки:
wsl --shutdown
У меня возникла эта проблема на нескольких машинах, старых / новых / W10 / W11. В моем случае, если я отключаю брандмауэр Windows Defender -> разрешение DNS работает нормально из WSL.
Если снова включить его и проверить падения пакетов, проблема проявляется в профиле публичной сети:
#Version: 1.5
#Software: Microsoft Windows Firewall
#Time Format: Local
#Fields: date time action protocol src-ip dst-ip src-port dst-port size tcpflags tcpsyn tcpack tcpwin icmptype icmpcode info path
2022-02-01 20:30:34 DROP UDP 172.30.230.159 172.30.224.1 29101 53 45 - - - - - - - RECEIVE
2022-02-01 20:30:35 DROP UDP 172.30.230.159 172.30.224.1 18103 53 45 - - - - - - - RECEIVE
Я исправил это, установив правило брандмауэра для сетевого адаптера WSL – выполните это в Powershell:
New-NetFirewallRule -DisplayName "WSL allow in" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
В моем случае ни одно из приведенных выше решений не сработало.
В конце концов, я отключил Протокол Интернета версии 6 (TCP/IPv6) в Свойствах WLAN в Настройках Сетевых подключений. DNS снова заработал.
Скриншот конфигурации:
Скриншот успешного пинга GitHub.com:
Я решил проблему в моей лаборатории. Вы можете использовать следующие шаги для этого.
-
- Откройте Powershell от имени администратора
-
- Get-NetAdapter
-
- New-NetFirewallRule -DisplayName “WSL allow in” -Direction Inbound -InterfaceAlias “vEthernet (WSL)” -Action Allow
-
- Get-NetIPInterface -InterfaceAlias “vEthernet (WSL)”
-
- Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object -ExpandProperty ServerAddresses | Foreach-Object { “nameserver $_” }
-
- Скопируйте все адреса имен серверов
-
- откройте дистрибутив
-
- sudo mv /etc/resolv.conf /etc/resolv.conf.old
-
- измените файл wsl.conf с помощью sudo nano /etc/wsl.conf
- #[boot]
- #systemd=true
- [network]
- generateResolvConf = false
-
- sudo touch /etc/resolv.conf
-
- sudo nano /etc/resolv.conf
вставьте адрес nameserver в этот файл
Пример: nameserver 8.8.8.8
- sudo nano /etc/resolv.conf
-
- сохраните resolv.conf
-
- wsl –shutdwon и откройте его.
Попробуйте пинговать любой DNS:
ping 1.1.1.1
Если вы получили тайм-аут – это не проблема DNS, а проблема подключения к интернету (ваш адаптер не имеет доступа в интернет).
Это может произойти из-за проблемы с Cisco AnyConnect – не может правильно работать с VirtualSubnets
.
Решение: выполните следующее в Windows Powershell
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
потом
ping 1.1.1.1
Больше об этом https://askubuntu.com/a/1404103/791374
А здесь https://gist.github.com/machuu/7663aa653828d81efbc2aaad6e3b1431
В моем случае внутри wsl файл: /etc/resolve.conf
содержал неработающий сервер имен.
wsl --shutdown
не разрешил проблему.
Однако, перезагрузка всего компьютера с Windows решила проблему. После перезагрузки /etc/resolve.conf (внутри wsl) был обновлен и теперь указывает на работающий сервер имен.
Я только что столкнулся с этой проблемой, которая задокументирована в этой теме [https://github.com/microsoft/WSL/issues/6404]. Один из комментариев оказался решением для меня, которое заключается в том, чтобы установить generateResolvConf = true
. Не знаю, почему противоположное первоначальному предложению решение сработало, но вот так.
Если вы используете настройку VPN на Windows, возможно, вам стоит использовать dnsTunneling.
Для этого вы должны использовать .wslconfig (согласно [1]).
Файл .wslconfig можно редактировать из Windows, откройте Провроводник файлов, введите в строку поиска %USERPROFILE%. В открывшейся папке создайте файл .wslconfig. Откройте его с помощью выбранного редактора и добавьте:
[wsl2]
dnsTunneling=true
Затем из cmd:
wsl --shutdown
Затем откройте wsl. Чтобы проверить, работает ли:
ping google.com
В моем случае я использовал виртуальный коммутатор Hyper-V с использованием адаптера Ethernet и пытался получить доступ к сети через Wi-Fi, что не сработало и привело к
ping askubuntu.com
ping: askubuntu.com: Временная ошибка разрешения имени
Я изменил настройки для WSL (брандмауэр Hyper-V) в Диспетчере виртуальных коммутаторов в Hyper-V с Ethernet на Wi-Fi.
wsl --shutdown
wsl
тогда это сработало
ping askubuntu.com
PING askubuntu.com (172.64.150.156) 56(84) байт данных.
64 байта от 172.64.150.156: icmp_seq=1 ttl=56 время=37.6 мс
64 байта от 172.64.150.156: icmp_seq=2 ttl=56 время=45.0 мс
64 байта от 172.64.150.156: icmp_seq=3 ttl=56 время=122 мс
64 байта от 172.64.150.156: icmp_seq=4 ttl=56 время=69.2 мс
^C
--- статистика пинга askubuntu.com ---
4 пакета отправлено, 4 получено, 0% потерь, время 3006мс
мс: min/avg/max/mdev = 37.586/68.462/122.069/33.079 мс
Ответ или решение
Временная ошибка разрешения имени в WSL: Решение проблемы
Проблема временной ошибки разрешения имени в Windows Subsystem for Linux (WSL) может проявляться, когда вы пытаетесь выполнять сетевые операции, такие как подключение к GitHub или загрузка пакетов с помощью pip. Эта ошибка может возникать по разным причинам, в том числе из-за конфигурации DNS, наличия VPN или различных сетевых настроек. Ниже представлено подробное руководство по устранению этой проблемы.
Причины возникновения ошибки
-
Проблемы с файлом resolv.conf: Этот файл отвечает за конфигурацию DNS-серверов в Linux. Если в файле указаны неверные или недоступные DNS-серверы, это может привести к ошибкам разрешения имен.
-
VPN-соединения: Подключение к виртуальной частной сети (VPN) иногда может прерывать DNS-разрешение, особенно если VPN настраивается неправильно или использует свои собственные DNS-серверы.
-
Настройки брандмауэра Windows: Брандмауэр может блокировать WSL от доступа к интернету, что также исправляется путем настройки правил.
-
Проблемы сетевого соединения: Это может быть связано с неправильными настройками переключателя Hyper-V или использованию неактивного сетевого адаптера.
Шаги по устранению проблемы
1. Проверка и редактирование файла resolv.conf
Первым делом проверьте содержимое файла /etc/resolv.conf
. Если он содержит значок @@@
, это означает, что DNS-серверы указаны неправильно. Для изменения файла выполните следующие действия:
sudo rm -rf /etc/resolv.conf
sudo tee /etc/resolv.conf << EOF
nameserver 8.8.8.8
nameserver 1.1.1.1
EOF
2. Настройка wsl.conf для долговременных изменений
Чтобы избежать перезаписи файла resolv.conf при каждом запуске WSL, создайте или отредактируйте файл /etc/wsl.conf
:
sudo tee /etc/wsl.conf << EOF
[network]
generateResolvConf = false
EOF
3. Перезапуск WSL
Для применения изменений необходимо перезапустить WSL. Откройте PowerShell и выполните команду:
wsl --shutdown
После этого запустите WSL снова.
4. Настройки для VPN
Если вы используете VPN, попробуйте следующее:
- Подключите WSL перед подключением к VPN.
- Используйте команду для изменения метрики IP-интерфейса:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
5. Настройка брандмауэра
Убедитесь, что брандмауэр Windows не блокирует WSL. Для открытого доступа используйте следующую команду в PowerShell:
New-NetFirewallRule -DisplayName "WSL allow in" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
6. Проверка сетевого соединения
Проверьте ваше интернет-соединение, используя команду ping. Убедитесь, что вы можете пинговать IP-адреса, такие как 1.1.1.1 или 8.8.8.8. Если это работает, но DNS по-прежнему не разрешается, причина может быть связана с вышеупомянутыми факторами.
Заключение
Проблема с временным сбоем разрешения имен в WSL может быть резюмирована несколькими шагами: проверить и исправить файл resolv.conf
, настроить wsl.conf
, перезапустить WSL, а также настраивать параметры VPN и брандмауэра. Подходя к проблеме систематически, вы сможете устранить ошибки и восстановить функциональность сетевых операций в Ubuntu на WSL.
Для получения более подробной информации и дополнительных параметров, вы можете обратиться к официальной документации Microsoft по WSL или посетить специализированные форумы для получения более целенаправленной помощи.