Перейти к основному содержимому

Руководства / Починка: руководства по ошибкам, которые встречаются на практике

DNS_PROBE_FINISHED_NXDOMAIN: что это значит и как исправить

DNS_PROBE_FINISHED_NXDOMAIN означает, что запрос имени, которое вы набрали, вернулся с ответом «нет такого имени». Браузер так и не получил IP-адрес и потому не открыл соединение. Проблема в разрешении имен, а не на веб-сервере сайта.

Что означает эта ошибка

NXDOMAIN это код ответа DNS, сокращение от non-existent domain, несуществующий домен. Резолвер возвращает его после того, как прошел цепочку от корня до зоны, в которой должно быть ваше имя, и ничего там не нашел. Chrome печатает DNS_PROBE_FINISHED_NXDOMAIN. Firefox пишет, что не может соединиться с сервером. Safari пишет, что не может найти сервер. Все три сообщают об одном и том же ответе.

NXDOMAIN это не то же самое, что отказ резолвера, и от этой разницы зависит, куда смотреть. Если ваш резолвер недоступен или не укладывается в таймаут, вы получите сообщение о том, что DNS-сервер не отвечает. Если зона отвечает, но сломана, например цепочка DNSSEC не проходит проверку, обычно приходит SERVFAIL. NXDOMAIN это определенный ответ: имя не опубликовано.

Одно свойство NXDOMAIN при разборе важнее всех остальных. Отрицательные ответы кэшируются. По RFC 2308 резолвер держит результат «нет такого имени» столько, сколько указано в записи SOA зоны, обычно от 5 до 60 минут. Домен, который заработал две минуты назад, на вашей машине все еще может не открываться, и никакие перезагрузки страницы этого не изменят, пока запись в кэше не устареет или пока вы ее не сбросите.

Почему это происходит

  • Опечатка в имени хоста. Самая частая причина с большим отрывом, и та, которую все проверяют последней.
  • Домен не зарегистрирован или срок регистрации истек. Просроченный домен обычно убирают из зоны в течение нескольких часов после окончания льготного периода.
  • Нет делегирования на серверы имен. У регистратора домен есть, но записей NS, указывающих на DNS-провайдера, нет, и родительской зоне некуда направить резолвер.
  • Запись удалили или переименовали. Отсутствие A или CNAME для www дает NXDOMAIN для www.example.com, пока голый домен продолжает работать.
  • Изменение еще не дошло до вашего резолвера. Новые записи появляются везде не быстрее, чем истекает TTL прежней записи.
  • Закэшированный отрицательный ответ на вашем устройстве, в браузере или на резолвере провайдера.
  • Строка в файле hosts, которая ведет имя туда, где уже ничего нет, или осталась от старого теста.
  • VPN, прокси или фильтрующая программа, которая сама отвечает на запросы DNS и блокирует имя или не может его разрешить.
  • Имя хоста существует только в частной сети, к которой вы сейчас не подключены, например внутренний домен .local или домен компании.

Как это починить

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

Браузер

  1. Откройте тот же URL в приватном окне. Если там он открывается, дело в расширении или в куках, а не в DNS.
  2. Очистите собственный кэш резолвера Chrome на странице chrome://net-internals/#dns, затем сбросьте пулы сокетов на chrome://net-internals/#sockets. Chrome держит кэш отдельно от операционной системы, поэтому сброс на уровне ОС часто ничего не меняет.

Windows

  1. Сбросьте кэш резолвера: ipconfig /flushdns
  2. Обновите сетевую аренду, заодно подхватятся DNS-серверы, выданные по DHCP:
    ipconfig /release
    ipconfig /renew
  3. Перезапустите службу кэширования, если сброс не держится:
    net stop dnscache
    net start dnscache
  4. Загляните в C:\Windows\System32\drivers\etc\hosts, найдите строку с этим доменом и удалите ее, если она устарела.
  5. Пропишите публичный резолвер: netsh interface ipv4 set dnsservers name="Wi-Fi" static 1.1.1.1 primary
  6. В крайнем случае сбросьте сетевой стек и перезагрузитесь: netsh winsock reset

macOS

  1. Сбросьте кэш: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
  2. Посмотрите, какие серверы используются: scutil --dns | grep nameserver
  3. Направьте интерфейс на публичный резолвер: sudo networksetup -setdnsservers Wi-Fi 1.1.1.1 1.0.0.1
  4. Просмотрите /etc/hosts и удалите любую строку с этим доменом.

Linux

  1. На systemd-resolved: sudo resolvectl flush-caches, затем сверьте используемые серверы командой resolvectl status.
  2. На dnsmasq: sudo systemctl restart dnsmasq. На nscd: sudo systemctl restart nscd.
  3. Прочитайте /etc/resolv.conf, чтобы понять, какой резолвер вы опрашиваете, и /etc/hosts на предмет устаревшего переопределения.
  4. В NetworkManager меняйте резолвер на самом соединении:
    nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 1.0.0.1"
    nmcli con up "Wired connection 1"

Роутер

  1. Выключите и включите роутер. Почти все домашние роутеры держат маленький пересылающий резолвер с собственным кэшем, и перезапуск его очищает.
  2. В админке роутера посмотрите на DNS-серверы для WAN или DHCP. Если они указывают на старый внутренний сервер или на фильтрующий сервис, замените их.
  3. Проверьте с телефона по мобильной связи вместо Wi-Fi. Если там имя разрешается, неисправность внутри вашей сети.

Если домен ваш

NXDOMAIN на собственном сайте это проблема публикации, и мест, откуда она берется, немного. Сначала проверьте статус регистрации и дату окончания. Затем подтвердите делегирование, шаг, который обычно пропускают:

dig NS example.com +short
dig example.com +trace

Пустой ответ NS означает, что в родительской зоне делегирования нет, и до вашего DNS-провайдера не доберется ни один резолвер, какие бы записи вы там ни создали. Вывод +trace показывает цепочку отсылок и тот самый шаг, на котором она обрывается. Если с делегированием все в порядке, спросите сервер провайдера напрямую и убедитесь, что запись существует в той зоне, которую вы редактируете:

dig @ns1.example-dns.net www.example.com A

Когда вы добавите недостающую запись, старый отрицательный ответ будет жить в чужих кэшах столько, сколько разрешает минимум из SOA, так что подождите этот срок, прежде чем решать, что починка не сработала.

Проверка снаружи

Все шаги выше меняют только вашу машину. Ни один из них не говорит, разрешается ли имя у кого-то еще, а именно это надо узнать первым делом. Отправьте запрос двум публичным резолверам и сравните:

dig example.com +short
dig @1.1.1.1 example.com +short
dig @8.8.8.8 example.com +short

nslookup example.com 8.8.8.8

Если ваш резолвер по умолчанию не возвращает ничего, а 1.1.1.1 возвращает адрес, запись существует, а ваш резолвер держит устаревший отрицательный ответ или фильтрует имя. Если ничего не возвращает ни один резолвер, записи действительно нет.

Два резолвера это все равно одна точка обзора, а ответы DNS различаются по регионам чаще, чем принято думать. Запустите проверку DNS-запроса, чтобы разрешить имя из точек проверки в нескольких странах сразу и прочитать, что вернула каждая. Расщепленный результат, когда часть локаций отвечает, а часть нет, указывает на изменение, которое еще расходится, или на сервер имен одного провайдера, недоступный из части интернета. Такое чтение во времени называется распространением DNS, и о нем есть отдельное руководство: как проверить распространение DNS.

Как заметить, что имя перестало разрешаться

Исчезнувшая запись не оставляет следов на вашей стороне. Ее никто не залогирует, потому что ни один запрос до вас не доходит, и единственный признак это упавший график трафика. Лечится это во всех случаях одинаково: запросом имени по расписанию откуда-то, кроме вашего офиса. HostTracker следит за сайтами с 2004 года и сейчас выполняет проверки из более чем 300 точек проверки в 158 городах, отправляя оповещения по email, SMS, голосовым звонком, в Slack, Telegram и другими способами, когда имя перестает разрешаться или начинает отвечать неправильным адресом. Остальные руководства раздела собраны в кластере починки, а ближе всего к этому два: DNS-сервер не отвечает, для случая, когда резолвер молчит совсем, и как ускорить медленный DNS-запрос, для случая, когда он отвечает, но слишком долго.

Проверить сейчас

Запустите бесплатную проверку своего сайта - аккаунт не нужен.

Dns query

Следить за этим постоянно

Получайте оповещение в момент сбоя: HostTracker проверяет более чем из 300 локаций и уведомляет по email, SMS, в Slack, Telegram и не только.

Возможности HostTracker

Ещё в этом разделе: Починка: руководства по ошибкам, которые встречаются на практике