Разрешение имен хостов в неправильные IP-адреса в WSL

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

oreo@laptop:/mnt/c/Users/azhan$ curl google.com -v
*   Попытка соединения 216.239.36.10:80...
*   Попытка соединения 2607:f8b0:4007:814::200e:80...
* Непосредственная попытка соединения к 2607:f8b0:4007:814::200e: Сеть недоступна
*   Попытка соединения 2001:4860:4802:36::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:36::a: Сеть недоступна
*   Попытка соединения 2001:4860:4802:38::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:38::a: Сеть недоступна
*   Попытка соединения 2001:4860:4802:34::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:34::a: Сеть недоступна
*   Попытка соединения 2001:4860:4802:32::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:32::a: Сеть недоступна
*   Попытка соединения 2001:4860:4802:36::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:36::a: Сеть недоступна
*   Попытка соединения 2001:4860:4802:38::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:38::a: Сеть недоступна
*   Попытка соединения 2001:4860:4802:34::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:34::a: Сеть недоступна
*   Попытка соединения 2001:4860:4802:32::a:80...
* Непосредственная попытка соединения к 2001:4860:4802:32::a: Сеть недоступна
^C
oreo@laptop:/mnt/c/Users/azhan$ dig google.com

; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> google.com
;; глобальные параметры: +cmd
;; Получен ответ:
;; ->>HEADER<<- opcode: QUERY, статус: NOERROR, id: 41143
;; флаги: qr rd ad; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 0
;; ПРЕДУПРЕЖДЕНИЕ: рекурсия запрошена, но недоступна

;; СЕКЦИЯ ВОПРОСА:
;google.com.                    IN      A

;; СЕКЦИЯ ОТВЕТА:
google.com.             0       IN      A       142.250.72.142
ns3.google.com.         0       IN      A       216.239.36.10
ns4.google.com.         0       IN      A       216.239.38.10
ns2.google.com.         0       IN      A       216.239.34.10
ns1.google.com.         0       IN      A       216.239.32.10
ns3.google.com.         0       IN      AAAA    2001:4860:4802:36::a
ns4.google.com.         0       IN      AAAA    2001:4860:4802:38::a
ns2.google.com.         0       IN      AAAA    2001:4860:4802:34::a
ns1.google.com.         0       IN      AAAA    2001:4860:4802:32::a

;; Время запроса: 10 мс
;; СЕРВЕР: 172.29.0.1#53(172.29.0.1) (UDP)
;; ВРЕМЯ: Ср 25 Сен 22:03:42 PDT 2024
;; РАЗМЕР СООБЩЕНИЯ получен: 342

Когда я несколько раз выполняю curl для одной и той же веб-страницы из WSL, иногда имя хоста разрешается в IP-адрес его серверов имен, а не в фактический хост. (Посмотрите на результаты dig, IP-адрес, к которому пытается подключиться curl – 216.239.36.10 – явно НЕКОРРЕКТЕН; он должен подключаться к 142.250.72.142, что он делает примерно в 90% случаев!)

Это не проблема, связанная с curl, так как wget и ping также демонстрируют такое же поведение. Я не понимаю, почему это происходит. Что может быть причиной этого? Извините, если я пропустил что-то очевидное.

Ответ или решение

Проблема, с которой вы сталкиваетесь, связана с тем, что в WSL (Windows Subsystem for Linux) могут возникать случаи неправильного разрешения имен, когда вместо целевого IP-адреса хоста возвращается IP-адрес одного из его DNS-серверов. Это может быть вызвано несколькими факторами. Давайте рассмотрим возможные причины и решения:

Возможные причины проблемы:

  1. Конфигурация DNS: WSL использует DNS-сервер, указанный в настройках Windows. Если DNS-сервер по каким-то причинам возвращает запись для другого IP-адреса (например, кэшированный ответ или временная ошибка), это может привести к неправильному разрешению имен.

  2. Кэширование DNS: Как в системе Windows, так и в WSL может существовать кэш DNS. Если кэш содержит устаревшую или некорректную информацию, это может привести к тому, что запросы будут возвращать неправильные IP-адреса.

  3. Проблемы с IPv6: Вы получаете сообщения об ошибках, связанных с недоступностью сетей IPv6. Если ваш компьютер не настроен на использование IPv6, это может повлиять на общую работу с DNS.

Решения:

  1. Сброс кэша DNS:

    • В Windows откройте командную строку и выполните команду:
      ipconfig /flushdns
    • Это сбросит кэш DNS Windows.
  2. Настройка DNS в WSL:

    • Вы можете вручную указать DNS-серверы в WSL. Для этого создайте или отредактируйте файл /etc/resolv.conf:
      sudo nano /etc/resolv.conf
    • Добавьте строки, указывающие на надежные DNS-серверы, например:
      nameserver 8.8.8.8
      nameserver 8.8.4.4

      (это DNS-серверы Google)

  3. Отключение IPv6:

    • Если ваш интернет-провайдер не поддерживает IPv6 и вы не используете его, вы можете временно отключить IPv6. Это можно сделать в настройках адаптеров Windows или через реестр.
  4. Обновление WSL:

    • Убедитесь, что у вас установлена последняя версия WSL. Иногда обновления могут исправлять определенные ошибки и улучшать совместимость с сетевыми протоколами.
  5. Проверка конфигурации сети:

    • С помощью команды ifconfig или ip addr в WSL проверьте конфигурацию сети и убедитесь, что она настроена правильно.
  6. Изменение конфигурации Windows:

    • Если проблема продолжает возникать, проверьте настройки протокола TCP/IP в вашем Windows. Убедитесь, что все настройки корректны и нет конфликтов IP-адресов.

Заключение

Следуя вышеуказанным шагам, вы сможете устранить проблему неправильного разрешения имен в WSL. Если после всех этих действий проблема не исчезнет, возможно, стоит обратиться к вашему интернет-провайдеру для дополнительной диагностики, поскольку проблема может быть связана с конфигурацией сети или маршрутизации.

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

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