Конфигурация DNS-зон в Git

08 May 2019 #dns#git

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

Все это время была мечта перенести конфигурацию в git-репозиторий и проводить изменение конфигурации автоматически. Зафиксировал изменения в репозитории и спустя минуту они уже в домене. Только сейчас дошли руки до того, чтобы провести исследование по существующим наработкам по данной теме и обнаружил целый клондайк! Массу программ на различных языках программирования.

Остановил свой выбор на dnscontrol, написанном на Go, а значит позволяющей использовать бинарные файлы в различных операционных системах. Поддерживает большое число различных провайдеров, и довольно простая в использовании.

Установка тривиальна, либо использовать homebrew:

brew install dnscontrol

Либо скомпилировать с помощью Golang:

go get github.com/StackExchange/dnscontrol

Создал репозиторий juev/dns-config, в котором описал текущую конфигурацию своих доменов.

Для использования достаточно создать два файла:

  1. dnsconfig.js
  2. creds.json

В первом описывается конфигурация доменов, во втором размещаются ключи и токены для доступа к регистратору. При этом для того, чтобы можно было разместить второй файл в репозитории, сами токены можно размещать в переменных среды. А в конфигурации использовать имена их переменных.

После создания конфигурации достаточно проверить внесенные изменения с помощью команды:

dnscontrol preview

И если все устраивает, применить ее:

dnscontrol push

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