Временная ошибка разрешения имени в WSL

Вопрос или проблема

Запускаю 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
  1. Внутри WSL2 создайте или добавьте файл: /etc/wsl.conf

  2. Добавьте в файл следующие строки, чтобы ваши изменения DNS не были перезаписаны. (Это заменит все, что могло существовать в wsl.conf. Также можно использовать редактор здесь.)

    sudo tee /etc/wsl.conf << EOF
    [network]
    generateResolvConf = false
    EOF
    
  3. В cmd окне (!!), выполните wsl --shutdown

  4. Запустите WSL2

  5. Запустите следующее внутри 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 снова заработал.

Скриншот конфигурации:

Скриншот отключения Протокола Интернета версии 6 (TCP/IPv6)

Скриншот успешного пинга GitHub.com:

Скриншот успешного пинга GitHub.com

Источник:
https://unix.stackexchange.com/a/628767/338681

Я решил проблему в моей лаборатории. Вы можете использовать следующие шаги для этого.

    • Откройте 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
    • сохраните 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

[1]https://learn.microsoft.com/en-us/windows/wsl/networking

[2].wslconfig location

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

Причины возникновения ошибки

  1. Проблемы с файлом resolv.conf: Этот файл отвечает за конфигурацию DNS-серверов в Linux. Если в файле указаны неверные или недоступные DNS-серверы, это может привести к ошибкам разрешения имен.

  2. VPN-соединения: Подключение к виртуальной частной сети (VPN) иногда может прерывать DNS-разрешение, особенно если VPN настраивается неправильно или использует свои собственные DNS-серверы.

  3. Настройки брандмауэра Windows: Брандмауэр может блокировать WSL от доступа к интернету, что также исправляется путем настройки правил.

  4. Проблемы сетевого соединения: Это может быть связано с неправильными настройками переключателя 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 или посетить специализированные форумы для получения более целенаправленной помощи.

Оцените материал
Добавить комментарий

Капча загружается...