Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

linux:dns [2010/03/07 09:42]
matthieu
linux:dns [2011/12/08 18:36] (Version actuelle)
matthieu
Ligne 1: Ligne 1:
-====== Serveur DNS ======+{{tag>fr fr:linux fr:serveur fr:dns fr:ipv6}} 
 +====== Bind ======
 Bind (Berkeley Internet Name Domain) est le service DNS le plus utilisé. Il peut être utilisé pour héberger une zone primaire ou tout simplement comme cache DNS. Bind (Berkeley Internet Name Domain) est le service DNS le plus utilisé. Il peut être utilisé pour héberger une zone primaire ou tout simplement comme cache DNS.
  
Ligne 6: Ligne 7:
   * bind9   * bind9
  
-===== Configuration ===== +Les fichiers de configuration sont situés dans le répertoire ///etc/bind///.
-Les fichiers de configuration sont situés dans le répertoire ///etc/bind///.\\ +
-Par défaut le service est configuré en proxy et intérroge directement les root DNS.+
  
-==== Ajouter une zone locale ====+Pour que le serveur qui héberge le bind utilise son service pour la résolution, il faut modifier ///etc/resolv.conf// ainsi : 
 +  nameserver 127.0.0.1 
 +   
 +===== Utiliser Bind pour résoudre internet ===== 
 +==== Accès direct aux root ==== 
 +Par défaut le service est configuré en proxy et interroge directement les root DNS. Cette configuration permet de ne pas dépendre des DNS opérateurs.
  
-L'exemple suivant montre comment ajouter une zone locale en tant que serveur primaire :+La configuration par défaut dans //named.conf.default-zones// est la suivante : 
 +<code bind> 
 +// prime the server with knowledge of the root servers 
 +zone "." { 
 +        type hint; 
 +        file "/etc/bind/db.root"; 
 +}; 
 +</code>
  
-Il faut créer un fichier contenant les enregistrements de la zone, par exemple ///etc/bind/db.priv.bouthors.fr// :+==== Forwarding ==== 
 +Il est également possible de configurer un forwarding vers d'autres serveurs DNS. 
 + 
 +Voici un exemple de configuration à ajouter à //named.conf.local// 
 +<code bind
 +zone "." { 
 +        type forward; 
 +        forward only; 
 +        forwarders { 192.168.10.10; } ; 
 +}; 
 +</code> 
 + 
 +===== Forwarding pour un seul domaine ===== 
 +Voici comment déclarer une redirection pour un domaine particulier :
 <file> <file>
-; +zone ";thisdomain.com"{ 
-; BIND data file for local loopback interface +        type forward
-+        forward only
-$TTL    604800 +        forwarders { 10.0.10.11; 10.0.10.12; } ; 
-@       IN      SOA     bender.priv.bouthors.fr. matthieu.priv.bouthors.fr. ( +};
-                              1         Serial +
-                         604800         Refresh +
-                          86400         Retry +
-                        2419200         ; Expire +
-                         604800 )       ; Negative Cache TTL +
-+
-@               NS      bender.priv.bouthors.fr. +
-@               MX  5   bender.priv.bouthors.fr. +
-@               A       192.168.10.1 +
-portable        CNAME   nibbler.priv.bouthors.fr. +
-bender          A       192.168.10.+
-fry             A       192.168.10.10 +
-smitty          A       192.168.10.254 +
-leela           A       192.168.10.11 +
-nibbler         A       192.168.11.10+
 </file> </file>
  
-Il faut également définir la résolution inverse des IP, par exemple  ///etc/bind/db.192.168// : +===== Créer une zone primaire ===== 
-<file> +Il s'agit de la principale fonction de Bind : déclarer des zones publiques ou privées.\\ 
-+Cela nécessite deux étapes : 
-; BIND reverse data file for local loopback interface +  - La création d'un fichier de zone 
-; +  - La déclaration de la zone 
-$TTL    604800 + 
-@       IN      SOA     bender.priv.bouthors.fr. matthieu.priv.bouthors.fr. ( +L'exemple suivant montre la création de la zone bouthors.fr. 
-                              1         Serial + 
-                         604800         Refresh +Voici un exemple de fichier de zone pour bouthors.fr, nous avons créé //db.bouthors.fr// : 
-                          86400         Retry +<file bind
-                        2419200         Expire +$ORIGIN . 
-                         604800       ; Negative Cache TTL +$TTL 300        ; 5 minutes 
-+bouthors.fr             IN SOA  dc1.bouthors.fr. matthieu.bouthors.fr. ( 
-@               NS      bender.priv.bouthors.fr. +                                1110210001 serial 
-1.10            PTR     bender.priv.bouthors.fr+                                604800      refresh (1 week) 
-254.10          PTR     smitty.priv.bouthors.fr. +                                86400       retry (1 day) 
-10.10           PTR     fry.priv.bouthors.fr. +                                2419200     expire (4 weeks
-11.10           PTR     leela.priv.bouthors.fr. +                                300         minimum (5 minutes) 
-10.11           PTR     nibbler.priv.bouthors.fr+                                ) 
-254.11          PTR     smitty.priv.bouthors.fr+                        NS      dc1.bouthors.fr. 
-254.12          PTR     smitty.priv.bouthors.fr.+                        A       88.174.63.25 
 +                        MX      10 mail.bouthors.fr. 
 +$ORIGIN bouthors.fr. 
 +matthieu                CNAME   www 
 +www                     A       88.174.63.25 
 +mail                    CNAME   ghs.google.com
 +dc1                     A       88.174.63.25
 </file> </file>
 +Un fichier de zone est composée d'enregistrement de différents type (SOA, NS, A, MX, ...). Quelques explications :
 +  * $ORIGIN définit le suffixe des lignes suivantes
 +  * $TTL définit la durée de cache des lignes suivantes
 +  * le SOA (Start of Authority) est obligatoire, il débute la définition d'une zone avec les paramètres suivants :
 +    * dc1.bouthors.fr est le serveur autoritaire (Primary Master) de la zone
 +    * matthieu.bouthors.fr est l'email de l'administrateur avec un "." à la place de "@"
 +    * 20111021001 est le numéro de série, il permet de versionner la configuration actuelle, il faut l'incrémenter à chaque modification. Ici il est créé avec "année mois jour révision".
 +    * viennent ensuite les différentes durée d'expiration en secondes :
 +      * refresh, retry et expire sont utilisée pour la synchronisation des serveurs secondaires
 +      * minimum (300) est important, il indique la durée de cache des réponses négatives
 +  * les enregistrements de type A correspondent à l'association classique d'une IP à un nom. Par exemple www.bouthors.fr sera résolu par 88.174.63.25
 +  * les enregistrements de type CNAME sont des redirection vers d'autres enregistrement
 +  * les enregistrements de type NS définissent les serveurs DNS capables de répondre aux requêtes
 +  * les enregistrements de type MX identifient les relais de messagerie SMTP pour les mails du domaine (nom@bouthors.fr). Si plusieurs enregistrement sont présents, ceux avec le poids le plus petit sont prioritaires. Si les poids sont identiques, un partage de charge est réalisé. Dans l'exemple il y a un seul serveur mail.bouthors.fr avec le poids 10.
  
-Enfin, il faut renseigner la zone dans Bind, pour cela la modification de ///etc/bind/named.conf.local// est le moyen le plus propre :+A noter que les enregistrement textes sont relatifs à la zone par défaut, il faut ajouter un "." à la fin pour indiquer qu'il s'agit de noms absolus. 
 + 
 +Ensuite, il faut renseigner la zone dans Bind, pour cela la modification de ///etc/bind/named.conf.local// est le moyen le plus propre :
 <file> <file>
 +zone "bouthors.fr" {
 +        type master;
 +        file "/etc/bind/db.bouthors.fr";
 +};
 +</file>
  
-// Do any local configuration here +Pour appliquer les modifications, il faut redémarrer bind : 
-//+  /etc/init.d/bind9 restart
  
-// Consider adding the 1918 zones hereif they are not used in your +===== Créer une sous-zone ===== 
-// organization +La configuration d'une sous-zone est assez proche d'une zone racineles étapes sont : 
-//include "/etc/bind/zones.rfc1918";+  - la création du fichier de zone 
 +  - la déclaration de la zone dans le serveur dns 
 +  - la modification de la zone supérieure ainsi : 
 +    - ajouter les serveurs DNS de la sous zone en tant qu'enregistrement de type NS 
 +    - si besoin ajouter des glue records
  
-zone "priv.bouthors.fr" {+Voici un exemple de création de la sous zone ddns.bouthors.fr qui est dédiée pour les enregistrements dynamiques. 
 + 
 +Le fichier de zone : 
 +<code> 
 +$ORIGIN . 
 +$TTL 300        ; 5 minutes 
 +ddns.bouthors.fr       IN SOA  dc1.bouthors.fr. matthieu.bouthors.fr. ( 
 +                                2011102303  ; serial 
 +                                3600        ; refresh (1H) 
 +                                1200        ; retry (20m) 
 +                                2419200     ; expire (4 weeks) 
 +                                180         ; minimum (3 minutes) 
 +                                ) 
 +                        NS      dc1.bouthors.fr. 
 +</code> 
 + 
 +La déclaration de la zone dans //named.conf.local// : 
 +<code> 
 +zone "ddns.bouthors.fr" {
         type master;         type master;
-        file "/etc/bind/db.priv.bouthors.fr";+        file "/etc/bind/db.ddns.bouthors.fr";
 }; };
 +</code>
 +
 +La déclaration de la sous zone dans la zone parent :
 +<code>
 +$ORIGIN .
 +$TTL 300        ; 5 minutes
 +bouthors.fr             IN SOA  dc1.bouthors.fr. matthieu.bouthors.fr. (
 +                                1110210001 ; serial
 +                                604800      ; refresh (1 week)
 +                                86400       ; retry (1 day)
 +                                2419200     ; expire (4 weeks)
 +                                300         ; minimum (5 minutes)
 +                                )
 +                        NS      dc1.bouthors.fr.
 +ddns.bouthors.fr.       NS      dc1.bouthors.fr.
 +</code>
 +
 +Si les serveurs dns font partie de la sous zone (par exemple on indique que ddns.bouthors.fr est résolution par dc1.ddns.bouthors.fr) alors cela génère une boucle puisque dc1.ddns.bouthors.fr ne peut être résolu qu'en joignant le dns de ddns.bouthors.fr. C'est alors qu'interviennent les glue records : il suffit d'ajouter la résolution de dc1.ddns.bouthors.fr dans la zone parent. Par exemple :
 +  dc1.ddns.bouthors.fr.       NS      192.168.10.2
 +===== Créer une zone de résolution inverse =====
 +Pour ajouter votre propre résolution, il faut à nouveau créer un fichier de zone inverse, par exemple //db.192.168// :
 +
 +<file>
 +$ORIGIN .
 +$TTL 60 ; 1 minute
 +168.192.in-addr.arpa    IN SOA  dc1.bouthors.fr. matthieu.bouthors.fr. (
 +                                1110210001 ; serial
 +                                604800     ; refresh (1 week)
 +                                86400      ; retry (1 day)
 +                                2419200    ; expire (4 weeks)
 +                                60         ; minimum (1 minute)
 +                                )
 +                        NS      dc1.bouthors.fr.
 +$ORIGIN 10.168.192.in-addr.arpa.
 +1                       PTR     rt1.bouthors.fr.
 +2                       PTR     dc1.bouthors.fr.
 +</file>
  
 +Ensuite on ajouter la zone à //named.conf.local// :
 +<code>
 zone "168.192.in-addr.arpa" { zone "168.192.in-addr.arpa" {
         type master;         type master;
         file "/etc/bind/db.192.168";         file "/etc/bind/db.192.168";
 }; };
-</file>+</code>
  
-Pour appliquer les modificationsil faut redémarrer bind : +===== Créer un serveur secondaire ===== 
-  /etc/init.d/bind9 restart+Le principe du serveur secondaire est de se synchroniser sur le primaire afin d'avoir un serveur de secours. Il est notamment obligatoire pour tout domaine publique.\\ 
 +Lorsqu'il y a une modification du primaire, celui-ci notifie les secondairesla zone est transférée et stockée dans un fichier temporaire.\\ 
 +Le serial est utiliser pour identifier la révision du fichier, il est important de l'incrémenté à chaque modification.
  
-==== Ajouter une redirection conditionnelle ==== +Par défaut le primaire autorise tous les transferts et notifie automatiquement les serveurs définis par les enregistrements NS.\\ 
-Voici comment déclarer une redirection pour un domaine particulier +Il est cependant possible de configurer manuellement ces éléments, voici un exemple 
-<file+<code
-zone "thisdomain.com" { +zone "bouthors.fr" { 
-        type forward+        type master
-        forward only+        file "/etc/bind/db.bouthors.fr"
-        forwarders 10.0.10.1110.0.10.12; } ;+        allow-transfer {192.168.10.3;}; 
 +        also-notify {192.168.10.3;};
 }; };
-</file>+</code> 
 + 
 +La déclaration d'une zone slave sur le deuxième serveur est également relativement simple : 
 +<code> 
 +zone "bouthors.fr" { 
 +        type slave; 
 +        file "/var/cache/bind/db.bouthors.fr"; 
 +        masters {192.168.10.2;}; 
 +}; 
 +</code> 
 +Il faut choisir un répertoire modifiable et définir l'ip du primaire. 
 + 
 +===== Autoriser les mises à jour dynamiques ===== 
 +Les mises à jour dynamiques (également appelées Dynamic DNS ou DDNS) permettent de modifier dynamiquement les enregistrements.\\ 
 +Cela permet par exemple de disposer de valeurs à jour pour les équipements en DHCP. 
 + 
 +La mise à jour peut être réalisée par le client DHCP ou par le serveur DHCP. Le serveur DHCP a l'avantage de surveiller les baux DHCP et peut ainsi nettoyer le serveur DNS lors de leur expiration. 
 + 
 +**:!: Très important : lorsqu'une zone accepte les mises à jour, un fichier journal est créé pour temporiser l'écriture de la zone, il n'est plus possible de modifier le fichier de zone directement.**\\ 
 +Il faut utiliser une des options suivantes : 
 +  * utiliser la commande nsupdate pour réaliser une mise à jour dynamique manuellement 
 +  * bloquer temporairement le mode dynmique 
 +  * stopper temporairement le serveur DNS 
 + 
 +Avant d'activer la mise à jour dynamique, vérifier que bind a le droit d'écrire dans /etc/bind pour la création des journaux : 
 +  chown bind /etc/bind 
 +   
 +Ajouter les autorisations d'update sur la zone concernée avec allow-update : 
 +<code> 
 +zone "ddns.bouthors.fr" { 
 +        type master; 
 +        file "/etc/bind/db.ddns.bouthors.fr"; 
 +        allow-update { 192.168.10.2;192.168.10.3;}; 
 +}; 
 +</code> 
 + 
 +Après redémarrage de bind, nous pouvons tester la mise à jour avec nsupdate : 
 +<code> 
 +# nsupdate 
 +> server 192.168.10.2 
 +> zone ddns.bouthors.fr 
 +> update add test.ddns.bouthors.fr. 300 IN A 192.168.10.150 
 +> send 
 +> quit 
 + 
 +# nslookup test.ddns.bouthors.fr 
 +Server:         192.168.10.2 
 +Address:        192.168.10.2#53 
 + 
 +Name:   test.ddns.bouthors.fr 
 +Address: 192.168.1.111 
 +Name:   test.ddns.bouthors.fr 
 +Address: 192.168.10.150 
 + 
 +
 +</code> 
 + 
 +Pour bloquer la mise à jour dynamique afin de modifier le fichier de zone, il faut utiliser "rndc freeze zone" et "rndc unfreeze zone", par exemple : 
 +<code> 
 +# rndc freeze ddns.bouthors.fr 
 +# vi /etc/bind/db.ddns.bouthors.fr 
 +# rndc unfreeze ddns.bouthors.fr 
 +A zone reload and thaw was started. 
 +Check the logs to see the result. 
 +#  
 +</code> 
 + 
 +**:!: Il est très fortement conseillé de sécuriser les mises à jours avec TSIG car il est très facile de forger les requêtes DNS.** 
 +===== Configurer TSIG pour sécuriser les échanges ===== 
 +Il est possible de sécuriser les échanges entre serveurs (update, transfert) avec TSIG.\\ 
 +Les étapes sont : 
 +  - générer une clef 
 +  - configurer cette clef sur les deux serveurs 
 + 
 +La génération de la clef se fait avec la commande dnssec-keygen (remplacer dc1-dc2 par les noms de vos serveurs) : 
 +  dnssec-keygen -a hmac-md5 -b 128 -n HOST dc1-dc2 
 +   
 +:!: Sous VMWare le résultat n'arrive pas rapidement (cf bug https://bugs.launchpad.net/ubuntu/+source/bind9/+bug/650721), le plus simple est de générer de l'activité disque par exemple avec "find /"). 
 + 
 +Deux fichiers sont alors créés avec les extensions .key et .private, nous allons uniquement utiliser la clef présente à la ligne "Key:" dans le fichier .private : 
 +<code> 
 +Private-key-format: v1.2 
 +Algorithm: 157 (HMAC_MD5) 
 +Key: 0jnu3SdsMvzzlmTDPYRceA== 
 +Bits: AAA= 
 +</code> 
 + 
 +Il faut ensuite déclarer cette clef sur les deux serveurs, par exemple sur le master : 
 +<code> 
 + 
 +key dc1-dc2 { 
 +  algorithm hmac-md5; 
 +  secret "0jnu3SdsMvzzlmTDPYRceA=="; 
 +}; 
 + 
 +server 192.168.10.3 { 
 +  keys {dc1-dc2;}; 
 +}; 
 + 
 +zone "bouthors.fr" { 
 +        type master; 
 +        file "/etc/bind/db.bouthors.fr"; 
 +        allow-transfer { key dc1-dc2 ;}; 
 +        also-notify {192.168.10.3;}; 
 +        allow-update { key dc1-dc2 ;}; 
 +}; 
 +</code> 
 + 
 +Sur le slave : 
 +<code> 
 + 
 +key dc1-dc2 { 
 +  algorithm hmac-md5; 
 +  secret "0jnu3SdsMvzzlmTDPYRceA=="; 
 +}; 
 + 
 +server 192.168.10.2 { 
 +  keys {dc1-dc2;}; 
 +}; 
 +</code> 
 + 
 +Enfin, il est conseillé de sécuriser la configuration en supprimant les fichiers .key et .private et en supprimant l'accès à //named.conf.local// : 
 +  chmod o-r named.conf.local 
 + 
 +===== IPv6 ===== 
 +:!: Communiquer via IPv6 et fournir des réponses IPv6 sont deux problématiques distinctes. Nous traitons ici de la résolution des noms DNS par des adresses IPv6. 
 + 
 +L'annonce d'adresses IPv6 dans le DNS est très simple, il suffit d'ajouter des enregistrements de type AAAA dans la zone. Exemple : 
 +   web3                    AAAA    2001:470:c981::24 
 + 
 +Il est également possible de paramétrer une zone de résolution inverse.\\ 
 +Attention à bien respecter la notation reverse, chaque caractère hexadécimal est séparé par un point. Exemples : 
 +  * 2001:470:c981:: => 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.8.9.c.0.7.4.0.1.0.0.2.ip6.arpa. 
 +  * 2001:470:c981::24 => 4.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.8.9.c.0.7.4.0.1.0.0.2.ip6.arpa. 
 + 
 +Pour effectuer la transformation, utiliser la commande dig : 
 +<code> 
 +dig -x 2001:470:c981::24 
 + 
 +... 
 +;; QUESTION SECTION: 
 +;4.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.8.9.c.0.7.4.0.1.0.0.2.ip6.arpa. IN PTR 
 +... 
 +</code> 
 +   
 + 
 +Dans l'exemple suivant, nous allons créer une zone reserve pour le réseau 2001:470:c981::/48 
 + 
 +Il faut tout d'abord créer un nouveau fichier de zone ///etc/bind/db.2001_470_c981// : 
 +<code> 
 +$ORIGIN . 
 +$TTL 60 ; 1 minute 
 +1.8.9.c.0.7.4.0.1.0.0.2.ip6.arpa.  IN SOA  dc1.bouthors.fr. matthieu.bouthors.fr. ( 
 +                                2011102301 ; serial 
 +                                604800     ; refresh (1 week) 
 +                                86400      ; retry (1 day) 
 +                                2419200    ; expire (4 weeks) 
 +                                60         ; minimum (1 minute) 
 +                                ) 
 +                        NS      dc1.bouthors.fr. 
 +$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.8.9.c.0.7.4.0.1.0.0.2.ip6.arpa. 
 +2.0                     PTR     dc1.bouthors.fr. 
 +3.0                     PTR     dc2.bouthors.fr. 
 +</code> 
 + 
 +Puis ajouter la nouvelle zone à //named.conf.local// : 
 +<code> 
 +zone "1.8.9.c.0.7.4.0.1.0.0.2.ip6.arpa" { 
 +        type master; 
 +        file "/etc/bind/db.2001_470_c981"; 
 +        allow-transfer { key dc1-dc2;}; 
 +        also-notify {192.168.10.3;}; 
 +}; 
 +</code> 
 + 
 +:!: Remarque : la zone reverse IPv6 étant généralement publique, elle peut être synchronisée et annoncée comme les zones forward.
  
 ===== Configuration de la résolution locale ===== ===== Configuration de la résolution locale =====
Ligne 100: Ligne 375:
  
 ===== Backup ===== ===== Backup =====
-  * les fichiers de zones : +  * /etc/bind/*
-    * /etc/bind/db.priv.bouthors.fr +
-    /etc/bind/db.192.168 +
-  * /etc/bind/named.conf.local +
 ===== Links ===== ===== Links =====
-  * [[bender]] +  * http://www.isc.org/software/bind
-  * http://www.isc.org/index.pl?/sw/bind/+
   * http://www.freeos.com/articles/3956/   * http://www.freeos.com/articles/3956/
 +  * http://doc.ubuntu-fr.org/bind9
 +  * http://www.zytrax.com/books/dns/ch7/xfer.html
 +  * http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.ch04.html
 +  * http://www.cyberciti.biz/faq/unix-linux-bind-named-configuring-tsig/
  
linux/dns.1267951323.txt.gz · Dernière modification: 2010/03/07 09:42 par matthieu
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki