#Что произошло и как распознать неисправность
После изменения номера SOA serial администратор видит старые DNS-записи на вторичном сервере или сообщение об ошибке загрузки первичной зоны. Важно различать эти случаи: сам по себе уменьшенный или неизменённый serial обычно не является синтаксической ошибкой загрузки на primary, однако secondary может не принять обновление, считая его не новее. Неправильный формат файла, отсутствующий SOA или неподдерживаемая запись действительно способны помешать загрузке. Если файл проходит проверку, но secondary остаётся прежним, сравните serial на обеих сторонах и анализируйте передачу IXFR/AXFR; вычисление новизны описано в RFC 1982.
#Причины и отличительные признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| SOA serial на primary меньше или равен secondaryПосле восстановления архива номер зоны откатился, из-за чего secondary не видит её как новую. | dig ... SOA +short показывает на secondary больший или такой же serial. | Установить корректно увеличенный serial с учётом RFC 1982. |
| В файле зоны ошибка, а serial лишь последняя правкаИспорчены скобки SOA, точки в именах или значения других DNS-записей. | named-checkzone возвращает ошибку и строку вместо OK. | Исправить синтаксис до reload. |
| Изменён не тот файл зоныBIND читает путь из другого view или файл, управляемый панелью. | named-checkzone тестового пути проходит, а dig показывает чужой serial. | Найти фактический файл и режим обновления зоны. |
Зона управляется динамическиBIND хранит изменения в журнале .jnl, правка файла вручную не совпадает с живой зоной. | В настройке есть allow-update или update-policy. | Использовать штатный механизм обновления, не удаляя журнал. |
#Пошаговая диагностика и исправление
- Запишите исходные значения на каждом DNS-сервереВ терминале компьютера с dig выполните
dig @ns1.example.com example.com SOA +shortи аналогично запросите второй NS. Замените имена на реальные. В ответе после адреса администратора зоны идёт число serial; запишите его целиком. Если один узел не отвечает, сначала решайте проблему связи; если оба отвечают одним числом, но с разными A-записями, возможно неполное обновление кэша или другой view. - Убедитесь, что сравниваете primary и secondary нужной зоныВ панели управления или на сервере BIND найдите объявление
zone "example.com"иtype primary(в старых версияхmaster). Посмотрите путьfileи какой экземпляр named обслуживает запрос. При нескольких views одна зона может быть объявлена с разными файлами. Не редактируйте первую попавшуюся копию, пока не установили её соответствие DNS-ответу. - Проверьте синтаксис именно указанного файлаПо SSH на основном сервере выполните
sudo named-checkzone example.com /etc/bind/db.example.com, заменив имя и путь реальными значениями из конфигурации.OKозначает, что файл зоны пригоден для загрузки в условиях этой проверки, но не доказывает её обновление у secondary. Если появилась ошибка SOA или строки, исправьте указанную запись в копии и повторите проверку. - Посмотрите, не ведёт ли BIND динамический журналВ конфигурации проверьте наличие
allow-update,update-policy, inline-signing и файла.jnlрядом с зоной. При динамической зоне нельзя просто удалить.jnlради «перезагрузки». Администратор должен использовать поддерживаемыйrndc freeze/rndc thawпри необходимости ручной правки либо механизм DNS UPDATE; сохраняйте копии и учитывайте активный DNSSEC. - Сравните номера serial с правилами RFC 1982Если primary имеет 2026110201, а secondary 2026110301, вторичный сервер считает исходное значение устаревшим. Внесите реальную, согласованную правку в основной источник и задайте serial новее текущего у secondary с учётом модульной арифметики 32 бит. Не ставьте произвольное огромное число: это может затруднить будущие обновления. При переполнении или нестандартной последовательности согласуйте процедуру со специалистом.
- Проверьте конфигурацию и перечитайте изменённую зонуСоздайте резервную копию исходной зоны и конфигурации. Выполните на primary
sudo named-checkconf -z. Если ошибок нет, используйтеsudo rndc reload example.com, чтобы перечитать указанную зону, а не перезапускать весь DNS без необходимости. Еслиrndcне подключается к службе, проверьте конфигурацию управления и права доступа; не переносите ключ rndc на клиентский компьютер. - Проверьте обновление secondary и причины задержкиСпустя короткое время запросите SOA обоих NS повторно. Если secondary старый, проверьте журнал на secondary через
sudo journalctl -u bind9 -n 100 --no-pager; при несовпадающем имени службы применитеnamed. Приtransfer failedпроверьте IP источника, правила передачиallow-transferи соединение TCP/53. Нельзя открывать AXFR всему интернету ради диагностики. - Сверьте записи и предусмотрите откатСравните A, AAAA и NS на primary и secondary командой
dig @сервер имя тип +shortдля нескольких контрольных имён. Запишите время и serial. Если ошибка в ваших изменениях, восстановите сохранённый файл и установите корректный новый serial, чтобы secondary действительно получил восстановленную версию: простое возвращение старого меньшего числа не всегда сработает. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить результат и что делать при неуспехе
Результат подтверждён только тогда, когда SOA serial и содержимое контрольных записей совпадают на всех авторитетных NS. Если named-checkzone показывает OK, но обновления нет — ищите журналы передачи, а не «ошибку serial при загрузке».