_Автор выбрал Electronic Frontier Foundation, чтобы получить пожертвование как часть Write для DOnations программа.
Вступление
OctoDNS - это инструмент infrastructure-as-code, который позволяет развертывать и управлять зонами DNS с использованием стандартных принципы разработки программного обеспечения, включая контроль версий, тестирование и автоматическое развертывание. OctoDNS был создан GitHub и написан на Python.
Использование OctoDNS устраняет многие подводные камни ручного управления DNS, поскольку файлы зон хранятся в структурированном формате (YAML). Это позволяет вам одновременно развертывать зоны на нескольких провайдерах DNS, выявлять синтаксические ошибки и автоматически выдвигать конфигурацию DNS, снижая риск человеческих ошибок. Другое распространенное использование OctoDNS - это синхронизация конфигурации DNS между различными провайдерами, такими как система тестирования и производства, или между действующей средой и средами восстановления после отказа.
OctoDNS похож на DNSControl, который является эквивалентным инструментом, созданным в Stack Exchange и написанным на Go. В отличие от OctoDNS, DNSControl использует язык конфигурации на основе JavaScript для определения зон DNS, что позволяет использовать расширенные программные функции, такие как циклы, для указания нескольких похожих записей в одной зоне. Статья How для развертывания и управления DNS с помощью DNSControl в Ubuntu 18.04 описывает базовую настройку и настройку DNSControl.
В этом руководстве вы установите и сконфигурируете OctoDNS, создадите базовую конфигурацию DNS и начнете развертывать записи DNS у действующего поставщика. В рамках этого руководства мы будем использовать DigitalOcean в качестве примера DNS-провайдера. Если вы хотите использовать провайдера different, настройки очень похожи. По завершении вы сможете управлять и тестировать свою конфигурацию DNS в безопасной автономной среде, а затем автоматически развертывать ее в рабочей среде.
Предпосылки
Прежде чем начать это руководство, вам понадобится следующее:
-
Один сервер Ubuntu 18.04, настроенный по адресу Initial Server Setup с Ubuntu 18.04, включая sudo Пользователь root и включенный межсетевой экран для блокировки несущественных портов. «» и «» относятся к IP-адресам сервера, на котором вы размещаете свой сайт или домен.
-
Полностью зарегистрированное доменное имя с DNS-сервером, размещенное у поставщика supported. В этом руководстве будет использоваться
++повсеместно, а DigitalOcean в качестве поставщика услуг. -
Ключ API DigitalOcean (токен личного доступа) с разрешениями на чтение и запись. Чтобы создать его, посетите страницу How для создания токена личного доступа.
Как только они будут готовы, войдите на свой сервер как пользователь без полномочий root, чтобы начать.
Шаг 1 - Установка OctoDNS
OctoDNS распространяется как пип-пакет Python и работает в виртуальной среде Python (https://virtualenv.pypa.io/en/latest/ [+ virtualenv +]), поэтому вы начнете этот шаг с установки пакетов. требуется для этого. + Virtualenv + - это изолированная среда Python, которая может иметь свои собственные библиотеки и конфигурацию, отдельную от основной общесистемной установки Python. Python и + virtualenv + доступны в стандартных программных репозиториях Ubuntu, что позволяет устанавливать их с помощью обычных инструментов управления пакетами.
Начните с обновления локального индекса пакета, чтобы отразить любые новые восходящие изменения:
sudo apt update
Затем установите пакеты + python и` + virtualenv`:
sudo apt install python virtualenv
После подтверждения установки + apt + загрузит и установит Python, + virtualenv + и все их необходимые зависимости.
Затем вы создадите необходимые каталоги для OctoDNS, где будут храниться ваши настройки DNS и программы. Начните с создания каталогов + ~ / octodns + и + ~ / octodns / config +:
mkdir ~/octodns ~/octodns/config
Теперь перейдите в + ~ / octodns +:
cd ~/octodns
Затем вам нужно создать виртуальную среду Python - изолированную среду Python с собственными библиотеками и конфигурацией для запуска OctoDNS в:
virtualenv
Активируйте свою среду с помощью следующей команды:
source /bin/activate
Это выведет что-то похожее на следующее:
OutputRunning virtualenv with interpreter /usr/bin/python2
New python executable in /home/user/octodns/env/bin/python2
Also creating executable in /home/user/octodns/env/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Ваша подсказка оболочки Bash теперь также будет иметь префикс с именем виртуальной среды. Это показывает, что вы в настоящее время работаете в + virtualenv +:
(env) user@digitalocean:~/octodns$
Если вы хотите выйти из + virtualenv +, вы можете использовать команду + deactivate + в любое время. Тем не менее, вы должны остаться в вашем + virtualenv +, чтобы продолжить изучение этого урока.
Теперь, когда вы установили и настроили Python и + virtualenv +, вы можете установить OctoDNS. OctoDNS распространяется в виде pip-пакета Python, который является стандартным инструментом управления пакетами для пакетов и библиотек Python.
Вы можете установить pip-пакет OctoDNS с помощью следующей команды в вашем + virtualenv +:
pip install octodns
После этого вы можете проверить установленную версию, чтобы убедиться, что все работает:
octodns-sync --version
Ваш вывод будет выглядеть примерно так:
OutputoctoDNS
Если вы видите ошибку + octodns-sync: command not found, перепроверьте, что вы все еще находитесь в вашем` + virtualenv`.
Теперь, когда вы установили OctoDNS, вы можете создать необходимые файлы конфигурации для подключения OctoDNS к вашему провайдеру DNS, чтобы он мог вносить изменения в ваши записи DNS.
Шаг 2 - Настройка OctoDNS
На этом этапе вы создадите необходимые файлы конфигурации для OctoDNS и подключите его к своему провайдеру DNS, чтобы он мог начать вносить изменения в ваши записи DNS.
Во-первых, вам нужно настроить файл + config.yaml +, который определяет зоны DNS для управления OctoDNS, и позволяет ему проходить аутентификацию у вашего провайдера DNS и вносить изменения.
Формат + config.yaml + немного отличается в зависимости от используемого вами провайдера DNS. Обратитесь к Supported списка провайдеров в официальной документации OctoDNS, чтобы найти конфигурацию для вашего собственного провайдера. При просмотре этой гиперссылки сведения о конфигурации представлены в виде комментария к коду в фактическом коде Python для вашего провайдера, который связан в столбце «Провайдер» таблицы. Как только вы нашли код Python для своего провайдера, такой как + cloudflare.py + или + route53.py +, соответствующий комментарий кода можно найти непосредственно под + class + + Provider +. Например:
Выдержка из octodns / provider / route53.py
class Route53Provider(BaseProvider):
'''
AWS Route53 Provider
route53:
class: octodns.provider.route53.Route53Provider
# The AWS access key id
access_key_id:
# The AWS secret access key
secret_access_key:
# The AWS session token (optional)
# Only needed if using temporary security credentials
session_token:
Перейдите в каталог + ~ / octodns / config +:
cd ~/octodns/config
Затем создайте и откройте + config.yaml + для редактирования:
nano config.yaml
Добавьте в файл пример конфигурации + config.yaml + для вашего провайдера DNS. Если вы используете DigitalOcean в качестве поставщика DNS, вы можете использовать следующее:
~ / Octodns / конфигурации / config.yaml
---
providers:
config:
class: octodns.provider.yaml.YamlProvider
directory: ./config
default_ttl: 300
enforce_order: True
digitalocean:
class: octodns.provider.digitalocean.DigitalOceanProvider
token:
zones:
.:
sources:
- config
targets:
- digitalocean
Этот файл сообщает OctoDNS, к каким DNS-провайдерам вы хотите подключиться, и какие DNS-зоны должны управлять этими провайдерами.
Вам нужно будет предоставить некоторую форму аутентификации вашему провайдеру DNS. Обычно это ключ API или токен OAuth.
Если вы не хотите хранить свой токен доступа в виде простого текста в файле конфигурации, вы можете вместо этого передать его как переменную среды при запуске программы. Чтобы сделать это, вы должны использовать следующую строку + token: + в + config.yaml +:
~ / Octodns / конфигурации / config.yaml
token: env/DIGITALOCEAN\_OAUTH\_TOKEN
Затем, перед запуском OctoDNS, установите соответствующую переменную среды для вашего токена доступа, и OctoDNS прочитает его оттуда при запуске:
export DIGITALOCEAN\_OAUTH\_TOKEN=
Если вы используете DigitalOcean в качестве провайдера DNS, вы можете использовать требуемый токен OAuth https://cloud.digitalocean.com/settings/applications в настройках учетной записи DigitalOcean], который вы сгенерировали как часть предварительных условий.
Если у вас несколько разных провайдеров DNS - например, для нескольких доменных имен или делегированных зон DNS - вы можете определить их все в одном файле + config.yaml +.
Вы настроили исходный файл конфигурации OctoDNS, чтобы программа могла проходить аутентификацию у вашего поставщика DNS и вносить изменения. Затем вы создадите конфигурацию для ваших зон DNS.
Шаг 3 - Создание файла конфигурации DNS
На этом шаге вы создадите исходный файл конфигурации DNS, который будет содержать записи DNS для вашего доменного имени или делегированной зоны DNS.
Каждая DNS-зона, которой вы хотите управлять с помощью OctoDNS, имеет свой собственный файл, например + .yaml +. В этом файле записи DNS для зоны определяются с использованием YAML.
Для начала перейдите в каталог + ~ / octodns / config +:
cd ~/octodns/config
Затем создайте и откройте + .yaml + для редактирования:
nano .yaml
Добавьте следующий пример конфигурации в файл:
~ / Octodns / конфигурации / ваш-domain.yaml
---
'':
- type: A
value:
www:
- type: A
value:
Этот пример файла определяет зону DNS для ` с двумя `+ A +` записями, указывающими на IPv4-адрес, на котором вы размещаете свой домен или веб-сайт. Одна запись `+ A +` предназначена для корневого домена (например, `), а другой - для субдомена + www + (например, + WWW. +).
По завершении сохраните и закройте файл.
Вы настроили базовый файл конфигурации зоны DNS для OctoDNS с двумя базовыми записями `+ A + ', указывающими на IPv4-адрес вашего домена или веб-сайта. Далее вы расширите файл некоторыми полезными записями DNS.
Шаг 4 - Заполнение вашего файла конфигурации DNS
Затем вы можете заполнить файл конфигурации DNS практическим набором записей DNS для вашего веб-сайта или службы, используя язык структурированной конфигурации YAML.
В отличие от традиционных файлов BIND zone, где записи DNS записываются в необработанном построчном формате, записи DNS в OctoDNS определяются как ключи YAML и подключи с количество связанных значений, как кратко показано в шаге 3.
Ключом верхнего уровня обычно является + 'name' +, который по сути является идентификатором записи. + www,` + поддомен 1` и + mail + - все это примеры DNS + 'name' +. В OctoDNS есть два специальных имени, которые + '' +, для корневой записи (обычно называемые + @ +), и + '*' +, для записей с подстановочными знаками. Обязательным значением каждого ключа (записи DNS) является + type +. Это определяет, какой тип записи DNS вы определяете в этом ключе верхнего уровня YAML. + Type + существует для каждого из стандартных типов записей DNS, включая + A +, + AAAA,` + MX + , + TXT`, + N +, + CNAME и так далее. Полный список доступных типов записей доступен в разделе Records документации OctoDNS.
Значения для ваших записей DNS определяются либо как значения для ключей верхнего уровня (если у вас есть только одно значение), либо как список (если у вас есть несколько значений, например, несколько IP-адресов или MX-адресов).
Например, чтобы определить одно значение, вы можете использовать следующую конфигурацию:
~ / Octodns / конфигурации / ваш-domain.yaml
'www':
type: A
value: 203.0.113.1
Кроме того, чтобы определить несколько значений для одной записи:
~ / Octodns / конфигурации / ваш-domain.yaml
'www':
type: A
values:
- 203.0.113.1
- 203.0.113.2
Синтаксис для настройки DNS-записей незначительно отличается для каждого типа записей. Ниже приведены некоторые примеры наиболее распространенных типов записей:
+ A + записи:
Цель: указать на адрес IPv4.
Синтаксис:
'':
type: A
value:
Пример:
'':
type: A
value:
+ AAAA + records:
Цель: указать на адрес IPv6.
Синтаксис:
'':
type: AAAA
value:
Пример:
'':
type: AAAA
value:
+ CNAME + records:
Цель: сделать свой домен / поддомен псевдонимом другого.
Синтаксис:
'':
type: CNAME
value:
Пример:
'':
type: CNAME
value:
+ MX + записи:
Цель: направить электронную почту на определенные серверы / адреса.
Синтаксис:
'':
type: MX
value:
exchange:
preference:
Обратите внимание, что завершающий +. + * Должен * быть включен, если в значении MX есть какие-либо точки.
Пример:
'':
type: MX
value:
exchange: .
preference:
+ TXT + records:
Цель: добавить произвольный простой текст, часто используемый для конфигураций без собственного выделенного типа записи.
Синтаксис:
'':
type: TXT
value:
Пример:
'':
type: TXT
value:
Чтобы начать добавлять записи DNS для вашего домена или делегированной зоны DNS, отредактируйте файл конфигурации DNS:
cd ~/octodns/config
nano .yaml
Затем вы можете начать заполнение своей DNS-зоны, используя синтаксис, описанный в предыдущем списке, а также раздел официальной страницы Records. Документация OctoDNS.
Для справки, блок кода здесь содержит полный пример конфигурации для начальной настройки DNS:
~ / Octodns / конфигурации / ваш-domain.yaml
---
'':
- type: A
value:
- type: AAAA
value:
- type: MX
value:
exchange: mail..
preference: 10
- type: TXT
value: v=spf1 -all
_dmarc:
type: TXT
value: v=DMARC1\; p=reject\; rua=mailto:abuse@\; aspf=s\; adkim=s\;
mail:
- type: A
value:
- type: AAAA
value:
www:
- type: A
value:
- type: AAAA
value:
После завершения начальной настройки DNS сохраните и закройте файл.
На этом этапе вы настраиваете исходный файл конфигурации DNS, содержащий ваши записи DNS. Далее вы протестируете конфигурацию и развернете ее.
Шаг 5 - Тестирование и развертывание конфигурации DNS
На этом этапе вы запустите локальную проверку синтаксиса конфигурации DNS, а затем развернете изменения на работающем DNS-сервере / провайдере.
Сначала перейдите в каталог + octodns +:
cd ~/octodns
Дважды проверьте, что вы все еще работаете в Python + virtualenv +, посмотрев его имя перед приглашением Bash:
(env) user@digitalocean:~/octodns$
Затем используйте команду + octodns-validate +, чтобы проверить синтаксис ваших файлов конфигурации. Вам необходимо указать путь к файлу конфигурации:
octodns-validate --config=./config/config.yaml
Если синтаксис YAML вашего файла конфигурации DNS правильный, OctoDNS вернется без вывода.
Если вы увидите сообщение об ошибке или предупреждение, OctoDNS предоставит подробную информацию о том, где и где находится ошибка в вашем файле YAML.
Затем вы можете выполнить пробный запуск конфигурации DNS, которая выведет, какие изменения будут внесены, фактически не внося их:
octodns-sync --config=./config/config.yaml
Это должно привести к выводу, подобному следующему:
Output********************************************************************************
* .
********************************************************************************
* digitalocean (DigitalOceanProvider)
* Create <ARecord A 300, mail.., ['']> (config)
* Create <AaaaRecord AAAA 300, mail.., ['']> (config)
* Create <TxtRecord TXT 300, ., ['v=spf1 -all']> (config)
* Create <AaaaRecord AAAA 300, ., ['']> (config)
* Create <ARecord A 300, ., ['']> (config)
* Create <ARecord A 300, www.., ['']> (config)
* Create <MxRecord MX 300, ., [''10 mail..'']> (config)
* Create <TxtRecord TXT 300, _dmarc.., ['v=DMARC1\; p=reject\; rua=mailto:abuse@\; aspf=s\; adkim=s\;']> (config)
* Create <AaaaRecord AAAA 300, www.., ['']> (config)
* Summary: Creates=9, Updates=0, Deletes=0, Existing Records=2
********************************************************************************
Наконец, вы можете отправить изменения в ваш живой DNS-провайдер:
octodns-sync --config=./config/config.yaml --doit
На этом шаге вы увидите вывод, подобный пробному запуску ранее, но с добавлением чего-то похожего на следующее:
Output2019-07-07T23:17:27 INFO DigitalOceanProvider[digitalocean] apply: making changes
2019-07-07T23:17:30 INFO Manager sync: 9 total changes
Теперь, если вы проверите настройки DNS для своего домена в панели управления DigitalOcean, вы увидите изменения.
image: https: //assets.digitalocean.com/articles/dnscontrols1804/step5.png [Снимок экрана панели управления DigitalOcean, показывающий некоторые изменения DNS, внесенные OctoDNS.]
Вы также можете проверить создание записи, запустив DNS-запрос для вашего домена / делегированной зоны. Вы увидите, что записи были соответственно обновлены:
dig +short
Вы увидите выходные данные, показывающие IP-адрес и соответствующую запись DNS из вашей зоны, которая была развернута с помощью OctoDNS. Для распространения записей DNS может потребоваться некоторое время, поэтому может потребоваться подождать и снова запустить эту команду.
На этом последнем шаге вы запустили локальную проверку синтаксиса файла конфигурации DNS, затем развернули его на действующем поставщике DNS и проверили, что изменения были сделаны успешно.
Заключение
В этой статье вы настроили OctoDNS и развернули конфигурацию DNS для действующего провайдера. Теперь вы можете управлять изменениями конфигурации DNS и тестировать их в безопасной автономной среде, прежде чем развертывать их в рабочей среде.
Если вы хотите продолжить изучение этого вопроса, OctoDNS предназначен для интеграции в ваш конвейер CI / CD, что позволяет вам проводить углубленные тесты и лучше контролировать развертывание в рабочей среде. Вы также можете изучить интеграцию OctoDNS в процессы построения / развертывания инфраструктуры, что позволит вам развертывать серверы и добавлять их в DNS полностью автоматически.
Если вы хотите продолжить работу с OctoDNS, в следующих статьях DigitalOcean представлены некоторые интересные следующие шаги, которые помогут интегрировать OctoDNS в рабочие процессы управления изменениями и развертывания инфраструктуры: