Короткий ответ
NXDOMAIN означает, что авторитативный DNS-сервер явно ответил «такого доменного имени не существует» — проблема в самой записи (опечатка, не создана, истёк срок делегирования); SERVFAIL означает, что резолвер не смог получить валидный ответ из-за ошибки на стороне DNS-инфраструктуры (недоступен авторитативный сервер, ошибка конфигурации зоны, проблема с DNSSEC-валидацией) — проблема в инфраструктуре, а не в существовании записи.
Как это работает подробнее
При резолвинге рекурсивный резолвер опрашивает цепочку серверов от корневых до авторитативных; если на любом этапе он получает явный ответ «записи нет» от авторитативного сервера соответствующей зоны, он возвращает клиенту NXDOMAIN; если же вместо ответа происходит тайм-аут, ошибка сети, отказ сервера отвечать, или, например, не проходит проверка подписи DNSSEC, резолвер возвращает SERVFAIL, не утверждая ничего о существовании записи.
Пример кода
dig example.com
dig @ns1.example.com example.comЧто использовать на практике
- Практика. при NXDOMAIN проверяют корректность самой записи и статус делегирования домена (не истёк ли домен, правильно ли прописаны NS-записи у регистратора); при SERVFAIL проверяют доступность и корректную работу авторитативных DNS-серверов домена напрямую (dig @ns1.example.com example.com) и, если используется DNSSEC, валидность цепочки подписей.
Подводные камни
- Риск. Частая ошибка — одинаково реагировать на NXDOMAIN и SERVFAIL как на «DNS не работает», хотя первое указывает чинить саму запись/домен, а второе — чинить инфраструктуру DNS-серверов или сетевую связность до них.