Чим 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 регулярно оновлюється, інакше гео-політики почнуть видавати застарілі регіони.