Vérificateur de fichier de zone
Vérifier les fichiers de zone pour les erreurs de syntaxe et les doublons
Zone File Content
Lint Results
Paste a BIND zone file to validate
Le linter de fichiers de zone valide la syntaxe des fichiers de zone BIND et detecte les problemes courants de configuration DNS avant le deploiement. Collez le contenu de votre fichier de zone et l'outil execute des passes de validation syntaxique, semantique et structurelle, signalant les erreurs avec les numeros de ligne et des recommandations de correction specifiques. Contrairement aux messages cryptiques que BIND produit lorsqu'il refuse de charger une zone, ce linter fournit des retours clairs et exploitables.
Comprendre la validation de fichiers de zone
Les fichiers de zone DNS sont trompeusement simples. Ils ressemblent a des fichiers texte directs avec des enregistrements listes un par ligne, mais ils contiennent un nombre surprenant de facons d'introduire des erreurs qui causent des pannes. Un point final manquant sur une cible externe cree silencieusement un hostname absurde. Un CNAME place a l'apex de la zone ou a cote d'autres types d'enregistrements viole la specification DNS et cause un comportement imprevisible du resolveur. Les enregistrements en double gaspillent de l'espace et perturbent les audits. Une adresse IP invalide dans un enregistrement A produit une zone qui se charge avec succes mais retourne des donnees erronees aux clients.
Le retour standard que vous obtenez de BIND lorsqu'un fichier de zone comporte des erreurs est souvent inutile. Des messages comme « zone example.com/IN: loading from master file failed: bad owner name » ne vous indiquent pas quelle ligne est fautive ni ce qui est specifiquement incorrect. Vous finissez par faire une recherche binaire dans le fichier, commentant des sections jusqu'a ce que l'erreur disparaisse. C'est lent, frustrant et completement inutile si vous validez le fichier avant de tenter de le charger.
Ce linter effectue trois passes sur votre fichier de zone. La passe syntaxique verifie chaque ligne pour un formatage correct : nombre de champs adequat, formats de valeurs valides, parentheses equilibrees et syntaxe de directives appropriee. La passe semantique verifie que les valeurs ont un sens : les adresses IP sont valides, les hostnames suivent les regles RFC, les TTL sont dans des plages raisonnables et les cibles sont correctement qualifiees. La passe structurelle examine la zone dans son ensemble : les enregistrements SOA et NS requis sont presents, les conflits CNAME sont identifies, les doublons sont signales et les cibles orphelines sont detectees. Chaque probleme est signale avec son numero de ligne, son niveau de severite et une description specifique de ce qui ne va pas et comment le corriger.
Comment valider un fichier de zone DNS
- Collez le contenu de votre fichier de zone BIND dans le champ de saisie
- Le linter execute des passes de validation syntaxique, semantique et structurelle
- Consultez la liste des erreurs, avertissements et messages informatifs avec les numeros de ligne
- Corrigez les problemes signales et revalidez jusqu'a ce que le fichier de zone passe sans erreur
Erreurs courantes detectees dans les fichiers de zone
| Erreur | Exemple | Severite |
|---|---|---|
| Enregistrement SOA manquant | La zone n'a pas de SOA a l'apex | Erreur |
| Enregistrements NS manquants | L'apex de la zone n'a pas d'enregistrements NS | Erreur |
| CNAME a l'apex de la zone | @ IN CNAME other.example.com. | Erreur |
| CNAME coexistant avec d'autres types | www a a la fois un CNAME et un enregistrement A | Erreur |
| Point final manquant sur un FQDN | www IN CNAME target.other.com | Avertissement |
| Enregistrements en double | Deux enregistrements A identiques pour www | Avertissement |
| TTL deraisonnable | TTL de 0 ou 31536001 (>1 an) | Avertissement |
| Parentheses desequilibrees | Enregistrement SOA avec ) manquante | Erreur |
| IP invalide dans un enregistrement A | www IN A 999.1.2.3 | Erreur |
| Type d'enregistrement inconnu | www IN AAAB 2001:db8::1 | Erreur |
Exemple de validation de fichier de zone
Fichier de zone en entree
$TTL 3600
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; serial
3600 ; refresh
900 ; retry
604800 ; expire
86400 ) ; minimum
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN CNAME www.example.com.
www IN A 203.0.113.10
www IN A 203.0.113.10
mail IN A 203.0.113.20
smtp IN CNAME mail
smtp IN MX 10 mail
api IN A 192.168.1.500
Sortie du linter
Line 10: ERROR - CNAME at zone apex (@) conflicts with SOA and NS records
Line 12: WARNING - Duplicate record: www IN A 203.0.113.10
Line 15: ERROR - CNAME and MX records cannot coexist for name "smtp"
Line 16: ERROR - Invalid IPv4 address in A record: 192.168.1.500 (octet > 255)
Quand utiliser le linter de fichiers de zone
- Avant de deployer des modifications de zone -- detecter les erreurs qui feraient que BIND rejette la zone ou serve des reponses incorrectes
- Apres l'edition manuelle de fichiers de zone -- les modifications manuelles introduisent frequemment des fautes de frappe, des points manquants ou des erreurs de syntaxe
- Validation de zones generees par script -- les scripts de generation automatique de zones peuvent produire des sorties subtilement invalides
- Lors de migrations DNS -- les fichiers de zone exportes d'une plateforme DNS peuvent necessiter des ajustements syntaxiques pour une autre
- Revue de code pour les changements d'infrastructure -- inclure la validation des fichiers de zone dans votre checklist de revue pour les pull requests DNS
- Formation et apprentissage -- comprendre pourquoi certaines constructions de fichiers de zone sont invalides approfondit les connaissances DNS
Fonctionnement de la validation de fichiers de zone
Le linter effectue trois passes de validation, chacune detectant des classes de problemes differentes :
Validation syntaxique
Verifie le format brut de chaque ligne :
- Nombre de champs par enregistrement : chaque type d'enregistrement attend un nombre specifique de champs (par ex. les enregistrements A necessitent un nom, une classe, un type et une adresse IPv4)
- Formats des valeurs : les adresses IP, noms d'hote, valeurs TTL et numeros de priorite sont verifies pour un formatage valide
- Syntaxe des directives :
$TTL,$ORIGINet$INCLUDEdoivent suivre les regles de syntaxe BIND - Enregistrements multi-lignes : les enregistrements entre parentheses (comme SOA) doivent avoir des parentheses ouvrantes et fermantes correspondantes
- Gestion des commentaires : les commentaires precedes d'un point-virgule sont supprimes avant la validation
Validation semantique
Verifie que les valeurs ont un sens dans leur contexte :
- Plages de TTL : les valeurs doivent etre comprises entre 60 secondes et 1 semaine pour la plupart des enregistrements ; le linter signale les TTL deraisonnables
- Validite des noms d'hote : tous les noms d'hote references dans les enregistrements sont verifies conformement a la RFC 1123
- Qualification des cibles : les cibles externes doivent etre pleinement qualifiees (point final) ; les cibles relatives doivent exister dans la zone
- Validite des adresses : les adresses des enregistrements A doivent etre des IPv4 valides ; les enregistrements AAAA doivent contenir des IPv6 valides
Validation structurelle
Verifie le fichier de zone dans son ensemble :
- Enregistrements requis : l'apex de la zone doit avoir au moins un enregistrement SOA et au moins deux enregistrements NS
- Conflits CNAME : les noms ayant un enregistrement CNAME ne peuvent pas avoir d'autres types d'enregistrements
- Restrictions a l'apex : les enregistrements CNAME ne peuvent pas apparaitre a l'apex de la zone
- Detection des doublons : les enregistrements identiques (meme nom, type, classe et donnees) sont signales
- Detection des orphelins : les cibles CNAME ou MX pointant vers des noms non definis dans la zone declenchent un avertissement
La validation de fichiers de zone en pratique
L'habitude la plus precieuse que vous puissiez prendre en matiere de gestion de fichiers de zone est de valider avant chaque deploiement. Cela prend quelques secondes et detecte le type d'erreurs qui causent des pannes durant des minutes ou des heures. Un pipeline CI/CD qui inclut la validation des fichiers de zone comme etape pre-deploiement est encore mieux, car il empeche les fichiers de zone errones d'atteindre la production. Traitez vos fichiers de zone comme du code : ils doivent passer par la revue, la validation et les tests avant le deploiement.
Les erreurs qui causent le plus de douleur operationnelle ne sont pas celles que BIND rejette categoriquement. BIND refusera de charger une zone avec une erreur de syntaxe, et bien que ce soit perturbant, au moins vous savez immediatement que quelque chose ne va pas. Les erreurs dangereuses sont celles que BIND accepte mais qui produisent un comportement incorrect : un point final manquant qui cree une mauvaise cible CNAME, un enregistrement en double qui cause des reponses incoherentes selon le serveur faisant autorite qui repond, ou un conflit CNAME qui fait fonctionner un type d'enregistrement tandis qu'un autre echoue silencieusement. Ce linter detecte tous ces cas.
Lors du debogage d'un fichier de zone signale par le linter, commencez par les erreurs et corrigez-les avant de traiter les avertissements. Les erreurs indiquent des conditions qui feront echouer la resolution DNS ou produiront des resultats incorrects. Les avertissements indiquent des conditions techniquement valides mais probablement involontaires, comme les enregistrements en double ou les TTL inhabituellement courts ou longs. Les messages informatifs signalent des choses qui sont correctes mais meritent d'etre notees, comme l'utilisation de noms relatifs que le linter a resolus en utilisant l'origine de la zone.
Questions frequentes
Le linter verifie-t-il si les noms d'hote se resolvent effectivement ?
Non. Le linter valide la syntaxe du fichier de zone et sa coherence structurelle sans effectuer de requetes DNS en direct. Il verifie que les noms d'hote suivent les regles RFC et que le fichier de zone est internement coherent, mais il ne verifie pas si les noms externes references existent dans le DNS.
Pourquoi un point final manquant est-il important ?
Dans les fichiers de zone BIND, les noms sans point final sont traites comme relatifs au $ORIGIN (apex de la zone). Si votre zone est example.com et que vous ecrivez target.other.com sans point final, BIND l'interprete comme target.other.com.example.com -- ce qui n'est certainement pas ce que vous souhaitiez. Les noms externes pleinement qualifies doivent toujours se terminer par un point.
Le linter peut-il corriger automatiquement les erreurs ?
Non. Le linter signale les problemes mais ne modifie pas le fichier de zone. Les corrections automatiques pourraient introduire de nouvelles erreurs, en particulier avec les conflits CNAME et les problemes structurels qui peuvent avoir plusieurs resolutions valides. Le linter fournit des informations suffisamment precises pour que vous puissiez effectuer la correction appropriee.
Qu'est-ce que la restriction CNAME a l'apex ?
La RFC 1034 interdit les enregistrements CNAME a l'apex de la zone car un CNAME ne peut pas coexister avec d'autres types d'enregistrements, et l'apex doit avoir des enregistrements SOA et NS. Si vous avez besoin d'un alias a l'apex, de nombreux fournisseurs DNS proposent des alternatives proprietaires comme les enregistrements ALIAS ou l'aplatissement CNAME (CNAME flattening), mais les fichiers de zone BIND standard ne prennent pas cela en charge.
Faut-il valider les fichiers de zone generes par des scripts ?
Oui, absolument. La generation automatique de zones est l'une des sources les plus courantes de fichiers de zone subtilement invalides. Un script peut produire une sortie correcte pour la plupart des entrees mais echouer sur les cas limites : hostnames avec des caracteres inhabituels, adresses IPv6 dans des formats inattendus, ou enregistrements qui creent des conflits CNAME. Valider la sortie de vos scripts de generation detecte ces problemes avant qu'ils n'atteignent la production.
Comment gerer les enregistrements SOA multi-lignes ?
Les enregistrements SOA s'etendent couramment sur plusieurs lignes en utilisant des parentheses. Le linter gere les enregistrements multi-lignes en suivant les parentheses ouvrantes et fermantes et en joignant les lignes avant la validation. Les parentheses manquantes ou mal appariees sont signalees comme des erreurs de syntaxe.
Outils associes
- BIND Zone A/AAAA Generator - Generer des enregistrements A et AAAA pour les zones BIND a partir de CSV
- BIND Zone CNAME Generator - Generer des enregistrements CNAME pour les zones BIND a partir de CSV
- Hostname Validator - Valider les noms d'hote selon les normes RFC 1123
- DNS Record Set Deduper - Trouver et supprimer les enregistrements DNS en double
- SPF Record Builder - Construire des enregistrements SPF avec la syntaxe correcte