Ну, конечно, вы можете сделать это.Я сделал это некоторое время назад с «похожей» целью (это было создать NIC для пользовательского TLD).
Мой подход состоял в том, чтобы имена были зарегистрированы в базе данных со всеми их настройками (A, NS), TXT, CNAME ...).Затем, после внесения изменений, я переписал файл зоны BIND, на который затем указал основной конфигурации домена BIND.После его перезаписи вам просто нужно использовать rndc
для перезагрузки вашей зоны:
rndc reload example.com.
Примечание: Вы также можете перезагрузить все зоны, не указавзона для перезагрузки в этой команде.Вам также может понадобиться доступ с правами root, проверить его безопасность, возможно, выполнить команду, выполняемую другой программой, не доступной извне, и строго ограничить доступ с правами root только к команде rndc
.
Конечно, это означает, что ваша зона обрабатывается вашим собственным DNS-сервером, а не тем, который вам предоставляет ваш регистратор.Однако некоторые регистраторы (например, OVH) предоставляют API для прямого редактирования зоны для вашей записи на своих DNS-серверах.Это также может быть решением, но оно ограничит вас их обслуживанием.
Единственное, что вам нужно для этого сделать - это написать алгоритм для генерирования действительного файла зоны из ваших сохраненных записей (что, я думаю,в какой-то форме массива / объекта в один момент).Для записи SOA я бы посоветовал вам поместить ее в какой-нибудь файл шаблона, а затем дополнить данными зоны. Страница Wikipedia в файле зоны может помочь вам в этом.
Редактировать заметку: Если вы собираетесь «программно написать зону и перезагрузить сервер», я настоятельно советуем вам запускать эту часть как скрипт CLI, изолированный снаружи, который будет периодически перезагружать зону из базы данных или делать это по запросу, а также проверять, что вы пишете в своей зоне,Вы не должны помещать что-то, что вводит системные команды где-нибудь близко к внешнему миру.