![]()
Gérer des zones DNS à la main dans les tables de PowerDNS ou avec pdnsutil
devient vite pénible dès qu'on dépasse quelques enregistrements. Ce guide
déploie Poweradmin 4.2, une interface web activement maintenue pour
PowerDNS, avec une stack Docker complète
(base de données, serveur DNS, interface). Vous allez créer une zone, y ajouter
des enregistrements depuis le navigateur, et vérifier la résolution avec
dig. Public visé : administrateurs réseau et systèmes à l'aise avec Docker
Compose.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Déployer Poweradmin, PowerDNS et MariaDB avec Docker Compose
- Initialiser les schémas de base de données proprement
- Créer une zone DNS et ses enregistrements depuis l'interface
- Vérifier que le serveur résout réellement les noms
- Sécuriser l'accès avant toute mise en production
Qu'est-ce que Poweradmin ?
Section intitulée « Qu'est-ce que Poweradmin ? »Poweradmin est une interface web écrite en PHP pour administrer un serveur PowerDNS. Elle gère les zones directes et inverses, les enregistrements, les utilisateurs avec des permissions fines, les modèles de zone, DNSSEC et l'enregistrement en masse. L'outil s'adresse à ceux qui veulent déléguer la gestion DNS sans donner un accès direct à la base ou au serveur.
Son intérêt principal aujourd'hui est d'être activement maintenu. Le projet historique PowerDNS-Admin est passé en mode legacy, sans nouvelle version depuis début 2024. Poweradmin, lui, publie des versions régulières et suit les évolutions de PowerDNS. Pour une nouvelle installation, c'est l'alternative raisonnable, comme l'explique la page sur PowerDNS-Admin.
Prérequis
Section intitulée « Prérequis »- Un hôte Linux avec Docker Engine et le plugin Compose, voir installer Docker
- La commande
digpour tester la résolution (paquetdnsutilsoubind-utils) - Des notions de DNS (zones, enregistrements A, NS, SOA)
Comprendre l'architecture
Section intitulée « Comprendre l'architecture »Poweradmin ne remplace pas PowerDNS, il le pilote. Trois composants coopèrent, et bien saisir leur rôle évite les erreurs de configuration.
| Composant | Rôle |
|---|---|
| MariaDB | Stocke les zones PowerDNS et les comptes Poweradmin |
| PowerDNS | Le serveur DNS qui répond aux requêtes, lit ses zones dans MariaDB |
| Poweradmin | L'interface web ; écrit les zones dans la même base que PowerDNS |
Poweradmin et PowerDNS partagent la base des zones : ce que vous créez dans l'interface est immédiatement lisible par le serveur DNS. Poweradmin garde en plus sa propre base pour les utilisateurs et la configuration.
Déployer la stack
Section intitulée « Déployer la stack »PowerDNS et Poweradmin ne créent pas leurs schémas de base tout seuls. La préparation consiste donc à charger deux schémas SQL au premier démarrage de MariaDB, via son mécanisme d'initialisation.
-
Créer l'arborescence du projet.
Fenêtre de terminal mkdir -p poweradmin/initdb poweradmin/conf && cd poweradmin -
Récupérer les deux schémas depuis les dépôts officiels, dans le dossier
initdb/. MariaDB exécute ces fichiers dans l'ordre alphabétique.Fenêtre de terminal # schema PowerDNS (zones), prefixe pour cibler la bonne baseecho "USE pdns;" > initdb/02-pdns.sqlcurl -fsSL https://raw.githubusercontent.com/PowerDNS/pdns/rel/auth-4.9.x/modules/gmysqlbackend/schema.mysql.sql >> initdb/02-pdns.sql# schema Poweradmin (utilisateurs, configuration)echo "USE poweradmin;" > initdb/03-poweradmin.sqlcurl -fsSL https://raw.githubusercontent.com/poweradmin/poweradmin/v4.2.4/sql/poweradmin-mysql-db-structure.sql >> initdb/03-poweradmin.sql -
Créer le script d'initialisation
initdb/01-init.sqlqui prépare les deux bases et l'utilisateur commun.CREATE DATABASE IF NOT EXISTS pdns;CREATE DATABASE IF NOT EXISTS poweradmin;CREATE USER IF NOT EXISTS 'padmin'@'%' IDENTIFIED BY 'padminpass';GRANT ALL PRIVILEGES ON pdns.* TO 'padmin'@'%';GRANT ALL PRIVILEGES ON poweradmin.* TO 'padmin'@'%';FLUSH PRIVILEGES; -
Écrire la configuration PowerDNS
conf/pdns.confpour le backend MySQL. Elle remplace la configuration SQLite par défaut de l'image.launch=gmysqlgmysql-host=dbgmysql-user=padmingmysql-password=padminpassgmysql-dbname=pdnslocal-address=0.0.0.0include-dir=/etc/powerdns/pdns.d -
Créer le
compose.yaml. Les ports sont publiés sur la loopback et le DNS sur5300pour ne pas entrer en conflit avec un résolveur local.services:db:image: mariadb@sha256:a794d9eb009e20de605858a11f32f63b4075cbd197c650436f0e3b457e4caed7 # 11.4environment:MARIADB_ROOT_PASSWORD: rootpassvolumes:- ./initdb:/docker-entrypoint-initdb.d:ro- db-data:/var/lib/mysqlnetworks: [dnsnet]restart: unless-stoppedpdns:image: powerdns/pdns-auth-49@sha256:272fe174990ce108461ed3e953b43691509cdcfb138d8c7c61f64d7a61b8e6addepends_on: [db]environment:PDNS_AUTH_API_KEY: labsecretkeyvolumes:- ./conf/pdns.conf:/etc/powerdns/pdns.conf:roports:- "127.0.0.1:5300:53/udp"- "127.0.0.1:5300:53/tcp"networks: [dnsnet]restart: unless-stoppedpoweradmin:image: poweradmin/poweradmin@sha256:6360d2dbbf58d40e479ba352dc986653202eee02497f57846c5967e367c936ab # 4.2.5depends_on: [db]environment:DB_TYPE: mysqlDB_HOST: dbDB_USER: padminDB_PASS: padminpassDB_NAME: poweradmin # base des comptes PoweradminPA_PDNS_DB_NAME: pdns # base partagee des zonesPA_PDNS_API_URL: http://pdns:8081PA_PDNS_API_KEY: labsecretkeyPA_CREATE_ADMIN: "1" # cree l'admin, mot de passe genere dans les logsports:- "127.0.0.1:8091:80"networks: [dnsnet]restart: unless-stoppednetworks:dnsnet: {}volumes:db-data: {} -
Démarrer la stack.
Fenêtre de terminal docker compose up -d
Première connexion
Section intitulée « Première connexion »Poweradmin ne crée aucun compte administrateur par défaut, un bon réflexe de
sécurité. La variable PA_CREATE_ADMIN du compose demande la création d'un
compte admin dont le mot de passe est généré aléatoirement et affiché dans
les journaux du conteneur.
docker compose logs poweradmin | grep -A1 "Admin user"Admin user 'admin' created successfullyUsername: adminPassword: bFS3u3EgXGLIytaGOuvrez http://127.0.0.1:8091 et connectez-vous avec ce couple. Un sélecteur de langue est disponible sur la page de connexion.

L'accueil présente les fonctions sous forme de cartes : gestion des zones directes et inverses, modèles, utilisateurs, permissions.

Créer une zone DNS
Section intitulée « Créer une zone DNS »Une zone regroupe les enregistrements d'un domaine. Depuis le tableau de bord, la carte Master Zone ouvre le formulaire de création. Renseignez le nom de domaine, choisissez le type et validez.
-
Ouvrir le formulaire via Zones puis Add master zone.
-
Saisir le nom de la zone, par exemple
lab.example, et laisser le typeNATIVEpour un serveur unique. Le typeMASTERsert quand des serveurs secondaires transfèrent la zone. -
Valider. Poweradmin crée la zone avec ses enregistrements SOA et NS initiaux. Elle apparaît dans la liste des zones directes.

Gérer les enregistrements
Section intitulée « Gérer les enregistrements »Cliquez sur l'icône d'édition d'une zone pour ouvrir sa table d'enregistrements. Chaque ligne est modifiable directement : nom, type, contenu, priorité et TTL. Le bouton Add record ajoute une entrée.

Pour publier un site sur www.lab.example, ajoutez un enregistrement de type
A pointant vers son adresse IP, puis enregistrez. Poweradmin écrit
directement dans la base partagée avec PowerDNS, la modification est donc prise
en compte sans étape supplémentaire. Les boutons Bulk add et Export
facilitent la gestion de zones volumineuses.
Vérifier la résolution
Section intitulée « Vérifier la résolution »L'interface affiche les enregistrements, mais la vraie preuve est que le serveur
répond. Interrogez directement PowerDNS avec dig, sur le port 5300 publié
par le compose.
dig @127.0.0.1 -p 5300 www.lab.example A +short192.0.2.10Cette réponse confirme la chaîne complète : Poweradmin a écrit la zone dans
MariaDB, et PowerDNS la sert. Si dig ne renvoie rien alors que
l'enregistrement existe dans l'interface, videz le cache du serveur :
docker compose exec pdns pdns_control purgeSécuriser Poweradmin
Section intitulée « Sécuriser Poweradmin »L'interface donne un contrôle total sur votre DNS. Quelques précautions s'imposent avant de l'exposer.
- Garder le port en loopback (
127.0.0.1:8091) et placer un reverse proxy avec HTTPS et authentification pour tout accès distant. - Changer le mot de passe admin généré et créer des comptes nommés avec des permissions restreintes plutôt que de partager le compte administrateur.
- Protéger la clé d'API PowerDNS (
PDNS_AUTH_API_KEY) : elle autorise la modification de toutes les zones. Ne jamais publier le port8081de l'API sur un réseau non maîtrisé. - Utiliser des mots de passe forts pour MariaDB et un utilisateur dédié,
jamais
root, ce que fait déjà ce compose.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| Le conteneur poweradmin redémarre en boucle | Schéma de base non chargé | Vérifier que initdb/03-poweradmin.sql existe avant le premier démarrage |
| PowerDNS refuse de démarrer | Réglage gsqlite3 par défaut résiduel | Vérifier que conf/pdns.conf est bien monté et en launch=gmysql |
dig ne résout pas une zone existante | Cache du serveur | docker compose exec pdns pdns_control purge |
| Mot de passe admin introuvable | Logs déjà tournés | Recréer via PA_CREATE_ADMIN sur une base vierge, ou réinitialiser en base |
| Modifications de schéma ignorées | Volume MariaDB déjà initialisé | Les scripts initdb ne s'exécutent qu'à la première création du volume |
À retenir
Section intitulée « À retenir »- Poweradmin est l'interface web activement maintenue pour PowerDNS, à préférer à PowerDNS-Admin devenu legacy.
- La stack repose sur trois composants : MariaDB, PowerDNS et Poweradmin, les deux derniers partageant la base des zones.
- Les schémas de base doivent être chargés au premier démarrage ; ils ne se créent pas automatiquement.
- Aucun admin par défaut :
PA_CREATE_ADMINgénère un mot de passe visible dans les logs, à changer aussitôt. - Toujours vérifier la résolution avec
dig, la seule preuve que le serveur répond vraiment. - Garder le port en loopback derrière un reverse proxy authentifié.
Prochaines étapes
Section intitulée « Prochaines étapes »Plus d'infos
Section intitulée « Plus d'infos »- Site officiel de Poweradmin : documentation et configuration avancée.
- Dépôt GitHub : code source, releases et guide Docker.