DNS сайта LinuxBIND9DNS

BIND9: named-checkconf проходит, но служба не запускается

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

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

Не запускайте сервер многократно с разными правами и не отключайте защитные механизмы. Сначала получите точную причину из systemd и журнала, затем проверьте пробную загрузку зон и доступ к портам.

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

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

Команда named-checkconf завершается без сообщений об ошибке, но systemctl start bind9 или systemctl restart named завершается неудачей. Проверка синтаксиса не проверяет все возможности запуска: проблема может быть в занятом порте 53, правах пользователя named, недоступном файле зоны, блокировке AppArmor/SELinux либо дополнительных настройках службы. Не запускайте сервер многократно с разными правами и не отключайте защитные механизмы. Сначала получите точную причину из systemd и журнала, затем проверьте пробную загрузку зон и доступ к портам.

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

Возможная причинаКак узнатьЧто делать
Порт 53 занят другим процессомНапример systemd-resolved, dnsmasq или другой экземпляр named занял тот же адрес и порт.Журнал сообщает address already in use или not listening.Развести сервисы по адресам и интерфейсам без выключения локального DNS наугад.
Права на файл или каталогУ named нет чтения файла зоны либо записи в нужный runtime-каталог.Журнал permission denied при конкретном пути.Восстановить владельца и права только указанного файла согласно схеме пакета.
Ошибка внутри зоныСинтаксис общей конфигурации правильный, а данные зоны непригодны к загрузке.named-checkconf -z или named-checkzone показывает ошибку.Исправить содержимое зоны из резервной копии.
Сбой запуска под ограничениями службыUnit, песочница, AppArmor или SELinux запрещают конкретное действие.systemd и журнал безопасности содержат запись о запрете.Согласовать доступ в штатной политике, а не отключать защиту.

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

  1. Проверьте, какая служба действительно управляет BINDПодключитесь к серверу по SSH под административной учётной записью, выполните systemctl status bind9 --no-pager. На Debian название может быть named, если первого unit нет: проверьте systemctl status named --no-pager. Зафиксируйте Active, Main PID, Exit Code и время последней попытки; не выполняйте restart, пока не выяснили причину.
  2. Откройте журнал ошибок именно этого запускаНа сервере выполните sudo journalctl -u bind9 -n 120 --no-pager либо с -u named, если установлен другой unit. Найдите строки permission denied, address already in use, loading configuration, zone, exiting. При ошибке в файле запишите полный путь и номер строки. Не пересылайте журналы с секретами TSIG и адресами внутренней сети третьим лицам.
  3. Проверьте конфигурацию с загрузкой зонВыполните sudo named-checkconf -z — ключ -z выполняет пробную загрузку основных зон. Если он находит ошибку, сначала запустите sudo named-checkzone example.com /etc/bind/db.example.com, подставив реальную зону и путь, чтобы увидеть конкретную строку. Успешная проверка не гарантирует свободу порта и корректные runtime-права.
  4. Узнайте, что слушает порт 53Выполните sudo ss -lntup '( sport = :53 )'. В выводе увидите TCP/UDP сокеты и процессы (если права позволяют). Если другой DNS-сервис слушает тот же адрес, решите, каким интерфейсом должен пользоваться каждый. Не останавливайте systemd-resolved только ради теста: он может обслуживать сетевые приложения и локальное разрешение имен.
  5. Проверьте существование и права только нужных путейИз журнала возьмите путь файла и проверьте sudo namei -l /etc/bind/db.example.com, подставив реальный. Команда покажет права каждого родительского каталога. Сравните владельца с тем, под которым запущен named по unit systemctl cat bind9 или systemctl cat named. Исправляйте только обнаруженный доступ, не задавайте права 777 и не меняйте владельца всей /etc/bind без понимания пакета.
  6. Посмотрите настройки ограничений и запуска службыПри появлении сообщений AppArmor или SELinux обратитесь к журналу безопасности и проверьте разрешённый путь зоны; при наличии systemd-сандбокса проверьте systemctl cat bind9. Если named перенесли в нестандартный каталог, нужно корректно описать доступ в политике и unit, а не бездумно отключить механизм защиты. Сохраните копию изменяемого файла службы и конфигурации.
  7. Исправьте только найденную причину и запустите службуЕсли порт уже занят — согласуйте адреса listen-on или перенастройте конфликтующий DNS-сервис. Если файл недоступен — восстановите доступ для рабочего пользователя. Перед запуском выполните sudo named-checkconf -z; при успехе примените sudo systemctl start bind9 (либо named). Если запускаете после изменения unit, системный администратор должен сначала выполнить systemctl daemon-reload.
  8. Проверьте реальные ответы и запишите способ откатаВыполните systemctl is-active bind9 и dig @127.0.0.1 example.com SOA, подставив свою зону; в случае нескольких views используйте подходящий интерфейс. Ожидается active и ответ соответствующего сервера. Если вновь failed, не повторяйте перезапуск много раз: восстановите резервную копию, проверьте журнал и сообщите специалисту точную первую ошибку.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1На сервере BIND с sudo.
    Linux · Терминал (Bash)КомандаНужен sudo
    На сервере BIND с sudo. Проверяет синтаксис и пробную загрузку основных зон, не начинает службу.
    sudo named-checkconf -z
    Вариант 2На Linux с sudo показывает слушателей TCP/UDP 53, ничего не отключает.
    Linux · Терминал (Bash)КомандаНужен sudo
    На Linux с sudo показывает слушателей TCP/UDP 53, ничего не отключает.
    sudo ss -lntup '( sport = :53 )'
    Вариант 3На Debian с unit bind9, читать с sudo.
    Linux · Терминал (Bash)КомандаНужен sudo
    На Debian с unit bind9, читать с sudo. Если сервис имеет другое имя, замените его на named.
    sudo journalctl -u bind9 -n 120 --no-pager

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

Исправлено, когда BIND9 остаётся в состоянии active после запуска, порт слушает на нужном интерфейсе и DNS-запросы дают ожидаемый ответ. Синтаксическая проверка без этих тестов не означает, что неисправность устранена.

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

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

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