Linux:Serveur DNS Bind

Un article de Djjnet.

Sommaire

Configuration du serveur BIND

Le fichiers de configuration de bind utilise le symbole ; pour commencer des commentaires dans les fichiers de zones. # est aussi accepté pour le fichier named.conf.
Les interrogations DNS sont insensible à la "case" (majuscules/minuscules).

Fichier de configuration principale /etc/bind/named.conf

options {
       ;directory est le dossier où se situe les fichiers des zones (les définitions des noms de domaines)
       directory "/var/dj-j/named";
       pid-file "/var/run/bind/run/named.pid";
};

Limiter les logs inutiles :

logging {
       category lame-servers{ null; };
};

Définition d'une zone (un domaine) :

zone "dj-j.net" {
       #Il s'agit du DNS principale
       type master;
       #Par convention, un fichier de zone se nomme db.nomdedomaine
       file "master/dj-j/db.dj-j.net";
       #Authoriser les transferts pour les serveurs DNS secondaires :
       allow-transfer {
                       212.180.111.252;
       };
       #Authoriser les requêtes pour tout le monde :
       allow-query {
                       any;
       };
};

Fichier de configuration de la zone (le domaine)

Dans notre exemple le fichier /var/dj-j/named/master/dj-j/db.dj-j.net

Les noms des serveurs doivent terminer par un point si :

  • le domaine n'est pas celui de la zone
  • le domaine de la zone est indiqué

S'il n'y a pas de point, le domaine de la zone sera ajouté à la fin.

;Depuis la version 9 de bind, il est nécessaire de commencer par
$TTL 86400
;Commencer par l'enregistrement du SOA :
dj-j.net.       IN      SOA     ns.dj-j.net.    webmaster.dj-j.net.     (
                           2006110701 ; serial
                           43200      ; refresh 12h
                           3600       ; retry 1h
                           604800     ; expire 7d
                           86400)     ; TTL 1d
;L'enregistrement SOA de classe IN (Internet) a pour DNS primaire ns.dj-j.net et pour email de la personne en charge du domaine : webmaster@dj-j.net
;Le @ est remplacé par un .
;Puis l'enregistrement des serveurs de noms :
dj-j.net.       IN      NS      ns.dj-j.net.
dj-j.net.       IN      NS      ns0.dj-j.net.
;L'enregistrement des serveurs de mails :
dj-j.net.       IN      MX      10      mx.dj-j.net.
dj-j.net.       IN      MX      20      mx2.itenec.net.
;Plus le chiffre est petit, plus le serveur est prioritaire.
;Dans l'exemple mx2.itenec.net est le serveur secondaire, il relaie les emails du domaine dj-j.net si le serveur mx.dj-j.net est indisponible.
;Il peut avoir pour valeur 0 à 65535. Généralement, les valeurs sont entre 1 et 100.
;Un serveur indiqué en tant que mx doit obligatoirement avoir un enregistrement A, il ne peut être un CNAME.
;Les enregistrements d'adresse et d'alias :
;A pour une adresse et CNAME pour les alias de machines
ns.dj-j.net.      IN      A       82.236.161.216
ns0.dj-j.net.     IN      A       212.180.111.252
mx.dj-j.net.      IN      A       82.236.161.216
sangoku.dj-j.net. IN      A       82.236.161.216
www.dj-j.net.     IN      CNAME   sangoku.dj-j.net.
intranetdj-j.net. IN      CNAME   sangoku.dj-j.net.

Les abreviations pour les fichiers de zones

Le nom de domaine peut ne pas être spécifié lorsqu'il s'agit de celui de la zone en cours, il n'y a alors pas de point à la fin :

sangoku IN      A       82.236.161.216
www     IN      CNAME   sangoku
test     IN      CNAME   www.dj-j.org.

Remarque : Cela n'est pas possible pour un enregistrement de type PTR (pour le reverse DNS)

Utilisation de @ pour remplacer le domaine de la zone :

@       IN      SOA     ns.dj-j.net.    webmaster.dj-j.net.     (
                           2006110701 ; serial
                           43200      ; refresh 12h
                           3600       ; retry 1h
                           604800     ; expire 7d
                           86400)     ; TTL 1d
@       IN      NS      ns.dj-j.net.
@       IN      NS      ns0.dj-j.net.

Ne pas répérer le dernier nom utilisé :

@       IN      SOA     ns.dj-j.net.    webmaster.dj-j.net.     (
                           2006110701 ; serial
                           43200      ; refresh 12h
                           3600       ; retry 1h
                           604800     ; expire 7d
                           86400)     ; TTL 1d
       IN      NS      ns.dj-j.net.
       IN      NS      ns0.dj-j.net.

Définition d'une zone sur le DNS secondaire

zone "dj-j.net" {
       ;Il s'agit du DNS secondaire
       type slave;
       ;Le fichier n'est pas à créer, le DNS secondaire le transférera depuis le principale. Mais le dossier est à créer.
       file "slave/dj-j/db.dj-j.net";
       ;Indiquer le(s) DNS principale(aux)
       masters {
               82.236.161.216;
       };
};

Valeur de l'enregistrement SOA

  • serial : doit être augmenté à chaque changement de la zone. Il est généralement formé de la date suivi d'un indicatif de modification de la journée.
  • refresh : interval entre chaque mise à jour des DNS secondaires
  • retry : temps après lequel le DNS secondaire retentera une mise à jour s'il n'avait pas réussi à joindre le DNS principale.
  • expire : les données du DNS secondaire sont considérées expirées après ce temps d'indisponibilité du DNS principale. Le DNS secondaire ne répond plus.
  • TTL : période de temps où les autres serveurs DNS garde en cache les réponses fournies.

Les ACL dans bind

Par défaut, les acl disponibles sont :

  • none : aucune IP
  • any : toutes les IPs
  • localhost : IPs de la machine locale
  • localnets : IPs du réseaux de la machine locale.

Définir un acl dans le fichier /etc/bind/named.conf :

acl "internal" {
       {
               192.168.100/24;
               192.168.101/24;
       };
};

Vous pouvez maintenant vous en servir dans les zones ou les options globales :

       allow-query {
                       internal;
       };

Mettre à jour le fichier des serveurs root

Dans cet exemple, notre fichier est /etc/bind/named.ca

Créer un fichier /etc/cron.monthly/updatebindroot et insérer la ligne suivante :

dig @a.root-servers.net  .  ns > /etc/bind/named.ca

Le rendre exécutable :

chmod +x /etc/cron.monthly/updatebindroot 

Le fichier sera mis à jour une fois par mois.