DNS сайта LinuxBIND9DNS

BIND9: SERVFAIL после добавления подписанной DNSSEC-зоны

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

Сначала определите, где именно возникает отказ: на авторитетном сервере с флагом AA или на проверяющем рекурсивном сервере. Сравните запросы с проверкой DNSSEC и с диагностическим флагом CD; он не изменяет настройки и используется только для определения типа сбоя.

В этой статье
  1. Что произошло и как распознать неисправность
  2. Причины и отличительные признаки
  3. Пошаговая диагностика и исправление
  4. Как проверить результат и что делать при неуспехе

#Что произошло и как распознать неисправность

После включения DNSSEC или переноса подписанной зоны часть рекурсивных DNS-серверов отвечает SERVFAIL, хотя прямой запрос к авторитетному BIND9 иногда возвращает A-запись. Это не означает, что у BIND9 нужно отключить проверку DNSSEC: причиной могут быть неверный DS у регистратора, устаревшая RRSIG, несогласованные DNSKEY либо недоступный авторитетный сервер. Сначала определите, где именно возникает отказ: на авторитетном сервере с флагом AA или на проверяющем рекурсивном сервере. Сравните запросы с проверкой DNSSEC и с диагностическим флагом CD; он не изменяет настройки и используется только для определения типа сбоя.

#Причины и отличительные признаки

Возможная причинаКак узнатьЧто делать
DS родительской зоны не соответствует DNSKEYПри перевыпуске ключей или переносе подписанной зоны DS у регистратора остался от прежнего ключа.Авторитетный сервер отвечает, а проверяющий рекурсор выдаёт SERVFAIL; проверка через CD успешна.Согласовать DS с опубликованным ключом по плану смены DNSSEC.
Истекли подписи RRSIGПодписи в зоне не продлеваются или неправильно работает система автоматического подписания.dig ... RRSIG показывает давно истёкшие временные метки.Исправить механизм подписания и повторно проверить цепочку.
Служба не загрузила новую зонуОшибка в файле, журнале обновлений или доступе к ключам мешает отвечать авторитетно.Прямой запрос авторитетному узлу не содержит AA либо возвращает SERVFAIL.Прочесть журнал named и исправить конкретную ошибку загрузки.
Некоторые серверы отвечают старой подписьюВторичный сервер ещё не получил актуальную зону.Результаты по разным NS и SOA serial не совпадают.Проверить передачу зоны, NOTIFY и наборы ключей на NS.

#Пошаговая диагностика и исправление

  1. Определите, какой сервер выдаёт SERVFAILНа своём компьютере откройте терминал Linux или PowerShell с установленной утилитой dig (на Debian её предоставляет пакет dnsutils/bind9-dnsutils). Выполните dig @1.1.1.1 example.com A +dnssec для своего имени вместо example.com. Найдите status: и флаги ответа; при SERVFAIL проверьте другой известный рекурсор. Если SERVFAIL только у одного — возможен его кеш; если у нескольких, продолжайте диагностику подписи.
  2. Сравните запрос с диагностическим флагом CDВ том же терминале выполните dig @1.1.1.1 example.com A +dnssec +cd. Флаг CD просит не выполнять проверку DNSSEC для этого конкретного запроса, но не выключает её на сервере. Если с CD видны записи, а без него SERVFAIL, наиболее вероятна ошибка цепочки доверия. Если оба запроса неудачны, сначала проверьте доступность авторитетных NS и саму зону.
  3. Уточните авторитетные серверы и проверьте каждыйЗапросите dig +short NS example.com и затем отдельно dig @ns1.example.com example.com SOA +norecurse, меняя ns1.example.com на реальный сервер зоны. В полном выводе ищите aa: он показывает авторитетный ответ. Сравните серийные номера SOA на всех NS. Если один отвечает старым набором — исправляйте синхронизацию зоны, а не DNSSEC во всём интернете.
  4. Проверьте записи DS и DNSKEY, не изменяя ихИспользуйте dig example.com DS +dnssec для записи DS из родительской зоны, затем dig @ns1.example.com example.com DNSKEY +dnssec для открытых ключей авторитетного сервера. Сопоставление дайджеста DS с DNSKEY требует DNSSEC-анализатора или штатных инструментов BIND, а не визуального сравнения длинных строк. Отсутствие DS допустимо для неподписанной цепочки, но оставшийся DS при сменившемся ключе приводит к сбою.
  5. Посмотрите подписи и время сервераЗапросите dig @ns1.example.com example.com SOA +dnssec; если возвращаются RRSIG, проверьте их сроки действия и время сервера. На сервере с правами администратора откройте SSH, проверьте timedatectl status, журналы sudo journalctl -u bind9 -n 100 --no-pager (на отдельных системах имя службы named). Если часы отклоняются, исправляйте синхронизацию времени штатным NTP, а не ручным обходом DNSSEC.
  6. Проверьте действительную загрузку и подпись зоныНа Linux-сервере с SSH и правами администратора выполните sudo named-checkconf -z — эта команда пробно загружает основные зоны из активной конфигурации. Если обнаружена ошибка, устраните её по строке сообщения. На динамически обновляемой подписанной зоне не правьте файл вслепую: подписи может обслуживать inline-signing, ключи и журнал .jnl.
  7. Исправьте подтверждённое несоответствие без отключения защитыЕсли авторитетные ответы правильные, а DS не соответствует ключу, согласуйте обновление DS в панели регистратора по документации вашей системы подписания, сохранив прежние значения. Если RRSIG истекли, восстановите автоматическое подписывание BIND9 или процедуру повторного подписания. Перед любым изменением сохраните копию зоны и настройки; не публикуйте новый DS до проверки соответствующего DNSKEY у всех авторитетных серверов.
  8. Перепроверьте цепочку с нескольких рекурсоров и продумайте откатПосле изменения подождите срок кеширования DS/DNSKEY и запросите домен через несколько рекурсоров обычным запросом без CD. Должны появиться записи с status: NOERROR, без SERVFAIL, и ожидаемые A/AAAA. Если отказ сохраняется, верните прежнюю конфигурацию подписания, если это безопасно для текущего DS, либо согласуйте план восстановительного переключения DNSSEC со специалистом: поспешный возврат старого ключа может сделать проблему хуже.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Выполняется без sudo на компьютере с dig.
    Linux · Терминал (Bash)Команда
    Выполняется без sudo на компьютере с dig. Замените example.com на реальное имя. Запрос к рекурсору с DNSSEC-данными, без изменений DNS.
    dig @1.1.1.1 example.com A +dnssec
    Вариант 2Без sudo; +cd только диагностический флаг конкретного запроса.
    Linux · Терминал (Bash)Команда
    Без sudo; +cd только диагностический флаг конкретного запроса. Не отключает проверку у всех клиентов.
    dig @1.1.1.1 example.com A +dnssec +cd
    Вариант 3На сервере BIND9 под SSH, нужна учётная запись с sudo.
    Linux · Терминал (Bash)КомандаНужен sudo
    На сервере BIND9 под SSH, нужна учётная запись с sudo. Пробно загружает первичные зоны; не перезапускает сервер.
    sudo named-checkconf -z

#Как проверить результат и что делать при неуспехе

Окончательный успех — каждый авторитетный NS возвращает одинаковую актуальную зону, а независимые проверяющие рекурсоры разрешают её без CD. Если остался SERVFAIL, сохраните обезличенные выводы, NS и время проверки; не удаляйте DNSSEC-записи наугад.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.