Как развернуть и управлять вашим DNS с помощью DNSControl в Ubuntu 18.04

_ Автор выбрал Electronic Frontier Foundation Inc, чтобы получить пожертвование в рамках Write для ДОНОЦИЙ program._

Вступление

DNSControl - это инструмент infrastructure-as-code, который позволяет развертывать и управлять зонами DNS с использованием стандартных принципы разработки программного обеспечения, включая контроль версий, тестирование и автоматическое развертывание. DNSControl был создан Stack Exchange и написан на Go.

Использование DNSControl устраняет многие подводные камни ручного управления DNS, поскольку файлы зон хранятся в программируемом формате. Это позволяет вам одновременно развертывать зоны на нескольких провайдерах DNS, выявлять синтаксические ошибки и автоматически выдвигать конфигурацию DNS, снижая риск человеческих ошибок. Другое распространенное использование DNSControl - это быстрая миграция вашего DNS другому провайдеру; например, в случае атаки DDoS или сбоя системы.

В этом руководстве вы установите и сконфигурируете DNSControl, создадите базовую конфигурацию 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 - Установка DNSControl

DNSControl написан на Go, поэтому вы начнете этот шаг с установки Go на свой сервер и установки + GOPATH +.

Go доступен в стандартных репозиториях Ubuntu, что позволяет устанавливать его с помощью обычных инструментов управления пакетами.

Начните с обновления локального индекса пакета, чтобы отразить любые новые восходящие изменения:

sudo apt update

Затем установите пакет + golang-go +:

sudo apt install golang-go

После подтверждения установки + apt + загрузит и установит Go и все его необходимые зависимости.

Далее вы настроите необходимые переменные среды пути для Go. Если вы хотите узнать больше об этом, вы можете прочитать это руководство на Understanding GOPATH. Начните с редактирования файла + ~ / .profile:

nano ~/.profile

Добавьте следующие строки в самый конец вашего файла:

~ / .Profile

...
export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"

Добавив эти строки в конец файла, сохраните и закройте его. Затем перезагрузите свой профиль, либо выйдя из системы и вернувшись обратно, либо снова загрузив файл:

source ~/.profile

Теперь, когда вы установили и настроили Go, вы можете установить DNSControl.

Команда + go get + может быть использована для получения копии кода, автоматической компиляции и установки ее в каталог Go:

go get github.com/StackExchange/dnscontrol

После этого вы можете проверить установленную версию, чтобы убедиться, что все работает:

dnscontrol version

Ваш вывод будет выглядеть примерно так:

Outputdnscontrol

Если вы видите ошибку + dnscontrol: command not found, дважды проверьте настройку пути Go.

Теперь, когда вы установили DNSControl, вы можете создать каталог конфигурации и подключить DNSControl к вашему провайдеру DNS, чтобы он мог вносить изменения в ваши записи DNS.

Шаг 2 - Настройка DNSControl

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

Сначала создайте новый каталог, в котором вы можете сохранить конфигурацию DNSControl, а затем перейдите в него:

mkdir ~/dnscontrol
cd ~/dnscontrol

Если вы планируете использовать DNSControl для записи файлов зон BIND, вам также следует создать каталог + zone +:

mkdir ~/dnscontrol/zones

BIND файлы зон - это простой, стандартизированный метод хранения зон / записей DNS в текстовом формате. Первоначально они использовались для программного обеспечения DNS-сервера BIND, но теперь широко применяются в качестве стандартного метода хранения зон DNS. Файлы зон BIND, созданные DNSControl, полезны, если вы хотите импортировать их на пользовательский или самодостаточный DNS-сервер или для целей аудита.

Однако, если вы просто хотите использовать DNSControl для передачи изменений DNS управляемому провайдеру, каталог + zone + не понадобится.

Затем вам нужно настроить файл + creds.json, который позволит DNSControl проходить аутентификацию у вашего DNS-провайдера и вносить изменения. Формат + creds.json + немного отличается в зависимости от используемого вами провайдера DNS. Пожалуйста, посмотрите Service Список провайдеров в официальной документации DNSControl, чтобы найти конфигурацию для вашего собственного провайдера.

Создайте файл + creds.json + в каталоге + ~ / dnscontrol +:

cd ~/dnscontrol
nano creds.json

Добавьте в файл пример конфигурации + creds.json для вашего провайдера DNS. Если вы используете DigitalOcean в качестве поставщика DNS, вы можете использовать следующее:

~ / Dnscontrol / creds.json

{
 "digitalocean": {
   "token": ""
 }
}

Этот файл сообщает DNSControl, к каким DNS-провайдерам вы хотите подключиться.

Вам нужно будет предоставить некоторую форму аутентификации вашему провайдеру DNS. Обычно это ключ API или токен OAuth, но некоторым провайдерам требуется дополнительная информация, как указано в официальном документе DNSControl, как описано в Service Providers list в официальной документации DNSControl.

Если вы используете DigitalOcean в качестве провайдера DNS, вы можете использовать требуемый токен OAuth https://cloud.digitalocean.com/settings/applications в настройках учетной записи DigitalOcean], который вы сгенерировали как часть предварительных условий.

Если у вас несколько разных провайдеров DNS - например, для нескольких доменных имен или делегированных зон DNS - вы можете определить их все в одном файле + creds.json +.

Вы настроили исходные каталоги конфигурации DNSControl и настроили + creds.json +, чтобы DNSControl мог аутентифицироваться у вашего DNS-провайдера и вносить изменения. Затем вы создадите конфигурацию для ваших зон DNS.

Шаг 3 - Создание файла конфигурации DNS

На этом шаге вы создадите исходный файл конфигурации DNS, который будет содержать записи DNS для вашего доменного имени или делегированной зоны DNS.

+ dnsconfig.js + - основной файл конфигурации DNS для DNSControl. В этом файле зоны DNS и соответствующие им записи определяются с использованием синтаксиса JavaScript. Это известно как DSL или язык, специфичный для домена. Страница JavaScript DSL в официальной документации DNSControl содержит дополнительную информацию.

Для начала создайте файл конфигурации DNS в каталоге + ~ / dnscontrol +:

cd ~/dnscontrol
nano dnsconfig.js

Затем добавьте следующий пример конфигурации в файл:

~ / Dnscontrol / dnsconfig.js

// Providers:

var  = NewRegistrar('', '');
var  = NewDnsProvider('', '');

// Domains:

D('', , DnsProvider(),
   A('@', '')
);

Этот пример файла определяет доменное имя или зону DNS у конкретного провайдера, который в данном случае ++ 'размещается в DigitalOcean. Пример `+ A + записи также определен для корня зоны (+ @ +), указывающего на IPv4-адрес сервера, на котором вы размещаете свой домен / сайт.

Существуют три основные функции, которые составляют основной файл конфигурации DNSControl:

  • + NewRegistrar (имя, тип, метаданные) +: определяет регистратора домена для вашего доменного имени. DNSControl может использовать это для внесения необходимых изменений, таких как изменение авторитетных серверов имен. Если вы хотите использовать DNSControl только для управления своими DNS-зонами, обычно это можно оставить как + NONE +.

  • + NewDnsProvider (имя, тип, метаданные) +: определяет поставщика услуг DNS для вашего доменного имени или делегированной зоны. Это где DNSControl будет толкать изменения DNS, которые вы делаете.

  • + D (имя, регистратор, модификаторы) +: определяет доменное имя или делегированную зону DNS для управления DNSControl, а также записи DNS, присутствующие в зоне.

Вы должны настроить + NewRegistrar () +, + NewDnsProvider () + и + D () + соответственно, используя Service Список поставщиков в официальной документации DNSControl.

Если вы используете DigitalOcean в качестве вашего DNS-провайдера и вам нужно только иметь возможность вносить изменения в DNS (а не в авторитетные серверы имен), пример в предыдущем блоке кода уже верен.

По завершении сохраните и закройте файл.

На этом шаге вы настраиваете файл конфигурации DNS для DNSControl с определением соответствующих провайдеров. Затем вы заполните файл некоторыми полезными записями DNS.

Шаг 4 - Заполнение вашего файла конфигурации DNS

Затем вы можете заполнить файл конфигурации DNS полезными записями DNS для вашего веб-сайта или службы, используя синтаксис DNSControl.

В отличие от традиционных файлов зон BIND, где записи DNS записываются в необработанном построчном формате, записи DNS в DNSControl определяются как параметр функции (модификатор домена) для функции + D () +, как кратко показано на шаге 3.

Модификатор домена существует для каждого из стандартных типов записей DNS, включая + A +, + AAAA +, + MX +, + TXT +, + NS +, + CAA + и так далее. Полный список доступных типов записей доступен в разделе Domain Modifiers документации DNSControl.

Также доступны модификаторы для отдельных записей (модификаторы записей). В настоящее время они в основном используются для установки TTL (времени жизни) отдельных записей. Полный список доступных модификаторов записей доступен в разделе Record Modifiers документации DNSControl. Модификаторы записи не являются обязательными, и в большинстве случаев могут быть опущены.

Синтаксис для настройки DNS-записей незначительно отличается для каждого типа записей. Ниже приведены некоторые примеры наиболее распространенных типов записей:

  • + A + записи:

  • Цель: указать на адрес IPv4.

  • Синтаксис: + A ('', '', необязательные модификаторы записи) +

  • Пример: + A ('', '', TTL ()) +

  • + AAAA + records:

  • Цель: указать на адрес IPv6.

  • Синтаксис: + AAAA ('', '', необязательные модификаторы записи) +

  • Пример: + AAAA ('', '') + (модификатор записи пропущен, поэтому будет использоваться TTL по умолчанию)

  • + CNAME + records:

  • Цель: сделать свой домен / поддомен псевдонимом другого.

  • Синтаксис: + CNAME ('', '', необязательные модификаторы записи) +

  • Пример: + CNAME ('', '') + (обратите внимание, что конечный +. + * Должен * быть включен, если в значении есть какие-либо точки)

  • + MX + записи:

  • Цель: направить электронную почту на определенные серверы / адреса.

  • Синтаксис: + MX ('', '', '', необязательные модификаторы записи) +

  • Пример: + MX ('',, '') + (обратите внимание, что конечный +. + * Должен * быть включен, если в значении есть какие-либо точки)

  • + TXT + records:

  • Цель: добавить произвольный простой текст, часто используемый для конфигураций без собственного выделенного типа записи.

  • Синтаксис: + TXT ('', '', необязательные модификаторы записи) +

  • Пример: + TXT ('', '') +

  • + CAA + records:

  • Цель: ограничить и сообщить о центрах сертификации, которые могут выдавать сертификаты TLS для вашего домена / поддоменов.

  • Синтаксис: + CAA ('', '', '', необязательные модификаторы записи) +

  • Пример: + CAA ('', '', '') +

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

cd ~/dnscontrol
nano dnsconfig.js

Затем вы можете начать заполнять параметры для существующей функции + D () +, используя синтаксис, описанный в предыдущем списке, а также https://stackexchange.github.io/dnscontrol/js#domain-modifiers [ Модификаторы домена] раздел официальной документации DNSControl. Запятая (+, +) должна использоваться между каждой записью.

Для справки, блок кода здесь содержит полный пример конфигурации для базовой, начальной настройки DNS:

~ / Dnscontrol / dnsconfig.js

...

D('', , DnsProvider(),
   A('', ''),
   A('', ''),
   A('', ''),
   AAAA('', ''),
   AAAA('', ''),
   AAAA('', ''),
   MX('', , ''),
   TXT('', ''),
   TXT('', '')
);

После завершения начальной настройки DNS сохраните и закройте файл.

На этом этапе вы настраиваете исходный файл конфигурации DNS, содержащий ваши записи DNS. Далее вы протестируете конфигурацию и развернете ее.

Шаг 5 - Тестирование и развертывание конфигурации DNS

На этом этапе вы запустите локальную проверку синтаксиса конфигурации DNS, а затем развернете изменения на работающем DNS-сервере / провайдере.

Сначала перейдите в каталог + dnscontrol +:

cd ~/dnscontrol

Затем, используйте функцию + preview + DNSControl, чтобы проверить синтаксис вашего файла и вывести, какие изменения он внесет (фактически не внося их):

dnscontrol preview

Если синтаксис вашего файла конфигурации DNS правильный, DNSControl выведет обзор изменений, которые он внесет. Это должно выглядеть примерно так:

Output******************** Domain:
----- Getting nameservers from:
----- DNS Provider: ...8 corrections
#1: CREATE A   ttl=300
#2: CREATE A www.  ttl=300
#3: CREATE A mail.  ttl=300
#4: CREATE AAAA   ttl=300
#5: CREATE TXT _dmarc. "v=DMARC1; p=reject; rua=mailto:abuse@; aspf=s; adkim=s;" ttl=300
#6: CREATE AAAA www.  ttl=300
#7: CREATE AAAA mail.  ttl=300
#8: CREATE MX  10 mail.. ttl=300
----- Registrar: none...0 corrections
Done. 8 corrections.

Если вы видите предупреждение об ошибке в своем выводе, DNSControl предоставит подробную информацию о том, где и где находится ошибка в вашем файле.

Наконец, вы можете отправить изменения в ваш живой DNS-провайдер:

dnscontrol push

Вы увидите вывод, похожий на следующий:

Output******************** Domain:
----- Getting nameservers from:
----- DNS Provider: ...8 corrections
#1: CREATE TXT _dmarc. "v=DMARC1; p=reject; rua=mailto:abuse@; aspf=s; adkim=s;" ttl=300
SUCCESS!
#2: CREATE A   ttl=300
SUCCESS!
#3: CREATE AAAA   ttl=300
SUCCESS!
#4: CREATE AAAA www.  ttl=300
SUCCESS!
#5: CREATE AAAA mail.  ttl=300
SUCCESS!
#6: CREATE A www.  ttl=300
SUCCESS!
#7: CREATE A mail.  ttl=300
SUCCESS!
#8: CREATE MX  10 mail.. ttl=300
SUCCESS!
----- Registrar: none...0 corrections
Done. 8 corrections.

Теперь, если вы проверите настройки DNS для своего домена в панели управления DigitalOcean, вы увидите изменения.

image: https: //assets.digitalocean.com/articles/dnscontrols1804/step5a.png [Снимок экрана панели управления DigitalOcean, показывающий некоторые изменения DNS, внесенные DNSControl.]

Вы также можете проверить создание записи, запустив DNS-запрос для вашего домена / делегированной зоны. Вы увидите, что записи были соответственно обновлены:

dig +short

Вы увидите выходные данные, показывающие IP-адрес и соответствующую запись DNS из вашей зоны, которая была развернута с помощью DNSControl. Для распространения записей DNS может потребоваться некоторое время, поэтому может потребоваться подождать и снова запустить эту команду.

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

Заключение

В этой статье вы настроили DNSControl и развернули конфигурацию DNS для работающего провайдера. Теперь вы можете управлять изменениями конфигурации DNS и тестировать их в безопасной автономной среде, прежде чем развертывать их в рабочей среде.

Если вы хотите продолжить изучение этого вопроса, DNSControl предназначен для интеграции в ваш конвейер CI / CD, что позволяет вам проводить углубленные тесты и лучше контролировать развертывание в рабочей среде. Вы также можете посмотреть на интеграцию DNSControl в процессы построения / развертывания инфраструктуры, что позволит вам развертывать серверы и автоматически добавлять их в DNS.

Если вы хотите пойти дальше с DNSControl, в следующих статьях DigitalOcean представлены некоторые интересные следующие шаги, которые помогут интегрировать DNSControl в ваши рабочие процессы управления изменениями и развертывания инфраструктуры:

Related