Table des matières

BIND

Configuration de serveurs DNS avec bind 9

IP du DNS primaire : 10.0.0.1

IP du DNS secondaire : 10.0.0.2

Exemple du fichier /etc/named.conf du DNS primaire:

// Default named.conf generated by install of bind-9.2.4-16.EL4
options {
      directory "/var/named";
      dump-file "/var/named/data/cache_dump.db";
      statistics-file "/var/named/data/named_stats.txt";
//Pour notifier les serveurs secondaire
      notify yes;
//Pour autoriser le serveur secondaire a faire le transfert de zone
      allow-transfer { 10.0.0.2; };
//Pour forwarder les requetes non interne vers des dns externes
      forwarders {212.27.53.252; 212.27.54.252;};
};
include "/etc/rndc.key";
zone "zikdomain.com" IN {
      type master;
      file "zikdomain.com.zone";
      allow-update { none; };
};
zone "0.0.10.in-addr.arpa" IN {
      type master;
      file "0.0.10.in-addr.arpa.zone";
      allow-update { none; };
};

Exemple du fichier /etc/named.conf du DNS secondaire:

// Default named.conf generated by install of bind-9.2.4-16.EL4
options {
      directory "/var/named";
      dump-file "/var/named/data/cache_dump.db";
      statistics-file "/var/named/data/named_stats.txt";
//Pour autoriser les notifications du serveur primaire
      allow-notify {10.0.0.1;};
//Pour forwarder les requetes non interne vers des dns externes. Ne pas utiliser si le serveur doit faire du cache DNS
      forwarders {212.27.53.252; 212.27.54.252;};
};
include "/etc/rndc.key";
zone "zikdomain.com" IN {
        type slave;
        file "slaves/zikdomain.com.zone";
      masters { 10.0.0.1; };
};
zone "0.0.10.in-addr.arpa" IN {
        type slave;
        file "slaves/0.0.10.in-addr.arpa.zone";
      masters { 10.0.0.1; };
};

Configuration d'un fichier zone (/var/named/zikdomain.com.zone)

$ORIGIN zikdomain.com.
$TTL 86400
@     IN SOA  ns1.zikdomain.com. hostmaster.zikdomain.com. (
              2007051106      ; serial
              21600           ; refresh after 6 hours
              3600            ; retry after 1 hour
              604800          ; expire after 1 week
              86400           ; minimum TTL of 1 day
              )
; Serveurs DNS
              IN NS           ns1.zikdomain.com.
              IN NS           ns2.zikdomain.com.
; Serveurs MAIL
              IN MX   10      smtp
; HOSTS
rhel4-vm1     IN A            10.0.0.1
rhel4-vm2     IN A            10.0.0.2
zikostation   IN A            10.0.0.254
ns1           IN CNAME        rhel4-vm1
ns2           IN CNAME        rhel4-vm2
smtp          IN CNAME        rhel4-vm1
mail          IN CNAME        rhel4-vm1
test          IN CNAME        rhel4-vm1

Configuration d'un fichier zone inverse(/var/named/0.0.10.in-addr.arpa.zone)

$ORIGIN 0.0.10.in-addr.arpa.
$TTL 86400
@     IN SOA  ns1.zikdomain.com. hostmaster.zikdomain.com. (
              2007050702      ; serial
              21600           ; refresh after 6 hours
              3600            ; retry after 1 hour
              604800          ; expire after 1 week
              86400           ; minimum TTL of 1 day
              )
      IN NS   ns1.zikdomain.com.
      IN NS   ns2.zikdomain.com.
1     IN PTR  rhel4-vm1.zikdomain.com.
2     IN PTR  rhel4-vm2.zikdomain.com.
254   IN PTR  zikostation.zikdomain.com.

Gestion des vues

Description

Les sections view définissent des comportements du serveur sur la base de l'adresse IP du client qui envoie la requête, permettant de différencier les réponses DNS. On définit ainsi deux vues :

Générer les clés

Il est nécessaire de générer une clé par vue pour cibler les transferts de zone. Si ce n'est pas fait, les serveurs secondaire ne traiterons qu'une seule vue.

Pour générer les clés, lancer :

cd /var/bind/
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST interne-key
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST externe-key

Ces commandes génèrent deux fichiers, exemple pour idom-key :

Kinterne-key.+157+56677.key
Kinterne-key.+157+56677.private

Pour récupérer la chaîne de caractère secret, lancer la commande :

grep Key Kinterne-key.+157+56677.private

Configuration du serveur primaire

//Clé utilisée pour cibler le transfert de zone vers les secondaires pour la vue externe
key "externe-key" {
      algorithm hmac-md5;
      secret "XXXXXXXXXXXXXXXXXXXXXX==";
};
//Clé utilisée pour cibler le transfert de zone vers les secondaires pour la vue interne
key "interne-key" {
      algorithm hmac-md5;
      secret "YYYYYYYYYYYYYYYYYYYYYY==";
};

view "interne" {
      //On autorise l'usage de la clé interne mais pas externe pour bien ciblé 
      match-clients   { clients_interne; key interne-key; !key externe-key;};
      recursion       yes;
      allow-recursion { clients_interne; };
      
      //Les serveurs secondaires 10.0.0.2 et 10.0.0.3 doivent utiliser la clé interne pour le transfert de cette vue
      server 10.0.0.2 { keys interne-key; };
      server 10.0.0.3 { keys interne-key; };

      // racine
      // type hint correspond aux requêtes que l'on ne peut pas traiter localement
      // le fichier root.zone doit être récupéré régulièrement sur ftp.rs.internic.net/domain
      zone "." {
              type    hint;
              file    "standard/root.hint";
      };

      zone "localhost" {
              type    master;
              file    "standard/localhost";
              allow-transfer { localhost; };
      };

      zone "127.in-addr.arpa" {
              type    master;
              file    "standard/loopback";
              allow-transfer { localhost; };
      };

      zone "com" {
              type delegation-only;
      };

      zone "net" {
              type delegation-only;
      };

      // zone de type master correspond aux requêtes locales : ce serveur est l'autorité
      // de cette zone (groupeT.tp)
      zone "groupeT.tp" {
              type    master;
              file    "master/int.groupeT.tp";
      };
};

view "externe" {
      match-clients   { any; key externe-key; !key interne-key; };
      recursion       no;
      //Les serveurs secondaires 10.0.0.2 et 10.0.0.3 doivent utiliser la clé externe pour le transfert de cette vue
      server 10.0.0.2 { keys externe-key; };
      server 10.0.0.3 { keys externe-key; };

      // zone de type master correspond aux requêtes locales : ce serveur est l'autorité
      // de cette zone (groupeT.tp)
      zone "groupeT.tp" {
              type    master;
              file    "master/ext.groupeT.tp";
      };
};

Configuration des serveurs secondaires

//Clé utilisée pour cibler le transfert de zone vers les secondaires pour la vue externe
key "externe-key" {
      algorithm hmac-md5;
      secret "XXXXXXXXXXXXXXXXXXXXXX==";
};
//Clé utilisée pour cibler le transfert de zone vers les secondaires pour la vue interne
key "interne-key" {
      algorithm hmac-md5;
      secret "YYYYYYYYYYYYYYYYYYYYYY==";
};

view "interne" {
      //On autorise l'usage de la clé interne mais pas externe pour bien ciblé 
      match-clients   { clients_interne; key interne-key; !key externe-key;};
      recursion       yes;
      allow-recursion { clients_interne; };
      
      //Le serveur primaire 10.0.0.1 doit utiliser la clé interne pour le transfert de cette vue
      server 10.0.0.1 { keys interne-key; };

      // racine
      // type hint correspond aux requêtes que l'on ne peut pas traiter localement
      // le fichier root.zone doit être récupéré régulièrement sur ftp.rs.internic.net/domain
      zone "." {
              type    hint;
              file    "standard/root.hint";
      };

      zone "localhost" {
              type    master;
              file    "standard/localhost";
              allow-transfer { localhost; };
      };

      zone "127.in-addr.arpa" {
              type    master;
              file    "standard/loopback";
              allow-transfer { localhost; };
      };

      zone "com" {
              type delegation-only;
      };

      zone "net" {
              type delegation-only;
      };

      // zone de type master correspond aux requêtes locales : ce serveur est l'autorité
      // de cette zone (groupeT.tp)
      zone "groupeT.tp" {
              type    slave;
              file    "slave/int.groupeT.tp";
              masters { 10.0.0.1; };
      };
};

view "externe" {
      match-clients   { any; key externe-key; !key interne-key; };
      recursion       no;
      //Le serveur primaire 10.0.0.1 doit utiliser la clé externe pour le transfert de cette vue
      server 10.0.0.2 { keys externe-key; };
      server 10.0.0.3 { keys externe-key; };

      // zone de type master correspond aux requêtes locales : ce serveur est l'autorité
      // de cette zone (groupeT.tp)
      zone "groupeT.tp" {
              type    slave;
              file    "slave/ext.groupeT.tp";
              masters { 10.0.0.1; };
      };
};

Gestion avec un controleur Active Directory

Mettre les adresses IP des contrôleurs AD sur la ligne allow-update

zone "domaineNT.zikdomain.fr" {
      type master;
      file "domaineNTzikdomain.com";
      allow-update { <IP CONTROLEUR AD>; <IP CONTROLEUR AD 2>; };
};

Astuces

Pour créer des enregistrements server4 pointant sur 10.0.0.4 jusqu'à server100 pointant sur 10.0.0.100

$GENERATE 4-100 server$ A 10.0.0.$

Même chose pour créer les ptr

$GENERATE 4-100 $ PTR server$.zikdomain.com.

Quelques commandes

Activer le logging des requetes :

rndc querylog

Une fois activé les logs se trouvent dans /var/log/messages ou /var/log/syslog.

Vérifier la syntaxe d'un fichier zone :

named-checkzone domaine.com /var/cache/bind/domaine.com.zone

Vérifier la syntaxe de la configuration de bind :

named-checkconf /etc/bind/named.conf