Как настроить BIND в качестве вторичного DNS-сервера для панели ispmanager
Панель ispmanager — по умолчанию первичный сервер имен, даже если ее записи никуда не транслируются. Если включить опцию «Сервер имен», то для каждого домена нужно создать мастер-зону.
Часто администраторы серверов направляют NS-записи купленных доменов на свои сервера с панелью, чтобы записи автоматически пробрасывались во внешний мир. Но это не всем подходит — иногда NS-записи направляют на сторонний сервер имен или настраивают дублирующий, чтобы сайт остался доступным, если с мастер-сервером что-то случится. В этих ситуациях придется настраивать BIND в качестве вторичного сервера имен.
В статье разберем, как это сделать на примере операционных систем AlmaLinux 8 и Ubuntu 22.04:
- Настройка типового сервера с сервером имен BIND
- Настройка Master DNS
- Настройка Slave DNS
- Проверяем результат
- Частный случай: настройка передачи зон с ispmanager на ispmanager
- Выводы
Настройка типового сервера с сервером имен BIND
Сначала настраиваем типовой сервер, чтобы зоны и записи DNS поступили на вторичные серверы имен. Изменения вносим в секции Options конфигурации сервера имен, чтобы они сразу применились ко всем зонам сервера.
Строки настроек:
allow-transfer { 172.31.97.22; };
also-notify { 172.31.97.22; };
notify yes;
Что получилось: мы разрешили передачу зон на один вторичный сервер и включили уведомления об обновлении зон от мастера ко вторичному серверу.
Настройка Master DNS
Как настроить Master DNS:
1. Создаем новое доменное имя. Здесь мы создали домен с поддоменами, с помощью панели ispmanager на мастере. Выбираем в меню панели «Управление DNS» → «Создать домен».
2. Создаем доменные записи. Выбираем «Управление DNS» → домен isptest.test → «Управлять DNS-записями». Результат выглядит так:
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
2. Проверяем, что служба запущена и загружается при старте системы. Для этого в статусе службы должны быть значения active
и enabled
.
Команда для вывода статуса службы:
systemctl status named
3. Запускаем службу. Если в статусе вы видите значения inactive
и disabled
, то нужно запустить службу и указать, чтобы она загружалась при старте системы.
Команды для запуска и загрузки:
systemctl start named
systemctl enable named
Проверяем статус службы:
systemctl status named
Проверяем, что служба прослушивает порт 53:
ss -ptulwn | grep LISTEN | grep 53
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; };
};
Мы создали slave-зону домена с записью в указанный файл и прописали Master-сервер, с которого зона получает обновления. Файл с ресурсными записями зоны служба создаст сама, но для него нужно создать директорию и корректно назначить права.
Для этого используем команды:
mkdir /etc/bind/slave
chown bind:bind /etc/bind/slave
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)
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. Выбираем «Создать запись»
Как выглядит результат:
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-панели без прав суперпользователя:
«Настройки» → «Администраторы» → «Создать администратора».
Результат выглядит так:
2. Настраиваем вторичный сервер имен в Master-панели с помощью нативной интеграции, данных от Slave-панели и созданного администратора:
«Управление DNS» → «DNSmanager» → «Создать». Результат выглядит так:
Если вы настраиваете серверы имен от панели по умолчанию, то интеграция сразу начнет работу. Конфигурацию можно редактировать, если у вас есть свое представление тонких настроек службы.
Выводы
Мы настроили BIND в качестве вторичного сервера имен — теперь домены отправляются на Slave-сервер просто и быстро.
Минус метода — нужно вручную добавлять нужные зоны в конфигурацию Slave-сервера.
Подробную информацию о настройке вы найдете в документации:
Если у вас есть вопросы, приходите в телеграм-сообщество ispmanager →