_Автор выбрал 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 в рабочие процессы управления изменениями и развертывания инфраструктуры: