Налаштування PowerDNS з Poweradmin на VPS: створення власного авторитативного DNS-сервера
TL;DR
У цьому докладному посібнику ми крок за кроком налаштуємо власний авторитативний DNS-сервер, використовуючи PowerDNS Authoritative Server та веб-інтерфейс Poweradmin, на базі операційної системи Ubuntu Server 24.04 LTS. Ви дізнаєтеся, як підготувати VPS, встановити та сконфігурувати всі необхідні компоненти, включно з базою даних MariaDB, веб-сервером Nginx та PHP-FPM, а також забезпечити безпеку та відмовостійкість вашої DNS-інфраструктури.
- Встановлення та налаштування PowerDNS Authoritative Server для керування доменними зонами.
- Розгортання Poweradmin – зручного веб-інтерфейсу для керування записами DNS.
- Використання MariaDB як бекенду для зберігання даних DNS.
- Захист сервера за допомогою брандмауера UFW, Fail2ban та TLS-сертифікатів Let's Encrypt.
- Рекомендації щодо вибору оптимального VPS-конфігу, бекапів та усунення несправностей.
Що ми налаштовуємо і навіщо
Сьогодні ми займемося розгортанням власного авторитативного DNS-сервера. Авторитативний DNS-сервер — це сервер, який зберігає офіційні записи для одного або кількох доменних імен (наприклад, example.com) і відповідає на запити щодо них. На відміну від рекурсивних DNS-серверів (які просто пересилають запити та кешують відповіді), авторитативний сервер є "джерелом істини" для ваших доменів.
Як основу ми будемо використовувати PowerDNS Authoritative Server – високопродуктивний та гнучкий DNS-сервер, який підтримує різні бекенди для зберігання даних, включно з базами даних. Для зручного керування доменними зонами та записами ми встановимо Poweradmin – веб-інтерфейс, який значно спрощує роботу з PowerDNS через браузер, позбавляючи від необхідності ручного редагування файлів зон.
У підсумку ви отримаєте повністю функціональний, відмовостійкий та легко керований DNS-сервер, на якому зможете розміщувати доменні зони для своїх сайтів, сервісів або проєктів. Це дозволяє повністю контролювати свої DNS-записи, швидко вносити зміни, інтегрувати DNS з іншими системами та не залежати від сторонніх DNS-провайдерів, що критично важливо для багатьох розробників, стартапів та ентузіастів.
Існують альтернативи, такі як хмарні DNS-сервіси (Cloudflare DNS, AWS Route 53, Google Cloud DNS) або DNS-сервери, вбудовані в панель керування хостингом. Хмарні сервіси пропонують високу доступність та продуктивність, але часто мають обмеження щодо кастомізації та можуть бути дорогими для великої кількості зон або специфічних запитів. Самостійне розміщення DNS на VPS дає повний контроль над конфігурацією, даними та безпекою, а також може бути більш економічним у довгостроковій перспективі для проєктів з певними вимогами до приватності або інтеграції. Вибираючи self-hosted рішення, ви отримуєте гнучкість та суверенітет над своєю DNS-інфраструктурою.
Який VPS-конфіг потрібен для цього завдання
Для авторитативного DNS-сервера, особливо якщо він обслуговує не дуже велику кількість зон (до кількох сотень) і не піддається DDoS-атакам, вимоги до ресурсів досить скромні. PowerDNS дуже ефективний.
Мінімальні вимоги:
- CPU: 1 ядро (x64 архітектура). Сучасні процесори з тактовою частотою від 2 ГГц більш ніж достатні.
- RAM: 1 ГБ. Цього вистачить для операційної системи, PowerDNS, MariaDB, Nginx та PHP-FPM. Якщо планується дуже багато зон (тисячі) або високе навантаження, можна розглянути 2 ГБ.
- Диск: 20-30 ГБ SSD. PowerDNS та база даних займають мало місця. Основний обсяг потрібен для операційної системи, логів та бекапів. SSD критичний для швидкої роботи бази даних.
- Сеть: 100 Мбіт/с або 1 Гбіт/с. Для DNS-запитів пропускна здатність не є вузьким місцем, оскільки запити дуже легкі. Головне — стабільність з'єднання та низька затримка.
Конкретний VPS-план для завдання:
Для більшості сценаріїв, включно з розробниками, соло-фаундерами та невеликими командами, оптимальним буде VPS з такими характеристиками:
- 2 vCPU
- 2 ГБ RAM
- 50 ГБ SSD
- 1 Гбіт/с мережевий інтерфейс
- Виділена IPv4-адреса (мінімум 2, якщо ви хочете запустити два NS-сервери на різних IP)
Такий конфіг забезпечить комфортну роботу, достатній запас продуктивності та місце для зростання. Ви можете розглянути VPS із зазначеними характеристиками від надійного провайдера.
Коли потрібен dedicated, а не VPS:
Dedicated-сервер (виділений сервер) може знадобитися в таких випадках:
- Дуже високе навантаження: Якщо ви плануєте обслуговувати сотні тисяч або мільйони DNS-запитів за секунду, або керувати десятками тисяч доменних зон.
- Критичні застосунки: Для інфраструктур, де будь-яка затримка або потенційна проблема з "сусідами" на VPS неприпустима.
- Вимоги до безпеки та ізоляції: Повна фізична ізоляція від інших клієнтів.
- Специфічні апаратні вимоги: Наприклад, для використання апаратних модулів безпеки (HSM) або дуже великого обсягу RAM/швидких NVMe-дисків.
Для більшості завдань авторитативного DNS-сервера, особливо на початковому етапі, VPS є більш ніж достатнім та економічно вигідним рішенням.
Локація: на що впливає
Вибір локації VPS для DNS-сервера важливий з двох причин:
- Затримка (Latency): Чим ближче фізично ваш DNS-сервер до основної аудиторії ваших доменів, тим нижчою буде затримка при розв'язанні доменних імен. Це впливає на швидкість завантаження сайтів та чутливість сервісів.
- Юрисдикція: У деяких випадках місце розташування сервера може бути важливим з точки зору законодавства та правових аспектів зберігання даних.
Ідеально мати щонайменше два авторитативні DNS-сервери (один первинний, один вторинний) у різних географічних локаціях та у різних провайдерів для максимальної відмовостійкості.
Підготовка сервера
Перш ніж приступити до встановлення PowerDNS, необхідно виконати базову підготовку сервера. Ми будемо використовувати Ubuntu Server 24.04 LTS, оскільки це актуальна та стабільна версія для 2026 року.
1. Підключення по SSH
Підключіться до вашого нового VPS як користувач root або користувач, наданий провайдером:
ssh root@ВАШ_IP_АДРЕС_VPS
2. Оновлення системи
Завжди починайте з оновлення пакетного менеджера та встановлених пакетів до останніх версій:
sudo apt update && sudo apt upgrade -y
Оновлює список пакетів та встановлює всі доступні оновлення.
3. Створення нового користувача з правами sudo
Робота під root небезпечна. Створимо нового користувача та надамо йому права sudo:
sudo adduser username # Замініть 'username' на бажане ім'я користувача
Додає нового користувача до системи. Дотримуйтесь інструкцій для створення пароля та інформації про користувача.
sudo usermod -aG sudo username
Додає нового користувача до групи sudo, надаючи йому права адміністратора.
su - username
Перемикається на нового користувача. Тепер усі команди виконуватимуться від його імені.
4. Налаштування SSH-ключів (рекомендовано)
Для підвищення безпеки рекомендовано використовувати SSH-ключі замість паролів. Згенеруйте ключі на локальній машині (якщо ще немає):
ssh-keygen -t ed25519 -C "[email protected]"
Скопіюйте публічний ключ на сервер:
ssh-copy-id username@ВАШ_IP_АДРЕС_VPS
Вимкніть вхід за паролем для root та нового користувача у файлі /etc/ssh/sshd_config. Знайдіть рядки:
#PermitRootLogin prohibit-password
#PasswordAuthentication yes
І змініть їх на:
PermitRootLogin no
PasswordAuthentication no
Перезапустіть SSH-сервіс:
sudo systemctl restart sshd
5. Встановлення та налаштування брандмауера (UFW)
Брандмауер необхідний для обмеження доступу до сервера. Дозволимо лише SSH, HTTP, HTTPS та DNS-порти.
sudo apt install ufw -y
Встановлює Uncomplicated Firewall (UFW).
sudo ufw allow ssh # Дозволити SSH (порт 22 за замовчуванням)
sudo ufw allow http # Дозволити HTTP (порт 80) для Poweradmin та Let's Encrypt
sudo ufw allow https # Дозволити HTTPS (порт 443) для Poweradmin
sudo ufw allow 53/tcp # Дозволити TCP-трафік для DNS
sudo ufw allow 53/udp # Дозволити UDP-трафік для DNS
sudo ufw enable
Вмикає брандмауер та застосовує правила. Підтвердіть дію, ввівши y.
sudo ufw status verbose
Перевіряє поточний статус та правила UFW.
6. Встановлення Fail2ban
Fail2ban захищає сервер від атак методом підбору паролів, блокуючи IP-адреси, з яких були помічені невдалі спроби входу.
sudo apt install fail2ban -y
Встановлює Fail2ban.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Створює локальний файл конфігурації, який не буде перезаписаний при оновленні пакета.
Відредагуйте /etc/fail2ban/jail.local, щоб посилити захист. Наприклад, змініть bantime (час блокування) та maxretry (кількість спроб).
sudo nano /etc/fail2ban/jail.local
Знайдіть секцію [DEFAULT] та змініть значення:
[DEFAULT]
bantime = 1h # Блокувати на 1 годину
findtime = 10m # Сканувати за останні 10 хвилин
maxretry = 3 # Блокувати після 3 невдалих спроб
Перезапустіть Fail2ban, щоб застосувати зміни:
sudo systemctl restart fail2ban
Ваш сервер тепер базово підготовлений та захищений.
Встановлення ПЗ — покроково
Тепер, коли сервер підготовлено, приступимо до встановлення основних компонентів: MariaDB, PowerDNS Authoritative Server, Nginx та PHP-FPM, а також Poweradmin.
1. Встановлення MariaDB Server (версія 11.x)
MariaDB використовуватиметься як бекенд для PowerDNS та Poweradmin. Ubuntu 24.04 LTS постачається з MariaDB Server 11.x.
sudo apt install mariadb-server -y # Встановлює сервер MariaDB
Запустіть скрипт безпечного встановлення MariaDB:
sudo mysql_secure_installation # Скрипт для підвищення безпеки встановлення MariaDB
Дотримуйтесь інструкцій: встановіть пароль для користувача бази даних root, видаліть анонімних користувачів, забороніть віддалений вхід root та видаліть тестову базу даних.
Створіть базу даних та користувача для PowerDNS:
sudo mysql -u root -p # Підключитися до MariaDB від імені root
Введіть пароль, який ви встановили раніше. Всередині консолі MariaDB виконайте:
CREATE DATABASE powerdns; # Створює базу даних 'powerdns'
CREATE USER 'pdns_user'@'localhost' IDENTIFIED BY 'YOUR_STRONG_PASSWORD'; # Створює користувача 'pdns_user'
GRANT ALL PRIVILEGES ON powerdns. TO 'pdns_user'@'localhost'; # Надає всі привілеї на базу даних 'powerdns' користувачу 'pdns_user'
FLUSH PRIVILEGES; # Оновлює привілеї
EXIT; # Вихід з консолі MariaDB
Замініть YOUR_STRONG_PASSWORD на надійний пароль.
2. Встановлення PowerDNS Authoritative Server (версія ~4.8-4.9)
Встановимо PowerDNS та необхідні залежності для бекенду MariaDB.
sudo apt install pdns-server pdns-backend-mysql -y # Встановлює PowerDNS Authoritative Server та бекенд для MySQL/MariaDB
Імпортуйте схему бази даних PowerDNS. Схема знаходиться в документації PowerDNS або в пакеті.
sudo mysql -u pdns_user -p powerdns < /usr/share/doc/pdns-backend-mysql/schema.mysql.sql # Імпортує схему бази даних PowerDNS
Введіть пароль для pdns_user.
3. Конфігурація PowerDNS
Відредагуйте основний конфігураційний файл PowerDNS /etc/powerdns/pdns.conf.
sudo nano /etc/powerdns/pdns.conf # Відкриває конфігураційний файл PowerDNS
Знайдіть або додайте наступні рядки, переконавшись, що вони відповідають вашим налаштуванням:
# /etc/powerdns/pdns.conf
launch=gmysql
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=pdns_user
gmysql-password=YOUR_STRONG_PASSWORD
default-soa-name=ns1.yourdomain.com # Замініть на ім'я вашого NS-сервера
allow-recursion=0.0.0.0/0 # Або обмежте до конкретних IP, якщо не бажаєте рекурсії
allow-axfr-ips=127.0.0.1 # IP-адреси, яким дозволено AXFR (передача зони)
setuid=pdns
setgid=pdns
log-level=4
daemon=yes
local-address=ВАШ_IP_АДРЕС_VPS # IP-адреса, на якій PowerDNS слухатиме запити
Замініть YOUR_STRONG_PASSWORD на пароль користувача бази даних PowerDNS, а ns1.yourdomain.com та ВАШ_IP_АДРЕС_VPS на свої значення.
sudo systemctl enable pdns # Вмикає автозапуск PowerDNS при старті системи
sudo systemctl start pdns # Запускає сервіс PowerDNS
sudo systemctl status pdns # Перевіряє статус PowerDNS
4. Встановлення Nginx та PHP-FPM (версії ~1.28 та ~8.3)
Nginx буде веб-сервером для Poweradmin, а PHP-FPM оброблятиме PHP-скрипти.
sudo apt install nginx php8.3-fpm php8.3-mysql php8.3-gd php8.3-curl php8.3-xml php8.3-mbstring php8.3-intl -y # Встановлює Nginx, PHP-FPM та необхідні PHP-модулі
sudo systemctl enable nginx php8.3-fpm # Вмикає автозапуск Nginx та PHP-FPM
sudo systemctl start nginx php8.3-fpm # Запускає сервіси Nginx та PHP-FPM
sudo systemctl status nginx php8.3-fpm # Перевіряє статус сервісів
5. Встановлення Poweradmin (версія ~3.0)
Завантажимо Poweradmin з офіційного репозиторію GitHub. На 2026 рік орієнтуватимемося на стабільний реліз 3.0.
cd /var/www/ # Переходимо до директорії для веб-сайтів
sudo git clone https://github.com/PowerDNS/poweradmin.git html # Клонуємо репозиторій Poweradmin у теку 'html'
sudo chown -R www-data:www-data /var/www/html # Встановлюємо власника для файлів Poweradmin
sudo find /var/www/html -type d -exec chmod 755 {} \; # Встановлюємо права на директорії
sudo find /var/www/html -type f -exec chmod 644 {} \; # Встановлюємо права на файли
Перейдіть до директорії Poweradmin та скопіюйте файл конфігурації:
cd /var/www/html
sudo cp config-dist.inc.php config.inc.php # Копіює шаблон конфігурації
Тепер потрібно відредагувати config.inc.php. Вкажіть дані для підключення до бази даних, які ми створили раніше:
sudo nano config.inc.php # Відкриває конфігураційний файл Poweradmin
Знайдіть секції, що стосуються бази даних, та змініть їх:
// config.inc.php (фрагмент)
$db_host = 'localhost';
$db_user = 'pdns_user';
$db_pass = 'YOUR_STRONG_PASSWORD'; // Пароль користувача PowerDNS у MariaDB
$db_name = 'powerdns';
$db_type = 'mysql'; // Або 'pgsql' для PostgreSQL
Вкажіть також домени для NS-серверів:
// config.inc.php (фрагмент)
$primary_ns = 'ns1.yourdomain.com'; // Замініть на ім'я вашого першого NS
$secondary_ns = 'ns2.yourdomain.com'; // Замініть на ім'я вашого другого NS (якщо є)
Створіть користувача-адміністратора Poweradmin. Перейдіть у браузері за адресою http://ВАШ_IP_АДРЕС_VPS/install/. Дотримуйтесь інструкцій майстра встановлення: створіть адміністратора, видаліть директорію install.
sudo rm -rf /var/www/html/install # Видаляє директорію встановлення після завершення
Тепер Poweradmin готовий до використання.