Назад | Перейти на главную страницу

Автоматический способ увеличения серийного номера файла зоны на единицу в BIND9

У меня есть сервер BIND9 с большим количеством зон, и мне нужно увеличить серийный номер файлов зоны на единицу. Некоторые зоны используют формат YYYYMMDDXX, но другие зоны просто увеличивают его на единицу, так как они являются динамическими зонами DNS, поэтому обновление всех по одному подойдет мне.

Есть способ сделать это? Я пробовал с sed но мне не хватает знаний, чтобы делать это автоматически.

Это было бы довольно сложно сделать в sed, но в awk это довольно просто.

 awk '{ if ( $0 ~ /[\t ]SOA[\t ]/ ) $7=$7+1; print}'

Если это строка SOA («SOA» с пробелом или табуляцией до и после нее), увеличьте поле 7 (серийный номер). Распечатайте каждую строку.

Это только увеличивает серийный номер, который был запрошен, однако вам все равно нужно будет запустить перезагрузку и уведомить вторичные серверы о распространении изменений.

Поскольку формат зоны привязки довольно гибкий, любые простые инструменты для работы с текстом могут быть немного опасными.

Одним из способов достижения вашей цели может быть включение динамических обновлений для всех ваших зон с ограничением доступа только с локального компьютера. Затем просто добавьте add, а затем удалите временную запись в каждой зоне с помощью nsupdate. Бинд займется обновлением серийного номера за вас.

Если вы имеете дело с разовым событием и вам нужно принудительно выполнить перевод, тогда rndc retransfer - лучший инструмент, позволяющий игнорировать серийные номера и просто делать это. Этот подход не следует использовать для повседневной работы (он снижает точность серийного номера), но иногда потребность во внеполосной работе выше.

Цикл вокруг следующего должен помочь:
rndc -s ${someslave} -k ${yourkey} retransfer ${i}.example.com

(в качестве примечания, это также предпочтительный способ исправить серийный номер, когда он увеличивается в будущем)

Если SOA всех доменов будут одинаковыми, просто поместите SOA в отдельный файл, db.soa или что-то еще, а затем включить его в каждую зону:

$INCLUDE db.soa

Таким образом, есть только одно место для увеличения. Кроме того, в зависимости от того, как именно вы реализуете все, что вы делаете, может иметь смысл использовать время эпохи UNIX в качестве серийного номера вместо увеличения на единицу каждый раз. Вы можете создать сценарий, скажем touch-zones.sh, который перезапишет файл db.soa и будет использовать текущую временную метку unix в последовательном интерфейсе. У всех зон будут увеличены серийные номера.

Я использовал утилиту под названием h2n для управления файлами зоны BIND. Впервые я узнал об этом из книги O'Reilly DNS and BIND. Вам нужна опция "-y".

Хороший HOWTO по этому поводу находится по адресу:http://www.microhowto.info/howto/reset_the_serial_number_of_a_dns_zone.html

Это также рекомендованный способ в книге DNS & BIND (изд. 2006 г.). Важно понимать, что серийные номера DNS SOA «оборачиваются». К сожалению, типичные серийные номера YYYYMMDDXX ломаются при динамических обновлениях, и я думаю, что было бы лучше вообще отказаться от этого и использовать монотонно увеличивающиеся серийные номера и сохранять файлы зон в системе контроля версий.

Для конкретной проблемы, я думаю, более серьезной задачей будет определить число, которое заставит все зоны думать, что она больше, и синхронизировать их все с этим.

Похожие вопросы по SX:

  1. Изменение серийного номера DNS в прошлое
  2. https://unix.stackexchange.com/questions/36869/how-can-i-reset-or-lower-the-serial-used-in-bind-dns-servers-soa-record