Gérez vos zones DNS avec PowerDNS
Mise à jour :
Si vous cherchez un serveur DNS puissant, flexible et facile à intégrer dans une infrastructure moderne, alors PowerDNS est fait pour vous. Ce logiciel open source offre des performances élevées, une gestion simple des zones DNS, et possédant un provider terraform. À mon avis, c’est une solution incontournable pour quiconque veut gérer son propre DNS tout en bénéficiant d’une grande fiabilité.
Historique de PowerDNS
L’histoire de PowerDNS débute au début des années 2000, à une époque où les besoins en serveurs DNS évoluaient rapidement. Créé initialement par la société néerlandaise PowerDNS.COM BV, ce projet avait pour ambition de proposer une alternative moderne aux solutions classiques comme BIND, qui dominaient le marché. Contrairement à ces dernières, PowerDNS s’est démarqué dès ses débuts par son approche modulaire et ses performances optimisées.
L’un des tournants majeurs du projet a été son adoption par la communauté open source. Ce choix a permis à PowerDNS de bénéficier d’une large contribution extérieure, enrichissant le logiciel en fonctionnalités tout en assurant une grande stabilité. Il a également permis de mieux répondre aux besoins diversifiés des utilisateurs, qu’ils soient des petites entreprises ou des grandes infrastructures.
Aujourd’hui, PowerDNS se décline principalement en deux modules complémentaires :
- PowerDNS Authoritative Server : Conçu pour gérer les zones DNS et fournir des réponses aux requêtes directement liées à ces zones.
- PowerDNS Recursor : Un serveur DNS récursif hautement performant, conçu pour résoudre les requêtes en interrogeant d’autres serveurs DNS sur Internet.
Ces deux composants, bien que distincts, partagent une philosophie commune : offrir une solution robuste, facile à configurer et capable de gérer de fortes charges. Grâce à ses mises à jour régulières et à l’implication de sa communauté, PowerDNS continue de figurer parmi les solutions DNS les plus respectées du marché.
Les fonctionnalités clés de PowerDNS
PowerDNS se distingue par de nombreuses fonctionnalités qui en font un serveur DNS puissant et polyvalent. Voici une liste des points les plus intéressants :
- API REST : Intégration native d’une API pour automatiser la gestion des zones DNS.
- Performance : Optimisé pour gérer un grand nombre de requêtes DNS par seconde.
- DNSSEC : Prise en charge native pour sécuriser vos enregistrements DNS.
- Flexibilité des formats de configuration : Compatible avec des fichiers de configuration traditionnels et des outils modernes d’automatisation.
- Compatibilité multiplateforme : Fonctionne sur la plupart des systèmes Linux et peut s’intégrer dans des environnements containerisés comme avec Docker.
- Surveillance intégrée : Intégration facile avec des outils comme Prometheus et Grafana pour le monitoring.
- Journalisation avancée : Des logs détaillés pour le dépannage et l’analyse des performances.
- Haute disponibilité : Supporte la réplication des zones DNS pour une redondance et une fiabilité accrues.
Ces fonctionnalités permettent à PowerDNS de s’adapter aussi bien à de petites infrastructures qu’à des environnements complexes et hautement disponibles.
Installation de PowerDNS
L’installation de PowerDNS est relativement simple et peut être effectuée rapidement sur un système Linux. Voici les étapes principales pour installer PowerDNS sur une distribution Debian ou Ubuntu :
Avant tout, assurez-vous que votre système est à jour :
sudo apt update && sudo apt upgrade -y
Il faut desactiver le service systemd-resolved pour éviter les conflits avec PowerDNS :
sudo systemctl stop systemd-resolvedsudo systemctl disable systemd-resolved
Mettre à jour le fichier /etc/resolv.conf
pour qu’il pointe vers le serveur
DNS de votre choix :
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Installons mariadb pour stocker les données des zones DNS :
sudo apt install mariadb-server mysql-client -y
Créez une base de données et un utilisateur pour PowerDNS :
sudo mysql -u root -p
Le mot de passe par défaut est vide, appuyez simplement sur Entrée
.
CREATE DATABASE powerdns;CREATE USER 'powerdns'@'localhost' IDENTIFIED BY 'securepassword';GRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns'@'localhost';FLUSH PRIVILEGES;EXIT;
On va sécuriser la base de données :
sudo mariadb-secure-installation
Rentrez le mot de passe root de la base de données, puis répondez aux questions
suivantes en appuyant sur Entrée
.
On va créer la structure de la base de données pour PowerDNS :
sudo mysql -u powerdns -p
Entrez le mot de passe securepassword
. Copiez/collez le schéma de la base de
données :
CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(8) NOT NULL, notified_serial INT UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, options VARCHAR(64000) DEFAULT NULL, catalog VARCHAR(255) DEFAULT NULL, PRIMARY KEY (id)) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX name_index ON domains(name);CREATE INDEX catalog_idx ON domains(catalog);
CREATE TABLE records ( id BIGINT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id)) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX nametype_index ON records(name,type);CREATE INDEX domain_id ON records(domain_id);CREATE INDEX ordername ON records (ordername);
CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (ip, nameserver)) Engine=InnoDB CHARACTER SET 'latin1';
CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, comment TEXT CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (id)) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX comments_name_type_idx ON comments (name, type);CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id)) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, published BOOL DEFAULT 1, content TEXT, PRIMARY KEY(id)) Engine=InnoDB CHARACTER SET 'latin1';
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id)) Engine=InnoDB CHARACTER SET 'latin1';
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Installez PowerDNS et le backend MySQL :
sudo apt install pdns-server pdns-backend-mysql -y
Il faut éditer le fichier /etc/powerdns/pdns.conf
pour configurer le backend
MySQL :
sudo vi /etc/powerdns/pdns.conf
# Launch gmysql backendlaunch=gmysql# gmysql parametersgmysql-host=127.0.0.1gmysql-port=3306gmysql-dbname=powerdnsgmysql-user=powerdnsgmysql-password=securepasswordgmysql-dnssec=yes
Activez l’api REST en ajoutant les lignes suivantes :
api=yesapi-key=changeme
Une fois terminé ces éditions, redémarrer le service PowerDNS :
sudo systemctl restart pdns
Pour tester que PowerDNS fonctionne correctement, utilisez la commande dig
ou nslookup
:
dig @127.0.0.1 example.com
Cela interroge votre serveur local et vous permet de vérifier s’il répond aux requêtes. Vous devriez voir une réponse contenant les enregistrements DNS de votre domaine.
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> @127.0.0.1 example.com; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 22672;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 1232;; QUESTION SECTION:;example.com. IN A
;; Query time: 0 msec;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP);; WHEN: Sat Jan 25 12:21:43 UTC 2025;; MSG SIZE rcvd: 40
Conclusion
Nous venons de parcourir les bases pour comprendre, installer et configurer PowerDNS, un serveur DNS puissant et flexible adapté à tous types d’infrastructures. Avec ses nombreuses fonctionnalités comme le support natif de DNSSEC, son API REST et ses performances optimisées, PowerDNS est, à mon avis, une solution incontournable pour la gestion des noms de domaine.
Cependant, il est parfois fastidieux de gérer manuellement les zones et configurations, surtout dans des environnements complexes. C’est là qu’un outil comme PowerDNS-Admin entre en jeu. Ce tableau de bord web, spécialement conçu pour PowerDNS, simplifie grandement la gestion de vos zones DNS via une interface graphique intuitive.
Dans un prochain guide, nous verrons comment installer et configurer PowerDNS-Admin, pour vous permettre d’administrer votre serveur DNS avec encore plus de facilité et d’efficacité. Restez connecté, on continue bientôt l’aventure ! 😊