Noter: le document original est plus récent que cette traduction.
La mise en place d'un serveur DNS sur un réseau permet de remplacer les adresses IP des machines par un nom. Ainsi, il est même possible d'associer plusieurs noms à une même machine pour mettre en évidence les différents services possibles. Du coup, www.example.com et pop.example.com, peuvent pointer vers le serveur principal où se trouvent le serveur de messagerie et l'intranet de l'entreprise dont le domaine serait example.com. C'est quand même plus simple que de se rappeler que ces deux services s'exécutent sur la machine avec l'adresse IP 192.168.0.1.
Imaginez maintenant que l'administrateur de notre société décide pour une raison ou une autre de déplacer le serveur de messagerie vers la machine 192.168.0.11. Il n'y a rien à faire à part modifier le fichier de configuration du serveur DNS. Vous avez toujours la possibilité d'aller modifier le fichier hosts de tous les utilisateurs, mais cela peut prendre du temps et gêner certaines personnes.
Nous avons accès à Internet via une xxxbox (192.168.1.1), deux serveurs DNS fournis par notre FAI (80.10.249.2, 80.10.246.129). En fait, ces deux derniers ne seront jamais mentionnés dans la configuration car la xxxbox se chargera de la résolution du nom si elle ne connaît pas l'adresse de destination des paquets. Par conséquent, je considère que xxxbox est le serveur principal en dehors de notre domaine. Le serveur "sid" (192.168.1.10) est connecté à la xxxbox via sa première carte réseau. Il est également connecté au réseau local (192.168.0.0/24) via sa seconde interface réseau (192.168.0.1). C'est sur celui-ci que nous allons installer le serveur DNS primaire de notre domaine example.com (RFC 2606) Tous les ordinateurs du LAN se voient attribuer une adresse IP automatiquement via le service DHCP. Ce dernier fournira également l'adresse du serveur DNS primaire situé sur notre domaine, et mettra à jour les noms d'hôtes de la zone example.com à laquelle il aura attribué une adresse IP.
Sommaire
Installation
Nous allons utiliser le package bind9 pour faire tout cela.
# apt-get install bind9
et puis si vous voulez installer la documentation en plus, (très utile) :
# apt-get install bind9-doc
Configuration
Après l'installation, nous verrons un peu les fichiers de configuration. Ils sont placés dans le répertoire /etc/bind/
signature TSIG
Le but de cette signature est d'authentifier les transactions avec BIND. Ainsi, le serveur DHCP ne pourra mettre à jour le domaine example.com que s'il possède cette clé. Nous copions une clé existante :
# cd / etc / lier / # chat rndc.key clé "rndc-clé" algorithme hmac-md5; secret "QJc08cnP1xkoF4a / eSZZbw ==" ; ; # cp rndc.key ns-example-com_rndc-key
Nous générons une nouvelle clé avec les options suivantes :
-
Algorithme HMAC-MD5 – identifiant 157 (obligatoire pour une signature TSIG et le seul algorithme supporté par BIND)
-
512 octets de long (multiple de 64 avec une longueur maximale de 512 pour l'algorithme ci-dessus)
-
Nom : ns-example-com_rndc-key
dnssec-keygen -a HMAC-MD5 -b 512 -n USER ns-example-com_rndc-key Kns-example-com_rndc-key. +157 + 53334
L'empreinte associée à la clé est de 53334. On obtient alors deux fichiers, l'un avec une extension de clé et l'autre avec une extension privée. On remplace la clé présente dans le fichier ns-example-com_rndc-key par celle présente dans l'un de ceux-ci.
# cat Kns-example-com_rndc-key. +157 + 53334.privé Format de clé privée : v1.2 Algorithme : 157 (HMAC_MD5) Clé : LZ5m + L / HAmtc9rs9OU2RGstsg + Ud0TMXOT + C4rK7 + YNUo3vNxKx / 197o2Z80t6gA34AEaAf3F + hEodV4K + SWvA == Bits : AAA = # cat ns-example-com_rndc-key clé "ns-example-com_rndc-key" algorithme hmac-md5; secret "LZ5m + L / HAMtc9rs9OU2RGstsg + Ud0TMXOT + C4rK7 + YNUo3vNxKx / 197o2Z80t6gA34AEaAf3F + hEodV4K + SWvA ==" ; ;
Le fichier ns-example-com_rndc-key ne doit pas être lisible par tous, afin d'assurer la sécurité. Cela sera inséré dans la configuration de liaison via une directive d'inclusion car la configuration de liaison est lisible par le monde. On retiendra également de supprimer la clé et les fichiers privés précédemment générés.
Fichier /Etc/bind/named.conf
Ce fichier est le fichier de configuration principal du serveur DNS.
// Gérer les acls internes acl 127.0.0.0/8; 192.168.0.0/24 ; ; // Charge les options inclure "/etc/bind/named.conf.options" ; // Déclaration de la clé TSIG utilisée pour la mise à jour dynamique inclure "/etc/bind/ns-example-com_rndc-key" ; // Configurer le canal de communication pour administrer BIND9 avec rndc // Par défaut, la clé est située dans le fichier rndc.key et utilisée par // rndc et bind9 sur localhost contrôles inet 127.0.0.1 port 953 autorise 127.0.0.1; ; ; // amorce le serveur avec la connaissance des serveurs racine zone "." tapez indice ; fichier "/etc/bind/db.root" ; ; inclure "/etc/bind/named.conf.default-zones" ; inclure "/etc/bind/named.conf.local" ;
Remarque : Dans Debian Jessie, la « zone " partie. … ' se trouve dans le fichier "named.conf.default-zones". Pas besoin de l'ajouter au fichier "named.conf"
Fichier /Etc/bind/named.conf.default-zones
Remarque : depuis Debian 7 « Wheezy », bind9 intègre un fichier contenant les zones de transfert, de retour et de diffusion par défaut.
// faire autorité pour les zones de transfert et de retour localhost, et pour // zones de diffusion selon RFC 1912 zone "localhost" type de maître ; fichier "/etc/bind/db.local" ; ; zone "127.in-addr.arpa" type de maître ; fichier "/etc/bind/db.127" ; ; zone "0.in-addr.arpa" type de maître ; fichier "/etc/bind/db.0" ; ; zone "255.in-addr.arpa" type de maître ; fichier "/etc/bind/db.255" ; ;
Fichier /Etc/bind/named.conf.options
Ce fichier contient toutes les options de configuration du serveur DNS.
choix répertoire "/var/cache/bind" ; // Port d'échange entre les serveurs DNS adresse source de la requête * port *; // Transférez les requêtes à 192.168.1.1 si ce serveur ne sait pas comment résoudre ces adresses. // On pourrait aussi bien informer les serveurs DNS du FAI plutôt que d'informer // l'adresse IP du routeur (xxxbox) vers l'avant uniquement ; transitaires 192.168.1.1; ; auth-nxdomain non ; # conforme à la RFC1035 // A partir de la 9.9.5 ARM, désactiver le scan des interfaces pour éviter l'arrêt intempestif de l'écoute intervalle d'interface 0 ; // Écoute sur les interfaces locales uniquement (IPV4) écouter-sur-v6 aucun ; ; écoute 127.0.0.1; 192.168.0.1 ; ; // Ne pas transférer les informations de zone vers le DNS secondaire autoriser le transfert aucun ; ; // Accepte les requêtes pour le réseau interne uniquement allow-query internes ; ; // Autoriser les requêtes récursives pour les hôtes locaux allow-recursion internes; ; // Ne rend pas la version de BIND publique aucune version ; ;
Le port associé à l'option source-requête ne doit en aucun cas être gelé car cela affaiblit les transactions DNS dans le cas d'un résolveur.
M. Rash a écrit un article intéressant à ce sujet et sur la façon de forcer le port source de manière aléatoire via iptables : Atténuer les attaques par empoisonnement du cache DNS avec iptables
Afin de diminuer le timeout des connexions UDP, et ainsi mettre en évidence la randomisation qui par défaut est de 30s par tuple, il suffit de mettre à jour le paramètre net.netfilter.nf_conntrack_udp_timeout
# sysctl -w net.netfilter.nf_conntrack_udp_timeout = 10
pour obtenir un timeout de 10s.
Fichier /Etc/bind/named.conf.local
Ce fichier contient la configuration locale du serveur DNS, il déclare les zones associées au domaine.
// Gérer les fichiers journaux inclure "/etc/bind/named.conf.log" ; // Gérer le domaine example.com // ------------------------------ // - Le serveur est défini comme maître sur ce domaine // - Il n'y a pas de redirecteur pour ce domaine car nous en avons le contrôle. // Pour tous les autres domaines, nous utiliserons le redirecteur mentionné dans *named.conf.options* // - Les entrées sur le domaine peuvent être ajoutées dynamiquement avec la clé ns-example-com_rndc-key zone "exemple.com" type de maître ; fichier "/var/cache/bind/db.example.com" ; transitaires ; allow-update clé ns-example-com_rndc-key ; ; ; zone "0.168.192.in-addr.arpa" type de maître ; fichier "/var/cache/bind/db.example.com.inv" ; transitaires ; allow-update clé ns-example-com_rndc-key ; ; ; // Pensez à ajouter les zones 1918 ici, si elles ne sont pas utilisées dans votre // organisation inclure "/etc/bind/zones.rfc1918" ;
REMARQUE : si vous créez un nom de domaine complet local et que vous l'appelez .local, il entre en collision avec d'autres paquets (lesquels ?). Modifiez /etc/nsswitch.conf et déplacez "dns" juste après "files" sur la ligne hosts. Cela fera fonctionner les domaines .local.
Fichier /Etc/bind/named.conf.log
Sous Debian Jessie, ce fichier doit être créé dans /etc/bind
journalisation mise à jour_debug du canal fichier "/var/log/update_debug.log" versions 3 taille 100k ; débogage de gravité ; sévérité d'impression oui ; temps d'impression oui ; ; channel security_info fichier "/var/log/security_info.log" versions 1 taille 100k ; informations sur la gravité ; sévérité d'impression oui ; temps d'impression oui ; ; log_bind du canal fichier "/var/log/bind.log" versions 3 taille 1m; informations sur la gravité ; catégorie d'impression oui ; sévérité d'impression oui ; temps d'impression oui ; ; catégorie par défaut bind_log; ; catégorie serveurs-lames null; ; mise à jour de catégorie update_debug; ; catégorie update-security update_debug; ; catégorie sécurité info_sécurité; ; ;
Nous définissons ici les différentes méthodes de journalisation pour les différentes catégories. La première catégorie est, comme son nom l'indique, la catégorie par défaut qui est généralement attribuée à syslog. Toute catégorie non mentionnée est assimilée à la catégorie par défaut. Pour une liste des différentes catégories, consultez le manuel de référence de l'administrateur pour bind9. Concernant les serveurs lames, nous ignorons tous les logs qui leur sont associés. Il peut être nécessaire de créer /var/log dans le chroot plus tard.
Ressources d'enregistrements (RR)
Un DNS est composé de plusieurs enregistrements, les RR ou Resource Records, définissant les différentes informations relatives au domaine. Le premier enregistrement est destiné à la résolution de noms, dans notre cas, il s'agit du fichier db.example.com. La seconde sera liée à la résolution des noms inverses ; il s'agit du fichier db.example.com.inv.
Les fichiers dans var/cache/bind/
- RR pour la résolution de nom (fichier db.example.com)
$ TTL 3600 @ DANS SOA sid.example.com. racine.exemple.com. ( 2007010401 ; En série 3600 ; Rafraîchir [1h] 600 ; Retenter [10m] 86400 ; Expiré [1d] 600); TTL de cache négatif [1h] ; @ IN NS sid.example.com. @ IN MX 10 sid.exemple.com. sid IN A 192.168.0.1 graver IN A 192.168.0.2 pop IN CNAME sid www IN CNAME sid mail IN CNAME sid
- RR pour la résolution inversée (fichier db.example.com.inv)
@ DANS SOA sid.example.com. racine.exemple.com. ( 2007010401 ; En série 3600 ; Rafraîchir [1h] 600 ; Retenter [10m] 86400 ; Expiré [1d] 600); TTL de cache négatif [1h] ; @ IN NS sid.example.com. 1 IN PTR sid.example.com. 2 IN PTR etch.example.com.
Quelques explications :
$ TTL : (Time To Live) exprime la durée (en secondes) de validité, par défaut, des informations contenues dans les RR. Une fois ce délai expiré, il est nécessaire de revérifier les données. Les différents types :
-
SOA : permet de définir les informations relatives à la zone. Dans ce cas, le nom du serveur DNS principal "sid.example.com". et l'adresse email du contact technique (root.example.com. ; le @ est remplacé par un point). Il est composé de plusieurs champs :
-
1. En série : est un entier non signé de 32 bits. Il s'agit du numéro de série à incrémenter à chaque modification du fichier. Il permet au serveur secondaire de recharger les informations dont il dispose. L'usage général vient de le formater ainsi AAAAMMJJXX, soit pour la première modification du 01/04/2007 -> 2007040101, pour la seconde 2007040102.
-
2. Rafraîchir : définit la période de rafraîchissement des données.
-
3. Retenter : si une erreur se produit lors du dernier rafraîchissement, elle sera répétée à la fin du délai Retry.
-
4. Expiré : le serveur sera considéré comme indisponible après la période d'expiration.
-
5. Cache TTL négatif : définit la durée de vie d'une réponse NXDOMAIN de notre part.
-
-
N.-É. : saisissez le nom des serveurs de noms pour le domaine.
-
MX : fournit des informations sur le serveur de messagerie. Plusieurs peuvent être définis. Ainsi, il est possible de leur donner une priorité en leur attribuant un numéro. Plus le nombre est faible, plus la priorité est élevée.
-
À : associe un nom d'hôte à une adresse ipv4 (32 bits)
-
AAAA : associe un nom d'hôte à une adresse ipv6 (128 bits)
-
CNAME : identifie le nom canonique d'un alias (un nom pointant vers un autre nom)
-
RPT : c'est simplement la résolution inverse (l'inverse du type A).
Classes : IN détermine l'association avec la classe Internet. D'autres classes sont disponibles (CH et HS). Pour plus d'informations vous pouvez consulter la RFC 1035
Fichier /Etc/resolv.conf
recherche example.com
Ce n'est pas le plus compliqué celui-là !
Par défaut, la configuration de liaison utilise la liaison utilisateur pour exécuter le démon nommé.
Ainsi, nous trouvons cette option dans /etc/default/bind9 (REMARQUE : ceci n'est pas valide pour Debian Jessie qui utilise systemd) :
OPTIONS = "- vous lier"
Le script de démarrage de liaison /etc/init.d/bind9 lit ce fichier de configuration au démarrage du service.
Il est recommandé de démarrer bind en tant qu'utilisateur simple, mais pour démarrer le démon dans un environnement chroot, nous devons également spécifier le répertoire chroot. Cela se fait en utilisant la même variable OPTIONS dans /etc/default/bind9.
Pour démarrer, arrêtez le service de liaison :
/etc/init.d/bind9 stop
Puis éditez /etc/default/bind9 (pas pour Debian Jessie) :
OPTIONS = "- u bind -t / var / bind9 / chroot"
Pour Jessie, créez le fichier /etc/systemd/system/bind9.service avec les options "-t/var/bind9/chroot":
[Unit] Description = Serveur de noms de domaine BIND Documentation = homme : nommé (8) Après = network.target [Service] ExecStart =/usr/sbin/named -f -u bind -t/var/bind9/chroot ExecReload = / usr / sbin / rndc recharger ExecStop = / usr / sbin / rndc stop [Install] WantedBy = multi-user.target
Pour Jessie, après avoir créé le fichier ci-dessus, mettez à jour le lien symbolique vers le fichier avec :
systemctl réactiver bind9
Créez maintenant la structure du répertoire chroot :
mkdir -p/var/bind9/chroot/etc, dev, var/cache/bind, var/run/named
Créez les fichiers spéciaux de périphérique requis et définissez les autorisations appropriées :
mknod / var / bind9 / chroot / dev / null c 1 3 mknod / var / bind9 / chroot / dev / random c 1 8 mknod / var / bind9 / chroot / dev / urandom c 1 9 chmod 660 / var / bind9 / chroot / dev / null, random, urandom
Déplacez le répertoire de configuration actuel vers le nouveau répertoire chroot :
mv / etc / bind / var / bind9 / chroot / etc
Créez maintenant un lien symbolique dans / etc pour la compatibilité :
ln -s / var / bind9 / chroot / etc / bind / etc / bind
Si vous souhaitez utiliser le fuseau horaire local dans le chroot (par exemple, pour syslog) :
cp / etc / heure locale / var / bind9 / chroot / etc /
Modifiez le propriétaire des fichiers que vous venez de déplacer et le reste de la structure de répertoires du chroot nouvellement créé :
chown bind : bind /var/bind9/chroot/etc/bind/rndc.key chmod 775 / var / bind9 / chroot / var / cache / bind, run / named chgrp bind / var / bind9 / chroot / var / cache / bind, run / named
Modifiez la variable PIDFILE dans /etc/init.d/bind9 dans le bon chemin :
PIDFILE =/var/bind9/chroot/var/run/named/named.pid
Enfin, dites à rsyslog d'écouter les journaux de liaison au bon endroit :
echo " $ AddUnixListenSocket / var / bind9 / chroot / dev / log"> /etc/rsyslog.d/bind-chroot.conf
Redémarrez rsyslog et lancez bind :
/etc/init.d/rsyslog redémarrer ; /etc/init.d/bind9 démarrer
Comme je l'ai mentionné au début, l'attribution des adresses IP sur le réseau local se fait par le serveur DHCP. Ainsi, pour définir notre serveur DNS pour les différents clients, il faut ajouter les deux lignes suivantes au fichier de configuration DHCP :
option de nom de domaine "exemple.com"
option de serveur de nom de domaine sid.example.com
Vous devez ajouter aux fichiers (je pense) les zones pour lesquelles DHCP doit se mettre à jour automatiquement.
Syntaxe (paramètres "=>" commentaires) :
zoné [name.of.the.zone.]
-
primaire 127.0.0.1 ; => le serveur DNS principal est sur la même machine que DHCP
clé rndc-clé; => il faut fournir la clé de sécurité (via un inclure) au début du fichier de configuration du serveur DHCP,
Exemples de [name.of.the.zone.] (avec le "." à la fin):
– exemple.com. : pour la zone directe de cet objet,
– 0.168.192.in-addr.arpa. : pour la zone inverse de cet objet.
Pour plus d'informations sur la configuration de la mise à jour dynamique des enregistrements DNS via DHCP, cliquez ici
-
La commande creuse : Il vous permet d'interroger directement le serveur DNS de votre choix et d'obtenir de nombreuses informations, en plus de la résolution de nom et de la résolution inverse.
$ creuser nomad-frjo.stones.lan ; << >> DiG 9.4.2 << >> nomade-frjo.stones.lan ;; options globales : printcmd ;; Réponse obtenue : ;; - >> HEADER << - code opération : QUERY, statut : NOERROR, id : 15760 ;; drapeaux : qr aa rd ra ; REQUÊTE : 1, RÉPONSE : 1, AUTORITÉ : 2, SUPPLÉMENTAIRE : 2 ;; QUESTION DE SECTION : ; nomade-frjo.stones.lan. DANS UN ;; SECTION RÉPONSE : nomad-frjo.stones.lan. 900 IN A 192.168.0.242 ;; SECTION AUTORITÉ : pierres.lan. 604800 EN N.-É. emerald.stones.lan. pierres.lan. 604800 IN NS diamond.stones.lan. ;; SECTION SUPPLÉMENTAIRE : diamant.pierres.lan. 604800 DANS UN 192.168.0.1 emerald.stones.lan. 604800 DANS UN 192.168.0.2 ;; Temps de requête : 20 ms ;; SERVEUR : 127.0.0.1 # 53 (127.0.0.1) ;; QUAND : ven. 28 mars 20:53:09 2008 ;; MSG TAILLE rcvd: 131 $ creuser -x 192.168.0.242 ; << >> DiG 9.4.2 << >> -x 192.168.0.242 ;; options globales : printcmd ;; Réponse obtenue : ;; - >> HEADER << - code opération : QUERY, statut : NOERROR, id : 37702 ;; drapeaux : qr aa rd ra ; REQUÊTE : 1, RÉPONSE : 1, AUTORITÉ : 2, SUPPLÉMENTAIRE : 2 ;; QUESTION DE SECTION : ; 242.0.168.192.in-addr.arpa. EN RPT ;; SECTION RÉPONSE : 242.0.168.192.in-addr.arpa. 900 IN PTR nomade-frjo.stones.lan. ;; SECTION AUTORITÉ : 0.168.192.in-addr.arpa. 604800 IN NS diamond.stones.lan. 0.168.192.in-addr.arpa. 604800 EN N.-É. emerald.stones.lan. ;; SECTION SUPPLÉMENTAIRE : diamant.pierres.lan. 604800 DANS UN 192.168.0.1 emerald.stones.lan. 604800 DANS UN 192.168.0.2 ;; Temps de requête : 19 msec ;; SERVEUR : 127.0.0.1 # 53 (127.0.0.1) ;; QUAND : ven. 28 mars 20:53:31 2008 ;; MSG TAILLE rcvd: 155
-
La commande nslookup : Il est moins efficace mais reste utile.
$ nslookup etch Serveur : 192.168.0.1 Adresse : 192.168.0.1 # 53 Nom : etch.exemple.com Adresse : 192.168.0.2 $ nslookup 192.168.0.2 Serveur : 192.168.0.1 Adresse : 192.168.0.1 # 53 2.0.168.192.in-addr.arpa name = etch.example.com.
-
nommé-checkconf : Il permet de vérifier la syntaxe des fichiers de configuration de Bind9.
#named-checkconf -z zone localhost / IN: chargé série 1 zone 127.in-addr.arpa/IN : chargé série 1 zone 0.in-addr.arpa/IN : chargé série 1 zone 255.in-addr.arpa/IN : chargé série 1 zone estar.lan / IN: chargé série 20080315 zone 0.168.192.in-addr.arpa/IN : chargé série 20080315 zone 10.in-addr.arpa/IN : chargé série 1 zone 16.172.in-addr.arpa/IN : chargé série 1 zone 17.172.in-addr.arpa/IN : chargé série 1 zone 18.172.in-addr.arpa/IN : chargé série 1 zone 19.172.in-addr.arpa/IN : chargé série 1 zone 20.172.in-addr.arpa/IN : chargé série 1 zone 21.172.in-addr.arpa/IN : chargé série 1 zone 22.172.in-addr.arpa/IN : chargé série 1 zone 23.172.in-addr.arpa/IN : chargé série 1 zone 24.172.in-addr.arpa/IN : chargé série 1 zone 25.172.in-addr.arpa/IN : chargé série 1 zone 26.172.in-addr.arpa/IN : chargé série 1 zone 27.172.in-addr.arpa/IN : chargé série 1 zone 28.172.in-addr.arpa/IN : chargé série 1 zone 29.172.in-addr.arpa/IN : chargé série 1 zone 30.172.in-addr.arpa/IN : chargé série 1 zone 31.172.in-addr.arpa/IN : chargé série 1 zone 168.192.in-addr.arpa/IN : chargé série 1
-
zone de contrôle nommée : Il permet de vérifier la validité des fichiers de zone avant de recharger la configuration.
# zone de contrôle nommée example.com /var/cache/bind/db.example.com zone example.com/IN : chargé série 20080315 d'accord
# named-checkzone 0.168.192.in-addr.arpa /var/cache/bind/db.example.com.inv zone 0.168.192.in-addr.arpa/IN : chargé série 20080315 d'accord
? À faire
- Terminer les définitions
- Ajoutez DNSSEC.
CatégorieCatégorie de débogageCatégorie de logicielCatégorie de réseauL10nFrUpdate
Commentaires
Laisser un commentaire