DNS
Использовать наш DNS как вторичный (OctoDNS)
Что такое вторичный DNS?
Вторичный DNS — это резервный DNS, где хранится копия информации о зонах и записях. Исходные данные он получает с основного сервера.
Чтобы использовать наш DNS в качестве вторичного, отправьте ему информацию обо всех DNS-записях из баз вашего DNS-провайдера по инструкции. Для синхронизации мы используем провайдер EdgeCenter DNS.
Сначала убедитесь, что ваш провайдер есть в списке провайдеров, которые поддерживают OctoDNS. Если нет — передать записи автоматически нельзя и дальнейшая инструкция не поможет.
Синхронизировать записи вашего DNS с нашим
Инструкция поможет установить OctoDNS — инструмент для управления DNS-зонами разных провайдеров. С его помощью вы сделаете записи на нашем DNS-сервере идентичным записям на вашем. Ниже в схеме вы можете посмотреть, как это работает.
1. Создайте в личном кабинете DNS-зону, для которой хотите изменить DNS-записи. Если зона уже создана, пропустите этот шаг.
2. На своём устройстве обновите локальный индекс пакетов, чтобы загрузить все новые версии.
sudo apt update
3. Установите пакеты python и virtualenv.
sudo apt install python virtualenv
4. Создайте необходимые каталоги для OctoDNS.
mkdir ~/octodns ~/octodns/config
5. Перейдите в ~/octodns.
cd ~/octodns
6. Создайте виртуальную среду python, включите её и во время работы с этой инструкцией оставайтесь в ней.
7. Если у вас нет утилиты Git, установите её с помощью команды:
sudo apt-get install git-all
8. В virtualenv установите pip-пакеты OctoDNS для двух провайдеров: EdgeCenter DNS и вашего. Чтобы сделать это, используйте команду ниже, заменив octodns_yourprovider на название вашего провайдера из столбца Module в таблице провайдеров.
pip install octodns octodns_edgecenter octodns_yourprovider
После установки запросите версию OctoDNS, чтобы удостовериться, что всё работает.
octodns-sync --version
Вы получите ответ с указанием версии вашей OctoDNS, например:
octoDNS 0.9.21
Если видите ошибку:
octodns-sync: command not found
скорее всего, вы находитесь не в virtualenv. Проделайте шаги № 4–6 ещё раз.
9. Перейдите в директорию config, которую создали в шаге № 4:
cd ~/octodns/config
10. Создайте внутри неё конфигурационный файл.
nano config.yaml
В этом конфигурационном файле нужно указать провайдеров и зоны, которыми будет управлять OctoDNS, а также зависимость между ними. Конечный файл будет выглядеть подобным образом:
Разберём, как указать провайдера, зоны и зависимость.
Скопируйте код ниже и вставьте в конфигурационный файл (в формате .yaml отступы имеют большое значение — с нашим шаблоном вы точно введёте данные так, чтобы программа смогла их прочитать):
providers:
[имя вашего провайдера]:
[класс вашего провайдера]
[данные для аутентификации, строчка №1]
[данные для аутентификации, строчка №2]
[данные для аутентификации, строчка №...]
ec:
class: octodns_edgecenter.EdgeCenterProvider
[данные для аутентификации, строчка №1]
[данные для аутентификации, строчка №2]
[данные для аутентификации, строчка №...]
zones:
[ваша зона DNS №1].:
sources:
- [имя вашего провайдера]
targets:
- ec
[ваша зона DNS №2].:
sources:
- [имя вашего провайдера]
targets:
- ec
Заполните секции провайдеров. Шаблоны для них расположены в репозиториях провайдеров OctoDNS.
Начнём заполнение с данных для провайдера EdgeCenter DNS. Чтобы открыть его репозиторий, перейдите к таблице провайдеров и кликните по octodns_edgecenter из столбца Module.
Найдите раздел Configuration → EdgeCenterProvider. Там описаны имя провайдера, название класса провайдера и данные для аутентификации.
Имя провайдера (ec) и название класса (class: octodns_edgecenter.EdgeCenterProvider) уже добавлены в шаблон. Заполните данные для аутентификации согласно разделу Configuration. Вы можете выбрать, какие аутентификационные данные использовать: API key или логин и пароль. API key — это API-ключ, который вы можете сгенерировать в личном кабинете. Логин и пароль — это те же логин и пароль, с которыми вы входите в наш личный кабинет.
Мы рекомендуем использовать аутентификацию через API key. Пример конфигурации с API key:
ec:
class: octodns_edgecenter.EdgeCenterProvider
token: TOKEN
token_type: APIKey
Пример конфигурации с логином и паролем:
ec:
class: octodns_edgecenter.EdgeCenterProvider
login: Yourlogin
password: Yourpassword
auth_url: https://api.edgecenter.ru/iam
url: https://api.edgecenter.ru/dns/v2
records_per_response: 1
В конфигурационном файле заполните секцию вашего провайдера по аналогии с провайдером EdgeCenter DNS: откройте репозиторий, найдите раздел Configuration, скопируйте и вставьте имя провайдера, название класса провайдера, затем заполните ваши данные для аутентификации. Например, если ваш провайдер — Selectel, результат заполнения будет выглядеть так:
selectel:
class: octodns_selectel.SelectelProvider
token: TOKEN
ec:
class: octodns_edgecenter.EdgeCenterProvider
token: TOKEN
token_type: APIKey
Затем заполните в конфигурационном файле секцию DNS-зоны. Для каждой зоны введите её название и пару основного и вторичного провайдера.
Ваш провайдер выступает как источник (OctoDNS будет брать DNS-записи из базы данных основного провайдера), а провайдер EdgeCenter DNS — как вторичный/целевой DNS. Его записи будут отредактированы, чтобы соответствовать данным вашего провайдера).
Например, чтобы синхронизировать DNS-записи зоны mydnszone.com, нужно ввести следующие данные.
zones:
mydnszone.ru.:
sources:
- selectel
targets:
- ec
Внимание. Если ваша DNS-зона содержит NS-записи, во время синхронизации может возникнуть ошибка. Чтобы избежать этого, добавьте следующий фильтр в ваш конфигурационный файл:
processors:
no-root-ns:
class: octodns.processor.filter.IgnoreRootNsFilter
Фильтр проигнорирует NS-записи вашей зоны, а синхронизация будет успешной.
Пример конфигурационного файла:
processors:
no-root-ns:
class: octodns.processor.filter.IgnoreRootNsFilter
providers:
selectel:
class: octodns_selectel.SelectelProvider
token: TOKEN
ec:
class: octodns_edgecenter.EdgeCenterProvider
token: TOKEN
token_type: APIKey
zones:
mydnszone.ru.:
sources:
- selectel
processors:
- no-root-ns
targets:
- ec
После занесения всех зон в файл сохраните изменения и закройте его.
11. Последний шаг — синхронизация DNS-записей. Для начала выполните тестовую команду ниже, она покажет, какие изменения OctoDNS должен внести при синхронизации.
octodns-sync --config-file=[директория вашего конфигурационного файла]
Например, если директория конфигурационного файла — /home/ubuntu/octodns/config/config.yaml, то команда будет такой:
octodns-sync --config-file=/home/ubuntu/octodns/config/config.yaml
Если конфигурационный файл заполнен без ошибок, вы получите вывод с подобной сводкой в конце.
Здесь указано, какие изменения OctoDNS намеревается внести в записи нашего DNS. Если всё верно, дайте команду внести эти изменения:
octodns-sync --config-file=[директория вашего конфигурационного файла] --doit
Вы увидите подобный вывод.
Он означает, что изменения внесены. Вы увидите обновлённый список записей в личном кабинете во вкладке DNS.
Обновить записи на нашем вторичном DNS
Инструкция ниже — для обновления записей вручную. Если вы хотите настроить автообновление записей, настройте автоматическое выполнение команд из этой инструкции через демон cron.
1. Перейдите в ~/octodns.
cd ~/octodns
2. Включите виртуальную среду python.
3. Нужные зоны вы уже занесли в конфигурационный файл в рамках инструкции «Синхронизировать записи вашего DNS с нашим DNS» выше. Чтобы синхронизировать DNS-записи, введите команду:
octodns-sync --config-file=[директория вашего конфигурационного файла] --doit
Вы увидите подобный вывод:
Он означает, что изменения внесены. Вы можете увидеть обновлённый список записей в личном кабинете во вкладке DNS.