03 мая 2024 Время чтения: 9 минут

Как настроить BIND в качестве вторичного DNS-сервера для панели ispmanager

ispmanager

Панель ispmanager — по умолчанию первичный сервер имен, даже если ее записи никуда не транслируются. Если включить опцию «Сервер имен», то для каждого домена нужно создать мастер-зону.

Часто администраторы серверов направляют NS-записи купленных доменов на свои сервера с панелью, чтобы записи автоматически пробрасывались во внешний мир. Но это не всем подходит — иногда NS-записи направляют на сторонний сервер имен или настраивают дублирующий, чтобы сайт остался доступным, если с мастер-сервером что-то случится. В этих ситуациях придется настраивать BIND в качестве вторичного сервера имен.

В статье разберем, как это сделать на примере операционных систем AlmaLinux 8 и Ubuntu 22.04:

Настройка типового сервера с сервером имен BIND

Сначала настраиваем типовой сервер, чтобы зоны и записи DNS поступили на вторичные серверы имен. Изменения вносим в секции Options конфигурации сервера имен, чтобы они сразу применились ко всем зонам сервера.

Где найти секцию Options в конфигурационном файле в разных ОС:

 

Ubuntu 22.04:

/etc/bind/named.conf.options

 

Almalinux 8:

/etc/named.conf

Строки настроек:

allow-transfer { 172.31.97.22; };
    also-notify { 172.31.97.22; };
    notify yes;    

Что получилось: мы разрешили передачу зон на один вторичный сервер и включили уведомления об обновлении зон от мастера ко вторичному серверу.

Настройка Master DNS

Как настроить Master DNS:

1. Создаем новое доменное имя. Здесь мы создали домен с поддоменами, с помощью панели ispmanager на мастере. Выбираем в меню панели «Управление DNS» → «Создать домен».

new domain

2. Создаем доменные записи. Выбираем «Управление DNS» → домен isptest.test → «Управлять DNS-записями». Результат выглядит так:

domain records

3. Проверяем, как действия отобразились в конфигурации службы.

Ubuntu:

zone "isptest.test" {
    type master;
    file "/etc/bind/domains/isptest.test";
};

AlmaLinux:

zone "isptest.test" {
    type master;
    file "/var/named/domains/isptest.test";
};

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

Настройка Slave DNS

Ubuntu 22.04

1. Устанавливаем пакеты. Предположим, что мы с нуля настраиваем чистый Slave-сервер.

Нам нужно установить:

  • пакеты сервера имён
  • сопутствующие пакеты
apt install bind9 dnsutils rsyslog

В системе предустановлен простой редактор Nano. По желанию можно включить в список пакетов удобный вам консольный редактор текста.

2. Проверяем, что служба запущена и загружается при старте системы. Для этого в статусе службы должны быть значения active и enabled.

Команда для вывода статуса службы:

systemctl status named

Служба BIND обозначена в системе «named» — как «bind» найти ее не получится.

3. Запускаем службу. Если в статусе вы видите значения inactive и disabled, то нужно запустить службу и указать, чтобы она загружалась при старте системы.

Команды для запуска и загрузки:

systemctl start named
systemctl enable named

Проверяем статус службы:

systemctl status named

Проверяем, что служба прослушивает порт 53:

ss -ptulwn | grep LISTEN | grep 53

Вывод команды не должен быть пустым — в Ubuntu 22.04 сервер имен по умолчанию прослушивает все доступные адреса в системе.

4. Создаем зону, которую хотим продублировать на Slave-сервере. Вносим изменения в основном конфигурационном файле:

/etc/bind/named.conf

В Ubuntu 22.04 можно вносить изменения в подключаемом файле, например:

/etc/bind/named.conf.local

Берем главный файл, чтобы настройки конфигурации были одинаковые на разных ОС. В самый конец конфигурационного файла копируем зону с небольшими изменениями. Вот как выглядит код полностью:

zone "isptest.test" {
        type slave;
        file "/etc/bind/slave/isptest.test";
        masters { 172.31.97.141; };
    };
    

Примечание: в BIND 9 директива Masters еще работает, но считается устаревшей. Ее можно заменить на Primaries с тем же синтаксисом. Подробнее — в официальной документации →

Мы создали slave-зону домена с записью в указанный файл и прописали Master-сервер, с которого зона получает обновления. Файл с ресурсными записями зоны служба создаст сама, но для него нужно создать директорию и корректно назначить права.

Для этого используем команды:

mkdir /etc/bind/slave
chown bind:bind /etc/bind/slave

Отключите AppArmor, если он не позволит записывать в директорию:

 

aa-teardown

systemctl stop apparmor

systemctl disable apparmor

 

Если не отключить AppArmor, то вам придется использовать другую директорию для хранения файлов с ресурсными записями — например /var/cache/bind/slaves Либо придется разбираться в AppArmor и менять его политики.

5. Проверяем, правильная ли конфигурация:

named-checkconf /etc/bind/named.conf

Если нет вывода в консоли, то конфигурация службы named корректна.

6. Перезагружаем службу и проверяем статус:

systemctl restart named
systemctl status named

AlmaLinux 8

1. Устанавливаем пакеты сервера имен и его утилит:

yum install bind bind-utils

либо

dnf install bind bind-utils

С помощью этих команд установится одинаковый список пакетов. Менеджер пакетов можно использовать любой — dnf или yum. В список можно включить удобный для вас консольный редактор текста — в системе по умолчанию стоит Vi, он подойдет для опытных пользователей. Для начинающих можно выбрать Nano.

2. Запускаем службу. После установки пакетов она находится в неактивном состоянии — в статусе будут значения inactive и disabled

Задаем команды, чтобы служба загружалась и запускалась при старте системы:

systemctl start named
systemctl enable named

3. Проверяем статус:

systemctl status named

Если вы видите в статусе значения active и enabled то все получилось =)

4. Редактируем основной конфигурационный файл службы по пути:

/etc/named.conf

В нём находится блок глобальных опций — будем менять их со значений по умолчанию.

Какие опции потребуются для редактирования:

listen-on port 53 { 127.0.0.1; };

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

listen-on port 53 { 127.0.0.1; 172.31.97.22; };

Второй вариант — задаем прослушивание 53 порта на всех IP адресах хоста. Чтобы получить такую конфигурацию — указываем параметр any:

listen-on port 53 { any; };

Либо вы можете прописать двойной прямой слэш // в начале строки. Так вы укажете, что строка — это комментарий, и она не будет учитываться при считывании конфигурации. Закомментированные строки можно увидеть в начале конфигурационного файла.

Опция для прослушивания порта на IPv6-адресе:

listen-on-v6 port 53 { ::1; };

По умолчанию указан localhost. Добавьте ваш адрес IPv6 либо отключите эту опцию.

Чтобы отключить прослушивание IPv6, измените строку на:

listen-on-v6 { none; };

Параметр allow-query указывает, кому разрешено отправляют запросы к серверу:

allow-query { localhost; };

Эту опцию можно редактировать на ваше усмотрение, чтобы изолировать сервер от запросов с нежелательных IP-адресов.

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

С помощью опции recursion сервер имен может обратиться к другим серверам имен для разрешения запроса:

recursion yes;

Подробнее — в документации →

Директивы dnssec-enable и dnssec-validation включают механизм валидации DNSSEC:

dnssec-enable yes;
dnssec-validation yes;

Оставляйте эти опции включенными, если вам нужна валидация. Подробнее как настроить DNSSEC описано в документации ispmanager →

5. Добавляем в конец главного конфигурационного файла /etc/named.conf slave-зону:

zone "isptest.test" {
        type slave;
        file "/var/named/slave/isptest.test";
        masters { 172.31.97.141; };
    };
    

Если в директиве указан параметр masters или primaries то Slave-зона получит обновления с определенного IP-адреса.

6. Создаем директорию для хранения файлов с ресурсными записями зон доменов:

mkdir /var/named/slave
chown named:named /var/named/slave

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

named-checkconf /etc/named.conf

8. Перезагружаем службу и проверяем ее статус:

systemctl restart named
systemctl status named

Проверяем результат

1. Копируем записи с мастера. В результате получаем строку в системном логе. Как она выглядит:

transfer of 'isptest.test/IN' from 172.31.97.141#53: Transfer completed: 1 messages, 13 records, 372 bytes, 0.001 secs (372000 bytes/sec)

Системные логи:

 

Ubuntu 22.04:

/var/log/syslog

 

Almalinux 8:

/var/log/messages

2. Проверяем наличие файла с записями:

Ubuntu 22.04:

ls -l /etc/bind/slave

 

AlmaLinux 8:

ls -l /var/named/slave

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

3. Проверяем выдачу записей.

В любом сервере сети либо на Slave-сервере вводим команду:

dig isptest.test a @172.31.97.22 +short

С помощью этой команды мы обращаемся к Slave-серверу имён c IP 172.31.97.22 и просим утилиту dig вывести A-записи для домена isptest.test В ответе должен быть IP-адрес домена, который прописан в записях на мастере.

Теперь добавляем новую A-запись на master-сервере ispmanager в зоне домена.

Что делаем:

1. Переходим в «Управление DNS»

2. Выбираем домен isptest.test

3. Нажимаем «Управлять DNS записями»

4. Выбираем «Создать запись»

Как выглядит результат:

new domain record

4. Проверяем выдачу записи со Slave-сервера:

dig dw.isptest.test a @172.31.97.22 +short

Если всё работает, то запись сразу вернется со Slave-сервера. Когда мы добавили новую запись, Master-сервер отправил уведомление об обновлении зоны на Slave и данные на серверах синхронизировались. Вы увидите это в системном логе.

Если записи сразу не синхронизировались, то запустите ручную синхронизацию зоны домена с помощью команды на Slave-сервере:

rndc retransfer isptest.test

В результате все записи обновятся, а новые записи доставятся на Slave.

Частный случай: настройка передачи зон с ispmanager на ispmanager

В такой ситуации зоны передаются между двумя серверами с панелью, где установлен сервер имен BIND.

Что нужно сделать:

1. Создаем обычного администратора в будущей Slave-панели без прав суперпользователя:

«Настройки» → «Администраторы» → «Создать администратора».

Результат выглядит так:

new admin

2. Настраиваем вторичный сервер имен в Master-панели с помощью нативной интеграции, данных от Slave-панели и созданного администратора:

«Управление DNS» → «DNSmanager» → «Создать». Результат выглядит так:

new slave srever
Чтобы все домены мастера сразу скопировались на Slave-сервер, отметьте галочку «Синхронизировать»

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

Выводы

Мы настроили BIND в качестве вторичного сервера имен — теперь домены отправляются на Slave-сервер просто и быстро.

Минус метода — нужно вручную добавлять нужные зоны в конфигурацию Slave-сервера.

Подробную информацию о настройке вы найдете в документации:

Если у вас есть вопросы, приходите в телеграм-сообщество ispmanager →