Посібники

Як додати вторинний DNS до хостинг-панелі DirectAdmin

Навіщо вашому серверу DirectAdmin потрібен вторинний DNS

Вторинний DNS сервер для DirectAdmin — сервіс вторинного DNS через REST API

DirectAdmin використовує BIND (named) як DNS-сервер. За замовчуванням усі домени залежать від одного неймсервера. Якщо він виходить з ладу — під час обслуговування, апаратного збою або DDoS-атаки — кожен домен стає недоступним. Відвідувачі стикаються зі збоями DNS — сайти недоступні, пошта не доставляється, сервіси не відповідають.

Вторинний DNS-сервер зберігає синхронізовану копію всіх зон через AXFR (повний трансфер зони). Коли основний недоступний, вторинний продовжує відповідати на DNS-запити. Ваші сайти, пошта та сервіси залишаються онлайн.

Більшість реєстраторів вимагають щонайменше два неймсервери, RFC 2182 рекомендує три для продакшн-середовищ. Вторинний DNS — не просто найкраща практика, а необхідна умова надійності.

Ще не маєте вторинного неймсервера? SecondDNS дає його на безкоштовному 3-місячному пробному періоді, без картки — почніть тут, а потім виконайте кроки нижче.

Як працює DNS у DirectAdmin

DirectAdmin записує зони для BIND (named) — іншого DNS-бекенда в нього немає.

BIND (named): Зони зберігаються у файлах зон у /etc/named/ або /var/named/. Трансфери налаштовуються в named.conf: allow-transfer дозволяє вторинному серверу завантажувати зону, а also-notify змушує BIND надсилати NOTIFY, щоб вторинний одразу оновлювався.

В обох випадках DirectAdmin керує DNS через hook-скрипти. При створенні або видаленні домену DirectAdmin викликає скрипти в /usr/local/directadmin/scripts/custom/. Інтеграція SecondDNS встановлює власні хуки за цим шляхом, щоб автоматично реєструвати та видаляти зони — керувати зонами вручну не потрібно.

Як працює інтеграція вторинного DNS

Інтеграція SecondDNS для DirectAdmin використовує hook-скрипти, які DirectAdmin викликає автоматично після DNS-подій:

1. Коли створюється домен або domain pointer — хук реєструє зону в SecondDNS через API 2. SecondDNS завантажує повну копію зони з вашого сервера через AXFR 3. Коли домен видаляється — хук видаляє його з SecondDNS

Всі зміни зон поширюються автоматично через механізм NOTIFY BIND. Жодних ручних дій, cron-задач чи застарілих записів.

Вимоги до вторинного DNS для DirectAdmin

Перед початком переконайтеся, що маєте:

- DirectAdmin 1.6 або новіше з BIND/named - Root (sudo) доступ до сервера - API-ключ SecondDNS (отримайте на seconddns.com/dashboard/api-key) - IP-адресу вашого неймсервера SecondDNS (знайдіть у панелі у розділі Settings > Nameservers) - відкриті вхідні з'єднання на TCP-порт 53 вашого сервера з IP-адрес SecondDNS

Протокол трансферу зон AXFR використовує TCP-порт 53, а не UDP. Якщо TCP 53 заблоковано, трансфери зон мовчки провалюватимуться, без жодного повідомлення про помилку — навіть якщо звичайні DNS-запити працюють нормально.

Відкрийте TCP-порт 53 для трансферу зон DNS

Перед запуском інсталятора відкрийте TCP-порт 53 для сервера SecondDNS. Знайдіть IP вашого неймсервера в панелі у розділі Settings > Nameservers, замініть SECONDARY_IP у командах нижче.

Якщо використовуєте UFW:

ufw allow from SECONDARY_IP to any port 53 proto tcp
ufw reload

Якщо використовуєте iptables:

iptables -I INPUT -s SECONDARY_IP -p tcp --dport 53 -j ACCEPT

Якщо використовуєте nftables:

nft add rule inet filter input ip saddr SECONDARY_IP tcp dport 53 accept

Щоб перевірити, що TCP-порт 53 відкритий ззовні:

nmap -p 53 -sT YOUR_SERVER_IP

Інсталятор сам налаштовує allow-transfer — достатньо вказати API-ключ.

Встановлення вторинного DNS на DirectAdmin

Виконайте команду від root:

curl -sL https://raw.githubusercontent.com/seconddns/dns_integrations/main/hosting-panels/directadmin/install.sh | bash -s -- --api-key=YOUR_API_KEY

Інсталятор: - Перевірить ваш API-ключ через SecondDNS API - Визначить IP-адресу сервера (IPv4 та IPv6) - Запитає, який протокол використовувати, якщо доступні обидва - Знайде named.conf і зробить резервну копію перед правкою - Автоматично налаштує трансфер зон (allow-transfer надає дозвіл, also-notify вмикає NOTIFY для BIND) - Встановить hook-скрипти до /usr/local/directadmin/scripts/custom/ - Запропонує синхронізувати існуючі домени

Замініть YOUR_API_KEY на ключ з вашої панелі SecondDNS. Якщо якийсь крок не вдасться, інсталятор завершується з кодом помилки.

Налаштуйте неймсервери в DirectAdmin

Після встановлення зареєструйте вторинний неймсервер у DirectAdmin.

Варіант 1: Через панель DirectAdmin (рекомендовано) Увійдіть як Admin → Server Manager → Name Servers. У полі NS2 вкажіть хостнейм вашого неймсервера SecondDNS (відображається в панелі у розділі Settings > Nameservers). Якщо у вас є Personalized NS, використовуйте ваш брендований хостнейм (наприклад, ns2.yourdomain.com). Налаштування автоматично пошириться на всі нові домени.

Варіант 2: Редагування DNS-шаблону

vi /usr/local/directadmin/data/templates/custom/dns_zone.conf

Якщо директорія не існує, створіть її:

mkdir -p /usr/local/directadmin/data/templates/custom
cp /usr/local/directadmin/data/templates/dns_zone.conf /usr/local/directadmin/data/templates/custom/

Додайте NS-запис, що вказує на хостнейм вашого неймсервера в SecondDNS або персональне ім'я, якщо ви замовили цю послугу. Для існуючих доменів скористайтеся керуванням DNS у DirectAdmin або функцією масового оновлення DNS.

Синхронізуйте існуючі домени з вторинним DNS

Якщо домени в DirectAdmin вже існували до встановлення, синхронізуйте їх із вторинним сервером:

seconddns sync

Ця команда порівнює ваші локальні зони з SecondDNS і додає відсутні. Команда ідемпотентна — її можна безпечно запускати кілька разів, дублікати не створюються.

Щоб перевірити конкретну зону:

seconddns status example.com

Щоб побачити всі зони на вторинному сервері:

seconddns list

Видалення окремо: звичайний `seconddns sync` лише додає. Щоб також прибрати зони, яких панель більше не обслуговує, виконайте `seconddns sync --prune` — команда відмовиться, якщо мала б видалити більше половини зон цього сервера, бо саме так виглядає панель, яку не вдалося прочитати.

Перевірте налаштування вторинного DNS DirectAdmin

Створіть тестовий домен у DirectAdmin і стежте за логом хуків:

tail -f /var/log/seconddns.log

У виводі має з'явитися:

Zone created: testdomain.com (caller=create:domain, user=admin)
[+] Zone testdomain.com added to SecondDNS

Потім зробіть наступні запити на обидва неймсервери. Замініть SECONDARY_IP на IP вашого неймсервера з панелі:

dig @YOUR_SERVER_IP testdomain.com SOA +short
dig @SECONDARY_IP testdomain.com SOA +short

Обидва мають повернути однаковий серіал SOA у форматі YYYYMMDDNN. Якщо вторинний показує менший серіал або повертає SERVFAIL, перевірте доступність TCP-порту 53 та лог хуків.

Підтримувані типи доменів

Інтеграція обробляє всі типи доменів DirectAdmin:

- Основні домени (create:domain) - DNS-зони (create:zone) - Domain pointers (create:pointer) - Перейменовані домени (`domain_change_post`) — DirectAdmin не надсилає події створення DNS під час перейменування, тому окремий хук прибирає стару зону і реєструє нову

Кожен тип автоматично запускає хук під час створення або видалення через панель чи API DirectAdmin. Хук отримує ім'я домену, ім'я користувача та тип виклику від DirectAdmin і передає їх до SecondDNS.

Якщо SecondDNS недоступний

Зміни зон ніколи не йдуть в API напряму. Кожен хук записує операцію в локальну чергу, а фоновий робітник доставляє її по черзі, повторюючи спроби зі зростаючою затримкою, поки SecondDNS недоступний — вікно обслуговування чи проблема з мережею нічого не коштують, і жодна дія ваших клієнтів у панелі не губиться.

Стан черги можна подивитись будь-коли:

seconddns status
pending=0 failed=0 oldest_age_seconds=0 last_error=

Ненульовий `pending` разом із `last_error` означає, що доставка чекає, а не що щось втрачено. `failed` — це операції, які SecondDNS відхилив; повернути їх у чергу можна командою `seconddns-queue retry --all`.

Усунення несправностей вторинного DNS DirectAdmin

Зона не з'являється на вторинному сервері Перевірте лог хуків /var/log/seconddns.log. Переконайтеся, що хуки встановлені та мають права на виконання:

ls -la /usr/local/directadmin/scripts/custom/{dns_create_post,dns_delete_post,domain_change_post}.sh

Якщо файли відсутні — перезапустіть інсталятор. Якщо є, але права на виконання відсутні:

chmod +x /usr/local/directadmin/scripts/custom/{dns_create_post,dns_delete_post,domain_change_post}.sh

AXFR відхилено (BIND) Перевірте named.conf на наявність allow-transfer з вашим IP SecondDNS:

grep -A3 'allow-transfer' /etc/named.conf

Зміна allow-transfer — це зміна конфігурації, тож застосуйте її через reconfig (rndc reload лише перечитує дані зон):

rndc reconfig

TCP-порт 53 заблоковано Запустіть тест nmap з розділу налаштування файрволу. Користувачі CSF: перевірте, що IP SecondDNS є в /etc/csf/csf.allow.

Запустити хук вручну:

domain=example.com username=admin caller=create:domain /usr/local/directadmin/scripts/custom/dns_create_post.sh

Хук не спрацьовує Перевірте, що система хуків DirectAdmin увімкнена. Деякі старіші збірки вимагають, щоб директорію кастомних скриптів було явно ввімкнено в конфігурації.

Видалення

Щоб видалити інтеграцію:

curl -sL https://raw.githubusercontent.com/seconddns/dns_integrations/main/hosting-panels/directadmin/uninstall.sh | bash

Це видаляє hook-скрипти та конфігураційний файл. Ваші зони на вторинному DNS не видаляються автоматично — видаліть їх через панель SecondDNS або виконайте:

seconddns remove-all

перед видаленням, якщо хочете очистити вторинний сервер.

Команда показує, що саме прибере, і просить набрати IP майстра для підтвердження; у скрипті це пропускається прапорцем `--yes`.