Что такое SERVFAIL
SERVFAIL — один из кодов ответа DNS. Он означает сбой сервера при обработке запроса: резолвер не смог получить корректный ответ и сообщает об общей неудаче. В программах вы можете видеть его в выводе утилит nslookup и dig, а в браузерах он проявляется как ошибки вроде ERR_DNS_SERVER_FAILED.
Отличие от NXDOMAIN важное: NXDOMAIN говорит «такого имени нет», SERVFAIL — «я не смог выяснить, есть ли оно». Первое обычно связано с самим именем, второе — с инфраструктурой.
Запрос вашего компьютера может пройти через несколько уровней: локальный кэш, роутер, резолвер провайдера и, наконец, авторитетные серверы. SERVFAIL может быть выдан на любом из этих уровней, и умение определить нужный уровень экономит много времени.
Основные причины: SERVFAIL в DNS
Самые частые: недоступные или неправильно настроенные авторитетные серверы домена. Резолвер идёт к ним за ответом, не получает его и возвращает SERVFAIL. Вторая группа — ошибки DNSSEC: подписи домена испортились или устарели, и резолвер, который проверяет подписи, отказывается отдавать данные.
Кроме того, SERVFAIL возникает при перегрузке резолвера, при ошибках в делегировании зоны, когда в родительской зоне указаны не те серверы, и при проблемах связности между резолвером и авторитетными серверами.
На практике SERVFAIL нередко возникает вскоре после переноса домена к другому DNS-провайдеру или изменения серверов имён: пока старые данные закэшированы, а новые ещё не распространились, отдельные резолверы отвечают неудачей. Обычно это проходит само по мере истечения кэша.
Как проверить самостоятельно
Выполните запрос имени к вашему резолверу и к другому. Если у одного SERVFAIL, а у другого корректный ответ, причина в первом резолвере или в его отношениях с зоной. Если SERVFAIL у всех, проблема, вероятно, в самой зоне.
В утилите dig можно посмотреть код ответа и флаги. Добавьте параметр отключения проверки DNSSEC, чтобы увидеть, исчезнет ли ошибка: если да, причина в подписях. Такая диагностика не меняет ничего в системе и безопасна.
Полезно сравнить результаты нескольких публичных резолверов и запроса напрямую к авторитетному серверу зоны. Если авторитетный сервер отвечает нормально, а резолверы возвращают SERVFAIL, вероятно, проблема в подписях DNSSEC или делегировании.
Если вы владелец домена
Проверьте, что серверы имён, указанные у регистратора, реально отвечают и содержат зону. Убедитесь, что записи NS в родительской зоне совпадают с настоящими серверами, а запись зоны отдаётся на все из них. Если вы недавно меняли DNS-провайдера, проверьте, не остались ли в делегировании старые серверы без зоны.
Если включена подпись DNSSEC, убедитесь, что записи DS у регистратора соответствуют текущим ключам. Несоответствие — типичная причина массовых SERVFAIL после переноса домена.
Владельцам доменов стоит помнить: разное время жизни записей в кэше приводит к тому, что исправление действует не сразу. Уменьшите время жизни записей заранее, если планируете изменения в делегировании.
Если вы обычный пользователь
Сменить резолвер на компьютере или роутере — самое быстрое действие. Очистите кэш DNS и повторите проверку. Отключите защитные программы, подменяющие DNS-ответы, на время теста.
Если SERVFAIL остаётся при разных резолверах, а сайт недоступен только вам и другим пользователям, остаётся ждать, пока владелец домена исправит настройки. Вмешаться со своей стороны нельзя, и попытки менять сетевые настройки бесполезны.
Также проверьте, не включён ли на вашем роутере собственный фильтр имён с отдельным списком запретов: он тоже способен отвечать неудачей на запросы, которые обычный резолвер выполнил бы без проблем.
Важные оговорки
Некоторые резолверы кэшируют неудачу на короткое время, поэтому ошибка может сохраняться после исправления. Подождите или очистите кэш. Также помните, что разные резолверы могут вести себя по-разному в одной и той же ситуации: строгая проверка DNSSEC есть не у всех, и поэтому один сервер даёт SERVFAIL, а другой возвращает адрес.
Эта разница не повод отключать проверку подписей: она защищает от подмены ответов.
Если вы автоматизируете проверки, различайте SERVFAIL и отсутствие ответа: первое приходит явным кодом, второе — таймаутом, и реагировать на них нужно по-разному.