Панель ispmanager — по умолчанию первичный сервер имен, даже если ее записи никуда не транслируются. Если включить опцию «Сервер имен», то для каждого домена нужно создать мастер-зону.
Часто администраторы серверов направляют NS-записи купленных доменов на свои сервера с панелью, чтобы записи автоматически пробрасывались во внешний мир. Но это не всем подходит — иногда NS-записи направляют на сторонний сервер имен или настраивают дублирующий, чтобы сайт остался доступным, если с мастер-сервером что-то случится. В этих ситуациях придется настраивать BIND в качестве вторичного сервера имен.
В статье разберем, как это сделать на примере операционных систем AlmaLinux 8 и Ubuntu 22.04:
Настройка типового сервера с сервером имен BIND
Настройка Master DNS
Настройка Slave DNS
Проверяем результат
Частный случай: настройка передачи зон с ispmanager на ispmanager
Выводы
Настройка типового сервера с сервером имен 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» → «Создать домен».
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
В системе предустановлен простой редактор 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. Выбираем «Создать запись»
Как выглядит результат:
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
Комментарии (2)
censor2005
02.12.2024 20:25При такой настройке, придётся каждую зону вручную создавать на slave. Не очень автоматизированный подход. ISPManager не поддерживает zone catalog?
recursion yes на авторитативном сервере, ну такое себе... Лучше выбрать что то одно, мы авторитативный сервер или рекурсивный? При включённой опции рекурсии, мы можем не заметить проблем со slave-сервером, так как при ошибке в slave-зоне он будет разрешать доменное имя через запрос к master-серверу
Ну и как выше написали, apparmor/selinux лучше настроить
Если прямо нужна безопасность, можно ещё настроить TSIG ключи для верификации переданных зон
Можно было раскрыть тему rndc - например, как форсировать ретрансфер зоны (
rndc retransfer example.com
)
13werwolf13
нет, ну для мануалов от васянов такое простительно, но официальный мануал от вполне себе тырпрайз конторы должен предлагать конфигурацию apparmor/selinux а не их отключение в приоритете..