Aller au contenu

Gérez vos zones DNS avec PowerDNS

Mise à jour :

PowerDNS

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 :

  1. PowerDNS Authoritative Server : Conçu pour gérer les zones DNS et fournir des réponses aux requêtes directement liées à ces zones.
  2. 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 :

Terminal window
sudo apt update && sudo apt upgrade -y

Il faut desactiver le service systemd-resolved pour éviter les conflits avec PowerDNS :

Terminal window
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Mettre à jour le fichier /etc/resolv.conf pour qu’il pointe vers le serveur DNS de votre choix :

Terminal window
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

Installons mariadb pour stocker les données des zones DNS :

Terminal window
sudo apt install mariadb-server mysql-client -y

Créez une base de données et un utilisateur pour PowerDNS :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
sudo apt install pdns-server pdns-backend-mysql -y

Il faut éditer le fichier /etc/powerdns/pdns.conf pour configurer le backend MySQL :

Terminal window
sudo vi /etc/powerdns/pdns.conf
# Launch gmysql backend
launch=gmysql
# gmysql parameters
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=securepassword
gmysql-dnssec=yes

Activez l’api REST en ajoutant les lignes suivantes :

api=yes
api-key=changeme

Une fois terminé ces éditions, redémarrer le service PowerDNS :

Terminal window
sudo systemctl restart pdns

Pour tester que PowerDNS fonctionne correctement, utilisez la commande dig ou nslookup :

Terminal window
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.

Terminal window
; <<>> 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 ! 😊