Ошибка DNS: что это значит и как найти настоящую причину
«Ошибка DNS» - это не одна конкретная проблема, а ярлык, которым браузер, роутер или раздраженный коллега называют любой сбой на этапе разрешения имени, и способ исправить зависит целиком от того, какая именно проблема у вас на самом деле. Эта страница - отправная точка, а не диагноз: пройдите шаги триажа ниже, выполните две-три подходящие проверки, и они приведут вас к руководству, которое разбирает именно ваш симптом.
Что скрывается за «ошибкой DNS»
За одной этой фразой стоят несколько разных отказов, у которых общее только то, где они случаются. Браузер может сказать, что имя вообще не существует. Он может сказать, что резолвер так и не ответил. Страница может в итоге загрузиться, просто медленно, после заметного зависания. Целый офис может потерять способность разрешать любые имена, пока само подключение к интернету остается рабочим. Или записи вашего собственного сайта могут перестать работать для посетителей в одном регионе, при этом выглядя совершенно нормально для вас. У каждого из этого своя причина и свое решение, и ни один из них не лечится общим советом «перезагрузите роутер и попробуйте снова», который решает ровно одну из пяти проблем.
Остальная часть страницы - это короткий набор вопросов. Ответьте на них по порядку, и вы попадете на конкретное руководство, которое соответствует вашей ситуации, вместо того чтобы перебирать пять не связанных друг с другом списков решений в надежде, что один из них поможет.
Это только одно устройство или все устройства?
Попробуйте тот же самый запрос с телефона на мобильных данных, а не по Wi-Fi. Если там имя разрешается, а на ноутбуке нет, проблема локальная: неверная настройка DNS на этой одной машине, застрявший кэш, VPN, все еще держащий резолверы, до которых больше нет маршрута, или защитное ПО, перехватывающее DNS по собственной инициативе. Если проблема есть и на телефоне, в совершенно другой сети, переходите к следующему вопросу, потому что неисправность не на вашем устройстве и даже не в вашей локальной сети.
Это только один сайт или сломано все?
Попробуйте разрешить хорошо известное имя, в работоспособности которого вы уверены, например крупную поисковую систему. Если и оно не разрешается, сам ваш резолвер недоступен или не отвечает, а это проблема роутера или сети, а не чего-то, что не так с одним конкретным сайтом, к которому вы пытались обратиться. Если известное имя разрешается нормально, а не работает только нужный вам сайт, проблема именно в этом домене: в его записях, серверах имен или в изменении, которое еще распространяется и дошло не до всех резолверов.
Работает ли запрос к публичному резолверу?
Эта единственная проверка делает больше для диагностики, чем что-либо еще здесь, потому что одной командой она отделяет «моя сеть» от «сам домен»:
nslookup example.com 8.8.8.8
dig example.com @1.1.1.1
Замените example.com на настоящее имя, которое отказывает. Возможны три исхода, и каждый указывает в свою сторону:
- Вы получаете нормальный ответ. Домен нормально разрешается снаружи. Ваш резолвер по умолчанию, тот, что настроен на устройстве или роутере, и есть сломанная часть. Это DNS-сервер не отвечает, если он отказывает молча, или проблема с кэшем, если запрос раньше работал, а потом перестал.
- Вы получаете явный ответ «такого имени нет» (NXDOMAIN). Публичный резолвер, которому неоткуда взять что-то из кэша, говорит вам, что записи прямо сейчас действительно не существует, либо где-то в цепочке закэширован устаревший отрицательный ответ. Именно это сообщение и что проверить дальше разбирает DNS_PROBE_FINISHED_NXDOMAIN.
- Вы получаете ответ, но он приходит заметно долго или время скачет от запуска к запуску. Резолвер работает, просто медленно. Добавьте
+statsк запросу dig или засеките задержку на глаз. Это как ускорить медленный DNS-запрос, другая причина и другое решение, чем в двух случаях выше.
Что показывает resolvectl status в Linux
На машине с Linux, использующей systemd-resolved, одна команда показывает, что система на самом деле настроена спрашивать, и именно здесь неожиданно часто оказывается, что заявление «DNS сломан» было неверным с самого начала:
resolvectl status
Прочитайте строку «Current DNS Server» для того интерфейса, который вы используете. Если в ней указан адрес, который не является ожидаемым вами резолвером, например внутренний сервер VPN, до которого больше нет доступа, или старый адрес роутера из сети, которую вы покинули, это несоответствие и есть вся проблема, и никакая очистка кэша не исправит неверный адрес. Если указанный сервер совпадает с ожидаемым, а запросы все равно отказывают, дело не в настройке резолвера, и причину нужно искать дальше по цепочке, среди вопросов выше.
Недавно меняли DNS-запись?
Если вы или кто-то из вашей команды за последний день-два редактировал запись, переносил хостинг или менял DNS-провайдера, а ошибка непостоянна, работает у одних и не работает у других, это не сломанная запись. Это ожидаемое поведение, пока старые кэшированные ответы истекают каждый в своем темпе на разных резолверах. Именно эта ситуация, включая то, как проверить, действительно ли изменение успешно сохранилось, разбирается в руководстве как проверить распространение DNS. Не гоняйтесь за «ошибкой DNS» как за багом, если хронология совпадает с недавним изменением; сначала дайте пройти окну TTL.
Часто задаваемые вопросы
Какое руководство мне нужно, если браузер показывает конкретный код ошибки?
Поищите именно этот код. DNS_PROBE_FINISHED_NXDOMAIN означает, что имя не существует, и разобрано на отдельной странице, ссылка на которую есть выше. Общее сообщение вроде «DNS-сервер не отвечает» или «не удается найти сервер» без конкретного кода соответствует второму вопросу этой страницы: попробуйте запросить публичный резолвер напрямую и посмотрите, какой из трех исходов вы получите.
Я прошел проверки, и теперь все разрешается нормально. Что случилось?
Большинство сбоев DNS временные: резолвер был кратко перегружен, запись кэша истекла прямо во время диагностики, или сетевой сбой сам прошел. Если сейчас все разрешается чисто и остается так, дальше чинить нечего. Если проблема возвращается время от времени, сама эта закономерность уже подсказка, и стоит проверить, не совпадает ли она с определенным временем суток, сетью или приложением.
Ошибка DNS это то же самое, что сайт лежит?
Нет, и разница важна. Ошибка DNS означает, что имя вообще не разрешилось в адрес, так что соединение даже не пытались установить. Сайт лежит обычно означает, что имя разрешилось нормально, но сервер не ответил, отказал в соединении или вернул страницу с ошибкой. Проверка через публичный резолвер выше показывает, какая из ситуаций у вас: адрес возвращается или нет.
Почему один и тот же домен работает у меня, но не у коллеги?
Это почти всегда кэширование, а не сломанная запись. Разные сети используют разные резолверы, каждый со своей закэшированной копией ответа и своим сроком истечения. Один из вас может видеть устаревший кэшированный результат, пока резолвер другого уже обновился. Прежде чем считать что-то действительно сломанным, сверьте текущую, правильную запись с собственными серверами имен домена.
Стоит ли просто переключиться на публичный DNS-резолвер и прекратить диагностику?
Переключиться на 1.1.1.1 или 8.8.8.8 - разумный постоянный выбор, и это действительно быстро исключает сломанный резолвер провайдера или роутера. Это настоящее решение, когда причиной оказывается именно ваш резолвер по умолчанию, а не просто обходной путь, но это не поможет, если причина окажется в серверах имен самого домена, а не в резолвере, который вам отвечает.
Где проверить, разрешается ли имя по-разному в разных странах?
Резолвер в вашей собственной сети показывает только одну точку обзора, а ответы DNS действительно отличаются по регионам во время миграции или частичного сбоя. Запустите тот же поиск сразу из нескольких локаций инструментом проверка DNS-запроса, который проверяет из нескольких стран за один проход и показывает, где ответ отличается или упирается в таймаут.