VPS на Ubuntu. Часть 3 — настраиваем DNS.

Изображение для статьи VPS на Ubuntu. Чаcть 3 - настройка DNS

В третьей части цикла статей про собственный VPS на Ubuntu мы займемся установкой и настройкой DNS — распределенной системы для получения информации о доменах.

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

Для чего же нам все это нужно? Ну во-первых, для того чтобы наш сайт могли найти в сети интернет по его имени — example.com. Во-вторых, мы же хотим принимать и отправлять почту на нашем VPS. Кроме того, мы можем туда внести записи для подтверждения владения доменом от Google и Yandex. Также свой DNS пригодиться для использования сертификатов LetsEncrypt для поддоменов. В общем, вещь необходимая.

Установка Bind

Итак, давайте установим наш сервис DNS. Я лично предпочитаю bind:

sudo apg-get install bind9 -y

Конфигурационные файлы

В Ubuntu cвои конфигурационные файлы bind хранит в папке /etc/bind. Сами файлы зон удобно хранить в /var/lib/bind, так-как этой папке назначены права на чтение и запись для группы bind.

Файл named.conf вам редактировать не нужно. Он лишь включает в себя другие конфигурационные файлы. Мы будем редактировать named.conf.options — общие настройки и named.conf.local — сюда мы внесем настройки зон.

Настройка параметров

Замечу, что частая ошибка при редактирвании конфигурационных файлов bind — это забытая «;». Будьте внимательны.

Итак, вначале приведем файл named.conf.options

sudo vim /etc/bind/named.conf.options

к вот такому виду:

options {
	directory "/var/cache/bind";
    // forwarders {
    //		8.8.8.8;
    // }
    dnssec-validation auto;
    auth-nxdomain no;
    listen-on-v6 { any; };
    allow-query { any; };
    allow-recursion { none; }
};

В девятой строке мы разрешаем запросы к нашему сервису с любых узлов сети, а в десятой запрещаем рекурсивные запросы. Если ваш хостер предоставил вам адреса своих DNS-серверов, то вы можете их указать в разделе forwarders. Для этого раскомментируйте строки c третью по пятую и внури блока внесите их адреса по одному на строку. Не забывайте «;»!

forwarders {
    1.1.1.1;
    9.9.9.9;
};

Настройка зоны

Далее нам нужно в файл named.conf.local внести описание «прямой» зоны нашего домена за которую отвечает сервер. Если говорить упрощенно, то «прямая» зона нужна для поиска ip-адреса ресурса по его имени. Как я описал в первой части, наш домен — example.com

Итак, открываем файл

sudo vim /etc/bind/named.conf.local

и добавляем в него следующие строки

zone example.com {
	type master;
    file "/var/lib/bind/example.com";
    allow-update { none; };
    allow-transfer { localhost; }
};

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

Так как у нас всего один IPv4-адрес, который выделил хостер для вашего VPS — 93.184.216.34, то «обратную» зону, которая нужна для поиска имени узла по его ip-адресу, мы настраивать не будем. Этим мы займёмся при устанавке собственного VPN-сервера.

Для проверки правильности конфигурационных файлов есть утилита named-checkconf. В случае ошибки, она укажет в какой строке её искать.

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

Записи DNS

Существует большое количество разных записей, которые можно помещать в DNS. Мы же рассмотрим лишь наиболее важные из них:

  • SOA (Start Of Authority) — начальная запись зоны, которая указывает, на каком сервере хранится эталонная информация о доменном имени;
  • NS (authoritative Name Server) указывает на DNS-серверы, которые отвечают за хранение ресурсных записей домена;
  • MX (Mail eXchanger) — описывает настройки доставки почты для домена;
  • A (Address) — задает соответствие между IP-адресом и именем ресурса (прямое преобразование);
  • PTR (PoinTeR) — задает соответствие между именем и IP-адресом (обратное преобразование);
  • CNAME (Canonical NAME) — задает альтернативные имена (псевдонимы) ресурса;
  • TXT (TeXT) — содержит любую текстовую информацию о домене;
  • SPF (Sender Policy Framework) — содержит информацию о списке серверов, которые имеют право отправлять письма от имени заданного домена.

Формат записей DNS

Структура общая для всех типов записей и состоит из пяти полей:

[имя] [ttl] [класс] <тип> <данные>

где:

  • имя – это имя ресурса, с которым ассоциируются данные;
  • ttl – время жизни (достоверности);
  • класс – класс записи;
  • тип – тип записи;
  • данные – ассоциируемые с ресурсом данные.

Если имя заканчивается на точку, то оно считается полностью определенным, иначе в конец имени подставляется имя зоны, которое может быть задано двумя способами:

  • Заданием имени зоны в директиве zone конфигурационного файла named.conf.local
  • Заданием имени зоны в директиве $ORIGIN

Специальный символ «@» обозначает текущее имя зоны. Директива $ORIGIN отменяет директиву zone и действует до появления следующей директивы $ORIGIN или до конца файла. До момента появления первой директивы $ORIGIN она равна значению директивы zone конфигурационного файла BIND. Если имя задано, оно должно начинаться с первой позиции строки.

TTL обычно опускают и задают глобально директивой $TTL, как правило, в самом начале файла зоны. В поле данных этой директивы задается время жизни (в секундах), в течение которого элемент считается достоверным.

Класс записи, в нашем случае, нужен только один — «IN», запись ресурсов Интернет.

Тип записи — один из типов, перечисленных выше.

Поля имя, ttl и класс не являются обязательными и могут быть опущены. При этом в качестве их значений принимается последнее определенное значение (то есть @ будет корректным определением). Если значение не было определено нигде, то для поля класс принимается значение по умолчанию «IN», для других полей – приводит к сообщению об ошибке.

Кроме записей, в файле зоны могут быть команды. На данном этапе нас интересуют лишь одна – $TTL.

Создаем файл зоны

Для создания файла «прямой» зоны запустите текстовый редактор:

sudo vim /var/lib/bind/example.com

И внесите в него следующий текст, который я объясню ниже.

$TTL 1w ; по умолчанию срок жизни 1 неделя
@    IN    SOA    ns.example.com.  hostmaster.example.com. (
                  2020032401 ; Серийный номер
                  3h         ; Обновлять каждые 3 часа
                  1h         ; При ошибке повторять каждый час
                  25d        ; Срок действия 25 дней
                  1d         ; Минимум для негативных ответов 1 день
                  )
           IN    NS     ns
                 MX     10 mx
; узлы сети
@                A       93.184.216.34
@                AAAA    2606:2800:220:1:248:1893:25c8:1946
ns               A       93.184.216.34
mx               A       93.184.216.34
; псевдонимы
www              CNAME   example.com.
mail             CNAME   @
smtp             CNAME   @
imap             CNAME   @
pop3             CNAME   @
ftp              CNAME   @

Сохраните файл, измените группу владельца на bind и перезапустите сервис:

sudo chgrp bind /var/lib/bind/example.com
sudo systemctl restart bind9

Разбираем содержимое файла

В первой строке мы задаем время жизни (ttl) ресурсных записей по умолчанию и во всех последующих строках его опускаем.

Со второй по восьмую строку идет запись SOA — она самая длинная. Конечно ее можно было записать в одну строку, но так нагляднее. Эта запись определяет начало зоны. Любая зона должна начинаться с записи SOA.

Символ «@» в поле имени означает, что необходимо взять текущее имя зоны, заданное ранее директивой $ORIGIN или zone. Так как в нашем файле директивы $ORIGIN нет, то берется имя из директивы zone конфигурационного файла named.conf.local. В нашем случае это example.com.

В 9-ой строке идет описание адреса сервера имен. Так как после «ns» нет точки, то автоматически дописывается текущее имя зоны. То есть запись на самом деле будет такова: example.com. IN NS ns.example.com.

Начиная с десятой строки во всех записях я опустил их класс, так как по умолчанию он «IN» — запись ресурса сети интернет.

В 10-й строке идет описание адреса сервера, который отвечает за обработку почты для нашего домена. Число 10 означает приоритет узла в случае, если таких записей несколько. Ну и вновь, из-за отсутствия точки в конце, запись будет такой: example.com. IN MX 10 mx.example.com.

Строки с 12-й по 15-ю описывают IP-адреса узлов нашей сети. Для IPv4A запись, для IPv6AAAA. Они одинаковы, так как в нашем случае все сервисы у нас на одном VPS. Если бы обработкой почты занимался отдельный сервер, то мы бы внесли другой ip-адрес. IPv6 записи для «ns» и «mx» добавьте самостоятельно.

В двенадцатой строке в поле имени стоит символ ‘@’, который заменяется на текущее имя зоны. В результате запись будет выглядеть как: example.com. IN A 93.184.216.34

Начиная с 17-й строки идут записи CNAME. Они являются псевдонимами для существующих ресурсов и удобны в целях администрирования. То есть mail.example.com — это псевдоним example.com. Записи в поле данных для 16-й и 17-й строк — эквивалентны.

Проверяем работоспособность

После внесения изменений в файл зоны, во-первых, не забывайте менять серийный номер. Эта привычка поможет вам в дальнейшем. А во-вторых, пользуйтесь утилитой named-checkzone для проверки корректности изменений:

named-checkzone example.com /var/lib/bind/example.com

Первый параметр — имя зоны, а второй — файл зоны.

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

dig +nocmd AXFR @localhost example.com

Это команда для пересылки зоны, которую, как вы помните, мы разрешили в декларации зоны для localhost.

Также вы можете проверить как функционирует DNS-сервер с помощью нескольких команд. Если вы все сделали правильно, то

host -t NS example.com

должна вывести в консоль:

example.com name server ns.example.com.

а команда

host -t MX example.com

показать следующее:

example.com mail is handled by 10 mx.example.com.

Подводя итог можно сказать, что несмотря на объём статьи, вся настройка заключается в правке десятка строк в двух конфигурационных файлах и создания небольшого файла зоны. В результате чего наш VPS стал доступен в сети по имени домена. Мне кажется, что это не так уж и сложно.

В любом случае жду ваших вопросов и замечаний к статье в комментариях. А в следующей части мы займемся установкой и настройкой прокси-сервера Squid.

2 комментария к “VPS на Ubuntu. Часть 3 — настраиваем DNS.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *