Как синхронизировать записи вашего DNS с нашим DNS
Как обновить записи в нашем DNS, если вы добавили новые на своём DNS-сервере
Вторичный DNS — это резервный DNS, где хранится копия информации о зонах и записях. Исходные данные он получает с основного сервера. Чтобы использовать наш DNS как вторичный, отправьте ему информацию о всех DNS-записях прямо из баз вашего DNS-провайдера по этой инструкции.
Перед началом работы убедитесь, что ваш провайдер есть в списке провайдеров, которые поддерживают OctoDNS. Если нет, к сожалению, передать записи автоматически невозможно.
Как синхронизировать записи вашего DNS с нашим DNS
Инструкция поможет установить на ваш компьютер OctoDNS — инструмент для управления DNS-зонами разных провайдеров. С его помощью вы сделаете записи на нашем DNS-сервере идентичным записям на вашем. Вот так:
1. Создайте в личном кабинете DNS-зону, для которой хотите изменить DNS-записи. Если зона уже создана, пропустите этот шаг.
2. На своём компьютере обновите локальный индекс пакетов, чтобы загрузить все новые версии.
sudo apt update
3. Установите пакеты python и virtualenv.
sudo apt install python virtualenv
4. Создайте необходимые каталоги для OctoDNS — инструмента для управления DNS-зонами.
mkdir ~/octodns ~/octodns/config
5. Перейдите в ~/octodns.
cd ~/octodns
6. Создайте виртуальную среду python, включите и во время работы с этой инструкцией оставайтесь в ней.
7. Установите pip-пакет OctoDNS в virtualenv.
pip install -e git+https://git@github.com/octodns/octodns.git@[версия OctoDNS]#egg=octodns
Используйте версию не ниже GIT SHA id 2ee690d36c6ec1d412d982f1bf5d98425a2a5bdc. После установки запросите версию OctoDNS, чтобы убедиться, что все работает.
octodns-sync --version
Вы получите ответ с указанием версии вашей OctoDNS, например:
octoDNS 0.9.13
Если вы видите ошибку:
octodns-sync: command not found
Скорее всего, вы находитесь не в virtualenv. Проделайте шаги № 4-6 ещё раз
8. Откройте список провайдеров, которые поддерживают OctoDNS, и найдите своего. Для примера мы возьмём провайдер компании Amazon под названием Route53.
Во втором столбце указаны дополнительные компоненты, которые нужны для работы с данным провайдером. Если столбец пуст, перейдите к следующему пункту. Если указаны компоненты, установите их. Например, для Route53 нужно установить boto3 с помощью команды:
pip install boto3
9. Перейдите в директорию config, которую недавно создали:
cd ~/octodns/config
10. Создайте внутри конфигурационный файл:
nano config.yaml
В этом конфигурационном файле нужно указать провайдеров и зоны, которыми будет управлять OctoDNS, а также зависимость между ними. Конечный файл будет выглядеть подобным образом:
Мы расскажем, где взять каждый блок данных. Для начала скопируйте в файл шаблон ниже (в формате .yaml отступы играют большое значение — с нашим шаблоном вы точно введёте данные так, чтобы программа смогла их прочитать):
providers:
[имя вашего провайдера]:
[класс вашего провайдера]
[данные для аутентификации, строчка №1]
[данные для аутентификации, строчка №2]
[данные для аутентификации, строчка №...]
gcore:
class: octodns.provider.gcore.GCoreProvider
[данные для аутентификации, строчка №1]
[данные для аутентификации, строчка №2]
[данные для аутентификации, строчка №...]
zones:
[ваша DNS-зона №1].:
sources:
- [имя вашего провайдера]
targets:
- gcore
[ваша DNS-зона №2].:
sources:
- [имя вашего провайдера]
targets:
- gcore
Заполнение первой части одинаково для всех провайдеров, кроме Selectel и AxfrSource.
Если ваш провайдер Selectel, в данных о вашем провайдере введите:
selectel:
provider.selectel.SelectelProvider
token: [ваш токен]
Если ваш провайдер AxfrSource, в данных о вашем провайдере введите:
axfr:
octodns.source.axfr.AxfrSource
master: [имя ns-сервера]
Если ваш провайдер не Selectel и не AxfrSource, откройте список провайдеров и кликните на своего. Откроется документ со строчками кода. Найдите в нём соответствующую фразу:
Провайдер |
Фраза для поиска по странице |
AzureProvider |
class AzureProvider(BaseProvider) |
Akamai |
class AkamaiProvider(BaseProvider) |
CloudflareProvider |
class CloudflareProvider(BaseProvider) |
ConstellixProvider |
class ConstellixProvider(BaseProvider) |
DigitalOceanProvider |
class DigitalOceanProvider(BaseProvider) |
DnsMadeEasyProvider |
class DnsMadeEasyProvider(BaseProvider) |
DnsimpleProvider |
class DnsimpleProvider(BaseProvider) |
DynProvider |
class DynProvider(BaseProvider) |
EasyDNSProvider |
class EasyDNSProvider(BaseProvider) |
EtcHostsProvider |
class EtcHostsProvider(BaseProvider) |
EnvVarSource |
class EnvVarSource(BaseSource) |
GandiProvider |
class GandiProvider(BaseProvider) |
GCoreProvider |
class GCoreProvider(BaseProvider) |
GoogleCloudProvider |
class GoogleCloudProvider(BaseProvider) |
HetznerProvider |
class HetznerProvider(BaseProvider) |
MythicBeastsProvider |
class MythicBeastsProvider(BaseProvider) |
Ns1Provider |
class Ns1Provider(BaseProvider) |
OVH |
class OvhProvider(BaseProvider) |
PowerDnsProvider |
class PowerDnsProvider(PowerDnsBaseProvider) |
Rackspace |
class RackspaceProvider(BaseProvider) |
Route53 |
class Route53Provider(BaseProvider) |
Transip |
class TransipProvider(BaseProvider) |
UltraDns |
class UltraProvider(BaseProvider) |
ZoneFileSource |
class ZoneFileSource(AxfrBaseSource) |
TinyDnsFileSource |
class TinyDnsFileSource(TinyDnsBaseSource) |
YamlProvider |
class YamlProvider(BaseProvider) |
Под ней будет блок с именем провайдера, классом python и инструкции по заполнению данных (инструкции написаны напротив знаков # либо около раздела). Так выглядит этот блок у провайдера Route53:
Обратите внимание: у некоторых провайдеров указаны дополнительные данные, которые здесь не нужны — как у Rackspace ниже. Их вводить не нужно. Вам нужен только блок со структурой имя провайдера — класс провайдера — данные для аутентификации.
На основе этого блока заполните данные о своём провайдере в конфигурационном файле. Для Route53 заполненный раздел выглядит так:
Далее впишите данные для аутентификации в провайдере GCoreProvider. Вы можете указать свой постоянный API-токен или логин и пароль. Если указываете токен, заполните данные для аутентификации одной строкой:
token: [ваш токен]
Если указываете логин и пароль, впишите две строки:
login: [ваш логин]
password: [ваш пароль]
Результат с постоянным токеном выглядит так:
Далее заполните данные о DNS-зонах. Для каждой зоны впишите её название и пару source-target провайдеров. В качестве source будет выступать ваш провайдер (из его баз OctoDNS будет брать DNS-записи), а в качестве target — GCoreProvider (его записи будут отредактированы, чтоб соответствовать данным вашего провайдера).
Например, чтобы синхронизировать с нашим провайдером DNS-записи для зон myzone.com и mymyzone.com, нужно вписать следующие данные:
После занесения всех зон в файл сохраните изменения и закройте его.
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, если вы добавили новые на своём DNS-сервере
Инструкция ниже — для обновления записей вручную. Если вы хотите настроить автообновление записей, настройте автоматическое выполнение команд из этой инструкции через демон cron.
1. Перейдите в ~/octodns.
cd ~/octodns
2. Включите виртуальную среду python.
3. Нужные зоны вы уже занесли в конфигурационный файл в рамках инструкции «Как синхронизировать записи вашего DNS с DNS G-Core Labs» выше. Чтобы синхронизировать DNS-записи, введите команду:
octodns-sync --config-file=[директория вашего конфигурационного файла] --doit
Вы увидите подобный вывод:
Он означает, изменения внесены. Вы можете увидеть обновлённый список записей в личном кабинете во вкладке DNS.