Использовать наш DNS как вторичный

Последние изменения: 21.05.2024

Что такое
Синхронизировать записи
Обновить записи

Что такое вторичный DNS

Вторичный DNS — это резервный DNS, где хранится копия информации о зонах и записях. Исходные данные он получает с основного сервера.

Чтобы использовать наш DNS в качестве вторичного, отправьте ему информацию обо всех DNS-записях из баз вашего DNS-провайдера по инструкции. Для синхронизации мы используем провайдер EdgeCenter DNS.

Сначала убедитесь, что ваш провайдер есть в списке провайдеров, которые поддерживают OctoDNS. Если нет — передать записи автоматически нельзя и дальнейшая инструкция не поможет.

Синхронизировать записи вашего DNS с нашим DNS

Инструкция поможет установить OctoDNS — инструмент для управления DNS-зонами разных провайдеров. С его помощью вы сделаете записи на нашем DNS-сервере идентичным записям на вашем. Ниже в схеме вы можете посмотреть, как это работает.

mceclip2.png

1. Создайте в личном кабинете DNS-зону, для которой хотите изменить DNS-записи. Если зона уже создана, пропустите этот шаг. 

40544abefd06458f4f8d3be6a3074367.png

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, а также зависимость между ними. Конечный файл будет выглядеть подобным образом:

df430554a285de5f7fae65b5c9bf46b7.png

Разберём, как указать провайдера, зоны и зависимость.

Скопируйте код ниже и вставьте в конфигурационный файл (в формате .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.

816697e8ef8e77592528b02883e9c8af.png

Найдите раздел Configuration → EdgeCenterProvider. Там описаны имя провайдера, название класса провайдера и данные для аутентификации.

0028d399aaae59a98e3fe587315a69a0.jpg

Имя провайдера (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
053daa9dee7c85523eece329ade858cd.png

Внимание. Если ваша 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

Если конфигурационный файл заполнен без ошибок, вы получите вывод с подобной сводкой в конце.

489ac23a336d089859b5734e87fd4ac1.png

Здесь указано, какие изменения OctoDNS намеревается внести в записи нашего DNS. Если всё верно, дайте команду внести эти изменения:

octodns-sync --config-file=[директория вашего конфигурационного файла] --doit

Вы увидите подобный вывод.

46bff0875de1a5693fe22d450122f704.png

Он означает, что изменения внесены. Вы увидите обновлённый список записей в личном кабинете во вкладке DNS.

Обновить записи на нашем вторичном DNS

Инструкция ниже — для обновления записей вручную. Если вы хотите настроить автообновление записей, настройте автоматическое выполнение команд из этой инструкции через демон cron.

1. Перейдите в ~/octodns.

cd ~/octodns

2. Включите виртуальную среду python.

3. Нужные зоны вы уже занесли в конфигурационный файл в рамках инструкции «Синхронизировать записи вашего DNS с нашим DNS» выше. Чтобы синхронизировать DNS-записи, введите команду:

octodns-sync --config-file=[директория вашего конфигурационного файла] --doit

Вы увидите подобный вывод:

2e725cd1edb304176698326cf39b7ecd.png

Он означает, что изменения внесены. Вы можете увидеть обновлённый список записей в личном кабинете во вкладке DNS.

Помогла ли вам статья?