Четыре исхода — четыре разных дальнейших шага
Тайм-аут DNS или SERVFAIL: в чём разница
Не каждый неудачный DNS-запрос завершается одинаково. Два самых частых сбоя, не считая NXDOMAIN, тайм-аут и SERVFAIL, снаружи выглядят похоже (пригодный ответ не пришёл), но указывают на заметно разные первопричины.
Тайм-аут: ответ не пришёл вовремя
Тайм-аут означает ровно то, что звучит: запрос отправлен, а ответ не вернулся за заданное время ожидания. Так бывает из-за перегрузки авторитативного сервера, потери пакетов на пути в сети или из-за межсетевого экрана, который молча отбрасывает DNS-трафик, а не отклоняет его явно. С точки зрения отправителя запроса тайм-аут и несуществующий сервер выглядят одинаково: в обоих случаях тишина.
SERVFAIL: ответ пришёл, и это «не могу»
SERVFAIL — это настоящий ответ, а не тишина. Сервер, который ответил, прямо сообщает, что при обработке запроса возникла проблема: неверно настроенная зона, ошибка проверки DNSSEC, внутренняя ошибка на стороне резолвера. SERVFAIL говорит, что на стороне сервера произошло нечто конкретное, тогда как тайм-аут сравнительно мало говорит о том, где на самом деле проблема.
| Код | Что произошло | Стоит ли повторять? |
|---|---|---|
| Тайм-аут | Ответ не пришёл вовсе в пределах окна ожидания | Да, часто это временный сбой |
| SERVFAIL | Сервер ответил, но не смог обработать запрос | Иногда: стоит сделать 2-3 попытки с нарастающей задержкой |
| REFUSED | Сервер понял запрос, но отказался отвечать, обычно по политике | Редко: часто это постоянное ограничение доступа |
| NXDOMAIN | Такого имени не существует, и точка | Нет, никогда: это постоянный ответ |
Поскольку оба сбоя потенциально временные, правильная обработка на практике одна: повторить небольшое число раз с экспоненциально нарастающей задержкой и сообщать о реальной ошибке только после исчерпания попыток. Именно так этот инструмент и поступает с обоими кодами, в отличие от окончательного NXDOMAIN.
REFUSED обычно означает политику, а не неисправность
REFUSED часто объединяют с SERVFAIL, потому что оба означают «сервер ответил отказом», а не молчание, но причины у них обычно совсем разные. Сервер имён обычно возвращает REFUSED, когда настроен отвечать только по определённым зонам и его спрашивают о чём-то за пределами этой области, когда список контроля доступа блокирует IP отправителя запроса или когда резолвер намеренно настроен отклонять запросы извне своей сети (например, рекурсивный резолвер не обслуживает посторонних из интернета: это правильное, намеренное поведение, а не ошибка). Если REFUSED приходит от сервера, который вы не контролируете, повтор или стратегия с нарастающей задержкой его, как правило, не устранят; стоит проверить, тот ли сервер вы вообще опрашиваете.
Частая причина SERVFAIL: неисправный DNSSEC
Один из самых досадных сценариев SERVFAIL возникает на доменах, где DNSSEC включён, но настроен неверно: истекла подпись, ключ сменили на сервере имён, но не обновили у регистратора, или нарушена цепочка доверия где-то между доменом и корнем. Валидирующий резолвер, соблюдающий DNSSEC, откажется отдавать ответ, который не может криптографически проверить, и вернёт SERVFAIL, а не станет молча игнорировать неверную подпись. Тревожно то, что домен нередко прекрасно работает через резолвер, вообще не проверяющий DNSSEC, и такую причину легко ошибочно списать на «у меня всё работает», тогда как для заметной доли реальных посетителей сайт на самом деле недоступен.
Нужно проверить публичные DNS-адреса домена? Воспользуйтесь инструментом Domain IP Lookup.
Читайте также
Четыре исхода — четыре разных дальнейших шага
NXDOMAIN: почему домен не разрешается
NXDOMAIN означает, что с точки зрения DNS домена не существует: это не тайм-аут и не проблема сервера. Вот что его на самом деле вызывает.
Три причины, почему один домен отвечает по-разному
Геомаршрутизация
Свой edge-сервер в каждом регионе
Кэширование
Независимые TTL и кэши
Split-horizon
Другой ответ — так задумано
Почему DNS-ответы различаются в зависимости от места
Геомаршрутизация DNS, CDN, кеши резолверов и split-horizon: разбираем, почему один и тот же домен может возвращать разные ответы.
Четыре уровня, проверяемые по порядку
DNS
разрешение имени
Транспорт
TCP-соединение
TLS
проверка сертификата
Приложение
ответ по HTTP
Как диагностировать ошибку «Не удаётся получить доступ к сайту»
Это общее сообщение браузера скрывает несколько несвязанных причин сбоя, и DNS — часто самое быстрое, что можно сначала подтвердить или исключить.