Le DNS, quand il tombe, tout vacille : messagerie muette, applications perdues, utilisateurs bloqués. Pour éviter ce silence numérique, un guide net et éprouvé s’impose ; Comment configurer serveur DNS Linux ouvre la voie, et la pratique conforte cette trajectoire : un DNS bien pensé devient une horloge, régulière, sûre, presque invisible.
Pourquoi bâtir son propre DNS change la donne pour une infra Linux ?
Un DNS interne bien conçu raccourcit les temps de résolution, stabilise les applications et redonne du contrôle sur la sécurité et l’observabilité. Il façonne un socle commun qui alimente authentification, messagerie, API et microservices sans fausse note.
Dans les environnements Linux où les conteneurs, les proxys et les réseaux overlay s’entrecroisent, déléguer entièrement le DNS à l’extérieur revient à confier la clé du tempo à un chef d’orchestre lointain. La latence s’étire, les caches s’échauffent, les outages deviennent contagieux. À l’inverse, un serveur faisant autorité pour les domaines internes, adossé à un résolveur local bien réglé, coupe court aux déboires : des TTL mesurés, des politiques de cache élégantes, des journaux précis au paquet près, et la liberté d’introduire des vues internes/externes sans exposer l’intime du réseau. L’expérience montre aussi que la gouvernance DNS discipline le reste : un enregistrement mal pensé retarde un déploiement, un TTL mal réglé rend une migration nerveuse. Reprendre la main, c’est réapprendre la précision.
Quel serveur DNS choisir : BIND, Unbound ou PowerDNS ?
BIND couvre l’autoritatif et le récursif avec une profondeur historique et des fonctionnalités étendues. Unbound offre un résolveur robuste et moderne. PowerDNS séduit par sa modularité et ses backends dynamiques.
Le choix ressemble à une cartographie des besoins plutôt qu’à une course au logo. BIND (named) règne sur l’autoritatif classique, gère DNSSEC de bout en bout, accepte les vues, s’intègre aux topologies anciennes comme aux clusters récents. Unbound brille comme récursif pur, rapide, sûr, épuré — idéal à déployer en bordure ou sur chaque nœud applicatif. PowerDNS, avec son serveur autoritatif et son recursor séparé, s’insère dans les architectures où la zone vit dans une base SQL, où l’API prime et où l’automatisation dicte la cadence. Dans des PME, un couple BIND (autoritatif) + Unbound (récursif) simplifie la vie. Dans des environnements DevOps, PowerDNS accélère la mise en place d’un DNS « as code ». Chaque outil a sa musique, l’important consiste à l’accorder au besoin réel.
| Serveur | Rôle | Points forts | Quand l’utiliser |
|---|---|---|---|
| BIND (named) | Autoritatif + récursif | Vues, DNSSEC complet, écosystème mature | Zones classiques, split-horizon, conformité stricte |
| Unbound | Récursif | Rapide, sûr par défaut, configuration concise | Résolveur local, caches en edge, renforcement DNSSEC |
| PowerDNS | Autoritatif + recursor séparés | Backends DB/API, extensible | Zones dynamiques, intégration CI/CD et inventaires |
Comment préparer l’hôte Linux et le réseau pour le DNS ?
Le serveur DNS respire par ses interfaces, sa pile réseau et ses horloges. Une base saine exige une IP stable, des ports dégagés, des temps synchronisés et une résolution locale bien ordonnée.
Sur Debian/Ubuntu, systemd-resolved occupe parfois le port 53 en local ; l’ignorer revient à chausser deux chefs pour un seul pupitre. Le service doit être désactivé ou reconfiguré si named ou Unbound prennent la main. L’adresse IP devient une ancre fixe, documentée, reversée correctement si nécessaire. La synchronisation NTP garde les signatures DNSSEC exactes. Les chemins de journaux et de chroot sont explicités pour contenir l’impact d’un incident. Enfin, la chaîne « résolveur local → forwarders/roots » se dessine sans ambiguïté afin d’éviter les boucles subtiles qui transforment la résolution en labyrinthe.
Paramétrer système et firewall sans étranglement
UDP/TCP 53 doivent être ouverts en entrée pour l’autoritatif, et sortants pour le récursif. Les limites de fichiers et de sockets méritent une hausse modeste.
Un firewall bien ajusté tranche net : pas de port orphelin, pas de silence autoritaire. Sur nftables/iptables, la règle priorise UDP pour la vitesse, tout en gardant TCP pour les réponses volumineuses (DNSSEC, ANY tronquées). Les limites système (nofile, memlock) évitent l’essoufflement sous charge, surtout avec de grands caches. L’activation de RRL (Response Rate Limiting) côté BIND étouffe l’amplification. Du côté kernel, net.core.rmem_default et net.core.rmem_max supportent des tampons réseau confortables lors de pointes.
| Service | Port/Proto | Direction | Remarques |
|---|---|---|---|
| DNS autoritatif | 53/UDP, 53/TCP | Entrant | TCP requis pour réponses > 512 octets et DNSSEC |
| DNS récursif | 53/UDP, 53/TCP | Sortant | Vers internet ou vers des forwarders contrôlés |
| RNDC (BIND) | 953/TCP | Local | Administration/Reload distant avec clé partagée |
Réseau, vues et zones internes : éviter la fuite d’information
Les vues DNS séparent l’interne de l’externe sans dupliquer l’infrastructure. Les réponses s’ajustent à l’origine de la requête.
Les topologies modernes imposent de montrer un visage différent selon l’angle de vue : l’extranet reçoit des IP publiques, l’intranet découvre des adresses privées et des enregistrements techniques. La mécanique des vues dans BIND orchestre ce ballet, à condition de classer proprement les ACL (bureaux, VPN, bastions) et d’aligner les TTL pour fluidifier les bascules. Une politique de nommage stable réduit les collisions ; au cœur, une zone racine interne — par exemple corp.lan — encadre le tout, tandis que les sous-zones (dev.corp.lan, prod.corp.lan) épousent les environnements. L’observabilité suit la même discipline : journaux par vue, métriques par source, pour des diagnostics sans brume.
Comment configurer une zone avec BIND pas à pas ?
Déclarer la zone dans named.conf, créer le fichier de zone avec un SOA propre, des NS autoritaires clairs et les enregistrements pivots, puis valider avec named-checkzone avant recharge.
La clarté commence par un répertoire dédié (par exemple /var/lib/bind/). La zone s’annonce dans named.conf.local, associée à son fichier. Le SOA respire : un serial en format date, des timers raisonnables, des NS qui répondent. Les enregistrements A/AAAA, MX, CNAME et TXT suivent une grammaire constante ; les FQDN finissent par un point pour éviter des concaténations sournoises. Les TTL se calent sur le rythme des changements : courts pour les frontaux en mouvement, plus longs pour la glue structurante. Chaque ajout passe sous le regard de named-checkzone, puis un reload propre via rndc. Cette routine brève épargne des pannes longues.
Fichiers clés et squelette minimal
Un trio suffit : named.conf (ou named.conf.local), options globales, et le fichier de zone. Un répertoire journalisé et des permissions strictes ferment la marche.
Un exemple condensé illustre l’essentiel :
zone "exemple.lan" IN {
type master;
file "/var/lib/bind/db.exemple.lan";
allow-update { none; };
allow-transfer { 192.0.2.10; }; // vers un esclave
};
; /var/lib/bind/db.exemple.lan
$TTL 300
@ IN SOA ns1.exemple.lan. dnsadmin.exemple.lan. (
2026031701 ; serial AAAAMMJJNN
3600 ; refresh
900 ; retry
1209600 ; expire
300 ) ; minimum
IN NS ns1.exemple.lan.
IN NS ns2.exemple.lan.
ns1 IN A 10.0.0.10
ns2 IN A 10.0.0.11
www IN A 10.0.1.20
mail IN A 10.0.1.30
@ IN MX 10 mail.exemple.lan.
@ IN TXT "v=spf1 mx -all"
Enregistrements indispensables et pièges discrets
SOA propre, NS cohérents, glue résolue, MX testés, TXT SPF lisible. Les CNAME ne pointent jamais vers d’autres CNAME pour éviter les labyrinthes.
L’usage recommande des alias sobres pour les services (www, api, ldap) et des cibles explicites. Les environnements penchant vers IPv6 doublent systématiquement par des AAAA afin d’éviter des chemins asymétriques. Les migrations gagnent à réduire temporairement le TTL des enregistrements critiques quelques heures avant le basculement, puis à remonter la valeur une fois l’eau redevenue calme. Les transferts AXFR/IXFR ne quittent jamais le périmètre de confiance et reposent sur TSIG. Enfin, le reverse PTR suit la marche : qui possède l’adresse maîtrise le reverse, objet souvent oublié, mais convoité par les filtres de messagerie.
Tester, valider et recharger sans trembler
named-checkconf et named-checkzone sécurisent la syntaxe avant tout reload. dig devient l’instrument de vérité.
Un contrôle minimal prévient l’absurde : une virgule de trop, un FQDN sans point final, un serial qui régresse, autant de grains qui dérèglent la machine. La séquence éprouvée s’écrit ainsi : vérification de la conf, vérification des zones, rechargement via rndc reload, consultation ciblée avec dig +trace et dig @serveur. Les journaux en facility daemon signalent l’alerte. Pour ancrer l’habitude, un petit script de pré-commit CI déclenche ces vérifications à chaque changement de zone ; l’erreur s’arrête à la porte du dépôt.
- Éditer la zone et incrémenter le serial (format date conseillé).
- Contrôler la syntaxe : named-checkzone exemple.lan db.exemple.lan.
- Recharger proprement : rndc reload exemple.lan.
- Valider au client : dig www.exemple.lan A +ttlunits.
- Observer la propagation et remettre les TTL de croisière.
Comment sécuriser, superviser et faire monter en charge ?
Le DNS, exposé par nature, exige un périmètre serré : chroot/AppArmor/SELinux, RRL, TSIG, DNSSEC, et une supervision bavarde mais lisible.
Le durcissement commence par un utilisateur dédié, des permissions rétrécies, un chroot qui coupe court aux escapades et un profil AppArmor ou SELinux qui encadre les accès. Les transferts se signent (TSIG), les mises à jour dynamiques se restreignent aux hôtes autorisés, les vues cloisonnent les sources. RRL brise l’amplification, tandis que les listes de récursion évitent de transformer un récursif en open resolver. Les journaux sont structurés ; l’export Prometheus ou des compteurs internes permettent d’observer QPS, taux de NXDOMAIN, latence, taille de cache et saturation TCP. Pour l’échelle, le pairage de plusieurs nœuds autoritatifs dissémine la charge, un anycast modeste offre de la proximité, et des caches locaux sur les bastions réduisent le bruit.
DNSSEC en pratique, sans s’emmêler
DNSSEC ajoute la vérifiabilité : des signatures signent les réponses, les résolveurs peuvent les valider et déjouer l’empoisonnement de cache.
Dans BIND, la génération de clés KSK/ZSK, la signature de zone et la publication des DS parent suivent un pas cadencé. Les clés vivent à part, les rollovers s’annoncent, et les TTL restent cohérents pour éviter l’ornière des résolutions bancales. Les résolveurs Unbound valident en amont avec une ancre de confiance à jour. Chaque étape se teste avec dig +dnssec et les drapeaux AD/DO. Les environnements qui ne supportent pas encore DNSSEC n’ont pas à subir une implémentation bâclée ; la qualité prime, et une fenêtre pilote sur une sous-zone rassure tout le monde.
Supervision et métriques qui éclairent vraiment
Une vue nette se compose de quelques indicateurs forts : latence médiane, QPS, taux de SERVFAIL/NXDOMAIN, hits de cache, taille mémoire, saturation TCP/UDP.
Les tableaux de bord gagnent en lisibilité quand ils racontent une histoire : une hausse de NXDOMAIN peut signaler une rupture applicative, une latence qui grimpe annonce un lien gonflé ou une dépendance externe souffrante. Couplée à des sondes actives (dig scénarisés) et à des tests synthétiques sur les enregistrements critiques, l’observabilité permet d’intervenir avant que les utilisateurs ne donnent l’alerte. Côté alerting, des seuils dynamiques, plutôt que des limites fixes, s’adaptent aux heures pleines et aux migrations planifiées.
Comment diagnostiquer les pannes sans perdre de temps ?
Observer le symptôme, interroger la chaîne du plus simple au plus profond, isoler le maillon. dig, named-check*, journaux, tcpdump et un soupçon de méthode suffisent.
Le dépannage reste une affaire de trajectoire claire. Un client ne résout pas ? Vérifier d’abord le chemin local (resolv.conf, systemd-resolved), puis le serveur désigné, ensuite la zone elle-même. Les erreurs de syntaxes crient rarement ; elles murmurent dans les journaux. Les TTL très longs mettent du temps à demander pardon, il faut s’armer de patience ou purger proprement les caches en testant via des résolveurs variés. L’empoisonnement se déjoue en validant DNSSEC côté client. Et quand tout paraît normal, tcpdump sur port 53 dévoile la vérité du paquet brut.
| Symptôme | Causes probables | Commande utile |
|---|---|---|
| NXDOMAIN inattendu | Serial non incrémenté, cache ancien, faute de frappe | dig @ns autoritatif +trace; rndc reload; named-checkzone |
| Temps de réponse long | Forwarder lent, MTU, DNSSEC mal signé | dig +dnssec +stats; tracepath; tcpdump -ni any port 53 |
| SERVFAIL en rafale | Chaîne DNSSEC brisée, heure système fausse | drill -S domaine; timedatectl status |
| Refus de transfert | ACL TSIG/allow-transfer incorrecte | rndc status; journal BIND en niveau query/security |
- Vérifier les bases : IP, port 53, service actif, journaux présents.
- Tester en ciblant le serveur autoritatif puis un résolveur externe.
- Comparer les réponses par vue/ACL pour déceler un split mal réglé.
- Contrôler les signatures et la validité des clés si DNSSEC est actif.
- Inspecter le réseau et les MTU lors de réponses tronquées ou TCP-only.
Et si l’automatisation devenait l’alliée du DNS ?
Décrire les zones en code, valider en CI, déployer par lots : l’automatisation transforme la prudence artisanale en routine fiable.
Les équipes avancées stockent les zones dans un dépôt Git, outillent un pipeline qui exécute named-checkconf, named-checkzone, signe les zones DNSSEC dans un espace isolé puis pousse en production via rndc reconfig ou API. Un inventaire unique alimente la génération des enregistrements pour éviter la dérive entre CMDB, Kubernetes et DNS. Les environnements PowerDNS s’en réjouissent avec leurs backends SQL et API HTTP, mais BIND n’est pas en reste grâce à des générateurs de templates et des hooks soignés. L’important n’est pas l’outil, c’est la promesse tenue : chaque changement est traçable, réversible, et régi par la même grille de contrôle.
Modèle de maturité et paliers réalistes
Trois paliers structurent l’ascension : stabilité, visibilité, puis agilité. Chacun ajoute une corde sans casser la précédente.
Le palier « stabilité » fige un BIND propre, un Unbound local, des sauvegardes, et des ACL claires. « Visibilité » introduit la métrique, les journaux en structure, des tests synthétiques et la revue régulière des TTL. « Agilité » bascule vers l’infra as code, l’API, les vues versionnées, et des déploiements atomiques. Ce modèle épargne la tentation de tout changer à la fois et permet à la culture interne d’apprivoiser le DNS plutôt que de le craindre.
Au terme du chemin, un serveur DNS Linux cesse d’être un point de fragilité pour devenir un métronome résolu. Le choix de l’outil se fait sans dogme, la préparation du terrain minore l’aléa, la configuration respire la clarté. La sécurité n’est pas une surcouche, mais une architecture, et la supervision ne raconte pas des chiffres : elle raconte la santé.
Les applications gagneront en aplomb, les déploiements en fluidité. Et lorsque le besoin d’échelle pointera, les briques déjà posées — vues, caches, signatures, pipelines — donneront de l’aisance. Ainsi le DNS, souvent invisible, deviendra ce qu’il aurait toujours dû être : un art discret, fiable, et prêt pour demain.