PowerDNS : transforme votre PC Linux en serveur DNS puissant

PowerDNS : transforme votre PC Linux en serveur DNS puissant

Apprenez à installer et configurer PowerDNS, un serveur DNS flexible, idéal pour gérer des domaines sur Internet ou des réseaux privés. Découvrez ses caractéristiques principales, ainsi que les étapes détaillées pour transformer votre PC en serveur DNS, assurant ainsi une gestion optimale et sécurisée de vos noms de domaines.

Un des services/protocoles les plus importants dans toute réseau de données est le DNS (Domain Name System). Comme son nom l’indique, le DNS traduit les noms en adresses IP et vice versa. Aujourd’hui, nous allons vous montrer comment installer et configurer le PowerDNS.

PowerDNS transforme votre PC Linux en serveur DNS puissant

Le PowerDNS est un logiciel serveur de DNS qui peut être utilisé pour gérer et résoudre des domaines sur Internet ou dans des réseaux privés. C’est une alternative populaire à des serveurs comme BIND, offrant plus de flexibilité et un support pour des bases de données telles que MariaDB, PostgreSQL et SQLite.

Principales caractéristiques du PowerDNS

  • Modularité
    • Peut utiliser différents backends comme MySQL, PostgreSQL, LDAP, etc. pour stocker des enregistrements DNS.
  • Efficiencen et scalabilité
    • Supporte le multithreading et peut gérer un fort volume de trafic.
  • Sécurité
    • Inclut des fonctionnalités comme DNSSEC, qui protège contre les attaques de cache poisoning.
  • Interface d’administration
    • Peut être géré via PowerDNS Admin, une interface graphique.
  • Deux modes de fonctionnement
    • Peut être configuré comme un serveur DNS autoritatif ou comme un serveur récursif pour résoudre des requêtes.

Composants principaux du PowerDNS

  • PowerDNS Authoritative Server – Répond aux requêtes DNS pour des domaines spécifiques.
  • PowerDNS Recursor – Résout des noms de domaine en consultant d’autres serveurs DNS.
Resource Records utilisés dans les zones DNS

Toutes les informations associées à un domaine DNS sont enregistrées dans les fichiers de zones via des resource records. Ces enregistrements permettent de définir un type de pointeur vers des adresses IP, des noms, etc. Par exemple, pour créer un enregistrement DNS relatif à un serveur de messagerie, nous utilisons le resource record MX (Mail Exchanger).

Types de resource records les plus importants :

  • A – Adresse : Association d’un nom à une adresse (mappage direct)
  • AAAA – Adresse IPv6 ; Association d’un nom à une adresse IPv6
  • NS (NameServer) ; Indique le nom d’un serveur DNS du domaine ou sous-domaine ;
  • CNAME – (Canonical NAME) ; un alias pour un hôte ;
  • MX – (Mail eXchanger) ; Définition des serveurs de courrier électronique du domaine ou sous-domaine ;
  • PTR – (PoinTeR) ; Association d’une adresse à un nom (reverse DNS)
  • SOA – (Start Of Authority) ; Identification des en-têtes de zones
  • SRV – (SeRVice) ; permet de définir des services disponibles dans un domaine
  • TXT – Définition d’informations textuelles sur le domaine

Comment transformer un PC en serveur DNS avec PowerDNS ?

Installation de PowerDNS

Lorsqu’il s’agit de services DNS pour Linux, les noms les plus populaires sont Bind9 ou djbdns. Pour aujourd’hui, notre suggestion se tourne vers PowerDNS car il s’agit d’un service léger et riche en fonctionnalités. Pour installer PowerDNS sur RockyLinux, commencez par installer un système de gestion de base de données.

Étape 1 : Installer MariaDB (ou MySQL)

sudo dnf install -y mariadb-server mariadb
sudo systemctl enable --now mariadb

Maintenant, exécutez l’assistant de configuration sécurisée :

sudo mysql_secure_installation

Étape 2 : Créer une base de données et un utilisateur

Accédez à MariaDB

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

CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'pdns'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT;

Ensuite, téléchargez le schéma SQL pour créer les tables :

sudo dnf install -y wget
wget https://raw.githubusercontent.com/PowerDNS/pdns/master/modules/gsql/backend-schema.mysql.sql
mysql -u pdns -p powerdns < backend-schema.mysql.sql

Étape 3 : Installer PowerDNS

Dans cette étape, nous allons installer PowerDNS et le backend MySQL

sudo dnf install -y epel-release
sudo dnf install -y pdns pdns-backend-mysql

Étape 4 : Configurer PowerDNS

Éditez le fichier de configuration

sudo nano /etc/pdns/pdns.conf

Ajoutez ou modifiez les lignes suivantes :

launch=gmysql
gmysql-host=127.0.0.1
gmysql-dbname=powerdns
gmysql-user=pdns
gmysql-password=password

Enregistrez et quittez (CTRL+X, Y, Entrée).
Redémarrez le service :

sudo systemctl enable --now pdns
sudo systemctl restart pdns

Étape 5 : Configurer un résolveur

Avant de définir notre zone dans le DNS, il est nécessaire d’indiquer quel serveur de DNS va résoudre les noms en dehors de notre domaine. Pour cet exemple, nous allons utiliser le serveur de Google (8.8.8.8). Cette information est configurée dans le fichier /etc/powerdns/pdns.conf, que vous pouvez modifier avec la commande suivante :

sudo sed -i 's/# recursor=/recursor=8.8.8.8/g' /etc/powerdns/pdns.conf

Après cette configuration, redémarrez le service pdns et installez dnsutils

sudo service pdns restart
sudo apt-get install dnsutils

Une fois le service redémarré et dnsutils installé, vous pouvez effectuer un test en utilisant, par exemple, la commande :

nslookup NETCOST.com localhost

1743705858 593 PowerDNS transforme votre PC Linux en serveur DNS puissant

Configurer une ZONE dans PowerDNS

Comme mentionné, toutes les informations associées à un domaine DNS sont enregistrées dans les fichiers de zones. Ouvrons le fichier /etc/powerdns/bindbackend.conf et définissons la zone pour notre domaine DNS interne. Pour ce tutoriel, nous allons considérer que le domaine DNS est NETCOST.com.

zone "NETCOST.com" {
        type master;
        file "/etc/powerdns/bind/NETCOST.com.zone";
        allow-update { none; };
};

Ensuite, créons le fichier /etc/powerdns/bind/NETCOST.com.zone où nous allons placer les informations de notre zone. Pour cela, commençons par créer le répertoire /etc/powerdns/bind afin d’organiser le service.

sudo mkdir /etc/powerdns/bind

Ensuite, créons et éditons le fichier /etc/powerdns/bind/NETCOST.com.zone et ajoutons-y les informations suivantes :

Note : Notez que l’adresse 192.168.1.97 correspond à mon serveur. Vous devez la remplacer par l’IP attribuée à votre machine.

$ORIGIN NETCOST.com     ; base for unqualified names
$TTL 1h                 ; default time-to-live
@                       IN      SOA ns.NETCOST.com hostmaster.NETCOST.com (
                                1; serial
                                1d; refresh
                                2h; retry
                                4w; expire
                                1h; minimum time-to-live
                        )
                        IN      NS      ns
                        IN      A       192.168.1.97
ns                      IN      A       192.168.1.97

Et voilà. Notre serveur DNS est installé, configuré et prêt à être utilisé.

Ajouter de nouveaux enregistrements

Étant donné que ce service fonctionnera sur le réseau local, nous pouvons attribuer un nom à tous les appareils de ce réseau. Par exemple, si nous voulons donner le nom gwmeo au routeur ayant l’adresse 192.168.1.254, il suffit d’ajouter la ligne suivante au fichier précédent :

Si l’utilisateur souhaite que cet appareil ait un nom alternatif (CNAME), il peut le configurer ainsi :

gwmeo               IN      A       192.168.1.254
router              IN      CNAME   gwmeo

Avec les informations précédentes, tout appareil configuré avec le serveur DNS du Raspberry Pi pourra accéder au routeur en utilisant le nom gwmeo ou router.

dns

À la fin de la configuration, n’oubliez pas de redémarrer le service pdns.

À chaque fois que vous souhaitez ajouter de nouvelles machines, il suffit d’ajouter ces informations au fichier /etc/powerdns/bind/NETCOST.com.zone.