Раздел помощи SpaceWeb

Настройка DNS-сервера BIND

25 июл, 2024

DNS, или доменная система имён (Domain Name System) – система, которая используется в компьютерных сетях для преобразования человеко-читаемых доменных имен в IP-адреса компьютеров для идентификации друг друга в сети. 

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

В этом руководстве мы покажем, как настроить DNS-сервер BIND. 

Подготовка

Для успешного выполнения настроек требуется наличие как минимум двух серверов с операционной системой Ubuntu в одном центре обработки данных (ЦОД). Вы можете арендовать их в Spaceweb и настроить под свои нужды:


Необходимо будет подготовить два сервера, работающих на Ubuntu 22.04, которые будут использоваться в роли первичного (ns1) и вторичного (ns2) DNS-серверов.

Важно! Вам потребуются права суперпользователя на каждом из серверов. 

Как настроить DNS с помощью сервера имён BIND на Ubuntu

Установка BIND на DNS-серверах

  1. Сначала обновите пакеты:

sudo apt update && sudo apt upgrade -y

  1. Установите пакет BIND из репозитория Linux, выполнив следующую команду:

sudo apt install bind9

  1. Также вы можете установить инструменты мониторинга сети и пакет документации:

sudo apt install dnsutils bind9-doc

  1. После завершения установки BIND запустите его:

sudo service bind9 start

Основной файл конфигурации сервера находится в директории «/etc/bind/named.conf» и содержит общие настройки, которые часто распределяются по нескольким файлам. Настройка DNS связана именно с параметрами внутри этого файла.

Еще один файл конфигурации – «named.conf.options». В нем задаются общие параметры для сервера DNS. 

Вот пример данных, которые вы можете в нем указать:

Важно! Пожалуйста, замените значения IP-адресов и диапазонов на актуальные в соответствии с вашей сетевой конфигурацией.

Проверьте корректность внесенных изменений. Для этого воспользуйтесь утилитой демона named — «named-checkconf»:

sudo named-checkconf

Теперь BIND-сервер будет готов к работе.

Настройка первичного DNS-сервера

Первичный DNS-сервер – это сервер, который содержит основную (первичную) копию данных для определенной зоны домена в системе доменных имен DNS. Он является источником авторитетной информации для этой зоны.

  1. Сначала создайте директорию, в которой будем хранить файлы зон:

sudo mkdir /etc/bind/masterzones

  1. Теперь создайте файл для описания локальной зоны «test.example.ru.local»:

sudo touch /etc/bind/masterzones/test.example.ru.local.zone

  1. Откройте файл для редактирования и добавьте SOA-, NS- и A-записи. 

sudo nano /etc/bind/masterzones/test.example.ru.local.zone

Пример содержимого файла:

  1. Сохраните изменения и закройте файл.
  2. Выполните проверку созданного файла зоны с помощью «named-checkzone»:

sudo named-checkzone test.example.ru. /etc/bind/masterzones/test.example.ru.local.zone

  1. Теперь отредактируйте файл «named.conf.local», добавив информацию о новой локальной зоне:

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

  1. Добавьте следующую запись:

zone "test.example.ru." {
    type master;
    file "/etc/bind/masterzones/test.example.ru.local.zone";
};

Пример:

  1. Сохраните изменения и закройте файл.
  2. Проверьте корректность общих настроек и файлов зон:

sudo named-checkconf
sudo named-checkconf -z

  1. Если проверка завершится успешно, перезапустите BIND, чтобы применить изменения:

sudo service bind9 restart

  1. Убедитесь, что BIND работает без ошибок:

sudo service bind9 status

  1. Перейдем к настройке представлений. Для этого нужно отредактировать файл «/etc/bind/named.conf»:

sudo nano /etc/bind/named.conf

  1. Добавьте следующие строки:

include "/etc/bind/named.conf.options";

acl "local" { 192.168.0.0/168; };
view "local" {
    include "/etc/bind/named.conf.local";
    match-clients { local; };
};

  1. Сохраните изменения и закройте файл.
  2. Теперь отредактируйте файл «/etc/bind/named.conf.local» в соответствии с вашими зонами.
  3. Перезапустите BIND для применения изменений:

sudo service bind9 restart

  1. После перезапуска сервера выполните запрос с другого компьютера в вашей локальной сети для проверки наличия SOA-записи:

dig @192.168.1.5 -t SOA test.example.ru.

Убедитесь, что запрос возвращает необходимую информацию.

На этом этапе настройка основного DNS-сервера завершена. 

Настройка вторичного сервера

  1. Обновите список пакетов и установите Bind9 и все необходимые утилиты, включая dnsutils:

sudo apt update && sudo apt upgrade -y
sudo apt install bind9
sudo apt install dnsutils 
sudo service bind9 start

  1. Создайте каталог «/etc/bind/slave» для хранения файлов зон и предоставим необходимые права:

sudo mkdir /etc/bind/slave
sudo chmod g+w /etc/bind/slave

  1. Добавьте настройки зоны в файл «/etc/bind/named.conf.local»:

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

  1. Добавьте следующую запись:

zone "test.example.ru." {
    type slave;
    file "/etc/bind/slave/test.example.ru.local.zone";
    masters { 192.168.1.5; };
};

  1. Далее добавьте настройки представлений в основной конфигурационный файл «named.conf»:

sudo nano /etc/bind/named.conf

  1. Введите:

include "/etc/bind/named.conf.options";
acl "local" { 192.168.0.0/168; };
view "local" {
    match-clients { local; };
    include "/etc/bind/named.conf.local";
};

  1. Проверьте синтаксис конфигурационных файлов:

sudo named-checkconf
sudo named-checkconf -z

  1. Если ошибок нет, перезагрузите BIND:

sudo service bind9 restart

  1. Затем выполните трансфер зоны со вторичного сервера:

sudo rndc retransfer test.example.ru.

  1. На первичном сервере ограничьте передачу зоны указанием IP-адреса вторичного DNS-сервера. Для этого добавьте директиву «allow-transfer» в «named.conf»:

sudo nano /etc/bind/named.conf

  1. Скопируйте туда следующую запись, заменив «<IP_вторичного_сервера>» на реальный IP:

allow-transfer { <IP_вторичного_сервера>; };

  1. Перезагрузите сервер:

sudo service bind9 restart

Теперь ваши DNS-серверы настроены, и вторичный сервер выполняет трансфер зоны от первичного. 

MX-записи

  1. Отредактируйте файл зоны «/etc/bind/masterzones/test.example.ru.local.zone»:

sudo nano /etc/bind/masterzones/test.example.ru.local.zone

  1. Добавьте ресурсные записи для почтового хоста «mx.test.example.ru.»:

$ORIGIN test.example.ru.
mx                      IN      A       <IP_адрес_mx>
                        MX      10 mx.test.example.ru. 

  1. Проверьте синтаксис файла зоны:

sudo named-checkzone test.example.ru. /etc/bind/masterzones/test.example.ru.local.zone

  1. Если ошибок нет, перезагрузите BIND:

sudo service bind9 reload

Теперь ваш DNS-сервер обновлен с новыми ресурсными записями почты для домена «test.example.ru.». 

Обратная зона DNS

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

PTR-записи, используемые в обратной зоне, определяют домен по адресу и часто используются для проверки почтовых серверов.

  1. Создайте новый файл зоны для обратного просмотра:

sudo nano /etc/bind/masterzones/168.192/in-addr.arpa.zone

  1. Добавьте в него новые настройки. Например:

  1. Проверьте синтаксис созданной зоны:

sudo named-checkzone 168.192.in-addr.arpa /etc/bind/masterzones/168.192.in-addr.arpa.zone

  1. Добавьте зону в конфигурационный файл «named.conf.local»:

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

  1. Добавьте следующую конфигурацию:

zone "168.192.in-addr.arpa." {
    type master;
    file "/etc/bind/masterzones/168.192.in-addr.arpa.zone";
    allow-transfer { 192.168.0.6; };
};

Пример: 

  1. Проверьте синтаксис измененных конфигураций:

sudo named-checkconf

  1. Перезапустите BIND:

sudo service bind9 restart

  1. Для вторичного сервера добавьте аналогичную конфигурацию в «named.conf.local»:

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

  1. Пропишите:

zone "168.192.in-addr.arpa." {
    type slave;
    file "/etc/bind/slave/168.192.in-addr.arpa.zone";
    masters { 192.168.0.5; };
};

Пример: 

  1. Проверьте синтаксис изменений и перезагрузите BIND на вторичном сервере:

sudo named-checkconf
sudo service bind9 restart

Теперь обратная зона DNS настроена на вашем сервере BIND, и вы можете приступить к настройке внешней доменной зоны.

Внешняя доменная зона

  1. Добавьте внешний адрес в директиву «listen-on» в файле конфигурации «named.conf.options»:

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

  1. Обновите секцию «listen-on» следующим образом, заменив «111.222.333.444» на ваш внешний IP-адрес:

..
listen-on {
    111.222.333.444/32; # Ваш внешний IP
    192.168.0.0;
    127.0.0.0/8
}
..

  1. Создайте файл зоны для внешнего просмотра, не забыв изменить серийный номер:

sudo nano /etc/bind/masterzones/test.example.ru.zone

  1. Добавьте следующие записи, учитывая внешние IP-адреса:

$ttl 3600
$ORIGIN test.example.ru.
test.example.ru.       IN      SOA  (
    ns.test.example.ru.
    admin.test.example.ru.
    2022041205
    10800
    1200
    604800
    3600
)
@                       IN      NS      ns.test.example.ru.
@                       IN      NS      ns2.test.example.ru.
@                       IN      A       111.222.333.444 # Ваш первый внешний адрес
ns                      IN      A       111.222.333.444
ns2                     IN      A       555.666.777.888 # Ваш второй внешний адрес

  1. Создайте файл конфигурации для внешнего просмотра:

sudo nano /etc/bind/named.conf.external

  1. Добавьте в него следующее:

zone "test.example.ru." {
    type master;
    file "/etc/bind/masterzones/test.example.ru.zone";
    allow-transfer { 192.168.0.6; };
};

  1. Переместите созданный файл в основной конфигурационный файл «named.conf»:

sudo nano /etc/bind/named.conf

  1. Пропишите следующий блок:

acl "external-view" { 111.222.333.444; };
view "external-view" {
    recursion no;
    match-clients { external-view; };
    include "/etc/bind/named.conf.external";
};

  1. Проверьте синтаксис конфигурации:

sudo named-checkconf -z
sudo named-checkzone test.example.ru. /etc/bind/masterzones/test.example.ru.zone

  1. Перезапустите BIND:

sudo service bind9 restart
sudo service bind9 status

  1. На вторичном DNS-сервере добавьте внешний адрес в файл конфигурации «named.conf.options»:

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

  1. Обновите секцию «listen-on», заменив «555.666.777.888» на ваш внешний IP-адрес:

..
listen-on {
    555.666.777.888/24; # ваш внешний IP
    192.168.0.0/168;
    127.0.0.0/8;
}
..

  1. Создайте файл конфигурации для внешнего просмотра:

sudo nano /etc/bind/named.conf.external

  1. И введите:

zone "test.example.ru." {
    type slave;
    file "/etc/bind/slave/test.example.ru.zone";
    masters { 192.168.0.5; };
};

  1. Добавьте созданный файл в основной конфигурационный файл «named.conf»:

sudo nano /etc/bind/named.conf

  1. Пропишите такой блок:

acl "external-view" { 555.666.777.888; };
view "external-view" {
    recursion no;
    match-clients { external-view; };
    include "/etc/bind/named.conf.external";
};

  1. Выполните трансфер зоны на вторичном сервере:

sudo rndc retransfer test.example.ru. IN external-view

Теперь ваш внешний DNS настроен для обработки DNS-запросов из внешней сети, а вторичный сервер получил обновления зоны. 

Важно! Убедитесь в корректности настроек и серийного номера перед развертыванием внешнего DNS.

Настройка правил журналирования и отладка

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

  1. Создайте файл «log.conf» для определения правил журналирования:

sudo nano /etc/bind/log.conf

  1. Добавьте следующие настройки в файл для записи отладочной информации в файл «/var/lib/bind/bind.log»:

logging {
    channel bind.log {
        file "/var/lib/bind/bind.log" versions 10 size 20m;
        severity debug;
        print-category yes;
        print-severity yes;
        print-time yes;
    };
    category queries { bind.log; };
    category default { bind.log; };
    category config { bind.log; };
};

  1. Добавьте подключение созданного файла «log.conf» в основной конфигурационный файл «named.conf»:

sudo nano /etc/bind/named.conf

  1. В конце файла пропишите:

include "/etc/bind/log.conf";

  1. Сохраните изменения в файлах конфигурации и перезапустите BIND:

sudo service bind9 restart

Теперь сервер будет записывать отладочную информацию в файл «/var/lib/bind/bind.log».

Заключение

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