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