До основного вмісту

PowerDNS: зони в базі даних і керування через API

Домени · 29.09.2026

Чим PowerDNS відрізняється від файлових DNS-серверів

BIND 9 зберігає кожну зону в окремому текстовому файлі — подробиці в статті про авторитативний сервер на BIND 9. PowerDNS Authoritative Server влаштований інакше: зони і записи живуть у реляційній базі — MySQL, PostgreSQL чи SQLite. Це зручно, коли зон тисячі і керує ними не адміністратор руками, а панель хостингу чи білінг через SQL-запити або REST API.

Друга відмінність — вбудований HTTP API, який дозволяє створювати зони і записи програмно, без редагування файлів і без rndc reload.

Встановлення PowerDNS із бекендом MySQL

На Debian чи Ubuntu пакети ставляться так:

sudo apt update
sudo apt install pdns-server pdns-backend-mysql -y

Підключення до бази описується в /etc/powerdns/pdns.conf:

launch=gmysql
gmysql-host=localhost
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=CHANGE_ME

Схему таблиць створює готовий SQL-скрипт із пакета pdns-backend-mysql, після чого службу запускають командою systemctl restart pdns.

Створення зони через pdnsutil

Керувати зонами з командного рядка найзручніше утилітою pdnsutil:

pdnsutil create-zone example.com ns1.example.com
pdnsutil add-record example.com www A 3600 203.0.113.10
pdnsutil add-record example.com @ MX 3600 "10 mail.example.com."

Кожна команда одразу записує дані в базу — окремого перезавантаження зони не потрібно, PowerDNS читає актуальні дані під час наступного запиту.

Керування записами через REST API

Для автоматизації увімкніть вебсервер API в pdns.conf:

api=yes
api-key=CHANGE_ME
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081

Після перезапуску зону можна створити одним запитом:

curl -X POST http://127.0.0.1:8081/api/v1/servers/localhost/zones \
  -H "X-API-Key: CHANGE_ME" \
  -H "Content-Type: application/json" \
  -d '{"name":"example.com.","kind":"Native"}'

Такий підхід застосовують панелі керування хостингом, які створюють зону автоматично в момент замовлення домену, без ручного втручання адміністратора.

GeoIP-бекенд для гео-балансування

Модуль geoip дозволяє PowerDNS видавати різні IP-адреси залежно від країни чи континенту резолвера — це саме те завдання, яке розібрано в статті про Anycast і GeoDNS. Бекенд підключається другим рядком launch і вказівкою на базу GeoIP:

launch+=geoip
geoip-database-files=/usr/share/GeoIP/GeoLite2-City.mmdb

Далі правила «регіон → відповідь» описуються в окремому YAML-файлі зони geoip-бекенда, який PowerDNS читає під час старту служби.

Перевірка і моніторинг сервісу

Стан самої служби перевіряється через керувальний сокет:

pdns_control ping
dig @127.0.0.1 example.com A +short

Якщо відповіді немає, варто звіритися з журналом служби і перевірити права доступу до бази даних. Для зовнішньої перевірки опублікованої зони та її серійного номера підходять методи зі статті про dig, dnsviz і типові помилки. Окремо варто увімкнути DNSSEC-підпис зони командою pdnsutil secure-zone, якщо цього вимагає політика безпеки — загальні принципи описано в статті про налаштування DNSSEC.

Підсумок: чек-лист запуску PowerDNS

  • Схему бази даних створено, служба pdns підключена до MySQL і стартує без помилок у журналі.
  • Зони створюються через pdnsutil чи API, а не правкою SQL-таблиць вручну.
  • Доступ до API обмежено локальною адресою чи VPN, ключ api-key не зберігається у відкритому репозиторії.
  • База GeoIP регулярно оновлюється, інакше гео-політики почнуть видавати застарілі регіони.
← Назад до бази знань Поставити питання підтримці