DNS avec Bind 9

I. Présentation

Un serveur DNS (Domain Name System) est un serveur de noms qui gère les correspondances entre les noms de domaine et les adresses IP. Ce qui est fort utile pour naviguer sur internet, imaginez-vous mémoriser l'adresse IP de chaque site sur lequel vous souhaitez aller ? On peut penser que sans serveur DNS il n'y a plus d'internet.

De plus, dans le cas d'un réseau local si vous souhaitez faire de la résolution de noms c'est à dire que les hôtes du LAN puissent communiquer entre elles grâce à leur nom de domaine, le serveur DNS permet de donner un nom de domaine complet à une machine. Ainsi il y aura une correspondance entre l'adresse IP de l'hôte et le nom que vous lui donnez grâce au DNS.

A. Quels sont les serveurs DNS utilisés pour naviguer sur internet ?

Dans le monde il y a uniquement quelques serveurs DNS racine (appelé aussi serveurs Roots) - qui sont au nombre de 13 - c'est à dire les serveurs auxquels tout le monde se référence et qui permettent à internet d'exister. Même le petit serveur DNS de notre LAN se réfère à un de ces serveurs racine lorsque vous souhaitez naviguer sur internet. En effet, le serveur DNS du LAN gère que certaines zones c'est à dire uniquement les zones du nom de domaine de votre entreprise pour une résolution de noms en interne. Si les serveurs DNS racines sont attaqués, il y aurait une coupure d'internet à l'échelle mondiale.

B. Que se passe t-il lorsqu'on accède à un site internet ?

Lorsque vous accédez à un site internet, à Neoflow.fr par exemple, il y a une résolution de noms qui permet de retrouver l'adresse IP du serveur hébergeant le site. L'intervention du serveur DNS est transparente pour l'utilisateur mais essentiel pour l'aboutissement de la requête. Le serveur DNS est l'intermédiaire entre le client qui exécute la requête et l'hôte ciblée, pour que la requête puisse aboutir.

C. Résolution du nom de domaine vers l'adresse IP uniquement ?

Non, le serveur DNS peut également faire de la résolution inverse c'est à dire retrouver le nom de l'hôte à partir de l'adresse IP de l'hôte.

D. Serveur DNS sous Linux, avec quel paquet ?

Sous Linux, lorsqu'on parle de serveur DNS, BIND y est associé. En effet, BIND est la référence en matière de serveur DNS c'est donc lui que nous allons utiliser pour la mise en place du DNS.

E. Structure d'un DNS

Un serveur DNS gère une base de données où sont stockés les enregistrements qui lui permettent de faire correspondre un nom de domaine à une adresse IP, et inversement. On peut représenter une architecture DNS avec un arbre inversé où chaque nœud représente un sous-domaine au domaine principal ou un hôte.

F. Domaine de premier et de second niveau

Les domaines de premier niveau correspondent à tous les domaines ayant l'extension : .fr, .biz, .com, .gouv, .info, .edu, .net, .org, etc... On parle de TLD (Top Levels Domains) soit "Domaines de premier niveau". Les domaines de second niveau quant à eux correspondent au nom qui précédent le domaine de premier niveau. Par exemple, si on a "neoflow.fr", "neoflow" est un domaine de second niveau et "fr" un domaine de premier niveau.

G. Schématisation de l'architecture DNS

bind1

  •  La racine est représentée par le point qui représente la base de l'arbre inversé,
  •   fr, com, org, net,... représente les TLD,
  •   neoflow correspond à un sous domaine du domaine "fr".
  •   www et mail sont des machines du domaine neoflow.fr.

II. Ce que nous allons faire...

Nous allons créer le domaine "flo1.fr" qui contiendra un serveur Web qui doit être enregistré dans le DNS pour être accessible via le nom de domaine par les postes de travail du LAN. On devra donc pouvoir accéder au serveur web en saisissant "www.flo1.fr", en étant sur un poste de travail du réseau local (le serveur DNS que nous allons configurer deviendra le serveur DNS des postes de travail).

A. L'architecture DNS

bind2

B. Le schéma réseau

bind3

C. Les noms d'hôtes

  •  Le serveur DNS : "srvdns",
  •  Le serveur Web : "srvweb".

III. Mise en place du serveur DNS

Il est temps de préparer notre serveur DNS sous Linux avec Bind9, pour cela, après avoir installé votre distribution Linux et configuré le réseau, suivez les étapes suivantes.

A. Installation du paquet bind9

Commençons par installer le paquet bind9 pour transformer notre serveur en serveur DNS, grâce aux commandes suivantes :

apt-get update # On met à jour la liste des paquets
apt-get install bind9 # On installe le paquet bind9 grâce à Aptitude

B. Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le répertoire suivant :

bind4

Ce répertoire contient les fichiers de configuration suivant :
fichier de conf bind

  •  Les fichiers "db." correspondent aux fichiers de zones incluent par défaut dans Bind. Ils vont nous servir de modèle pour la création de nos fichiers de zones.
  •  Le fichier "named.conf" est le fichier de configuration de Bind9, dans lequel on trouve un lien vers 3 autres fichiers : "named.conf.options" contient les options de configuration de Bind; "named.conf.local" sert à déclarer des zones; "named.conf.default-zones" contient la définition des zones inclues par défaut avec Bind.

bind5

C. Sauvegarde des fichiers de bases

Par sécurité, vous pouvez, si vous le souhaitez copier les 2 fichiers de Bind (named.conf.options et named.conf.local) qui sont susceptibles d'être modifiés lors de la mise en place du DNS. Pour cela utilisez les commandes suivantes :

cd /etc/bind
cp named.conf.options named.conf.options.sav
cp named.conf.local named.conf.local.sav

D. Configuration de Bind

Comme je l'ai dis précédemment, le fichier de configuration global de Bind est le fichier "named.conf.options", voici son contenu :

bind6

On peut voir qu'il y a beaucoup de lignes commentées (celles qui débutent par "//"), en ce qui concerne les options activent, voici quelques informations :

  •  directory : il s’agit du chemin vers le répertoire qui contient les fichiers de zone. C'est-à-dire que lorsqu’on indique en nom de fichier de zone « db.flo1.fr », Bind sait que le fichier se trouve dans « /etc/bind ».
  •  dnssec-validation auto : la valeur par défaut est yes, le DNSSEC est un système qui permet de sécuriser les échanges DNS.
  •  auth-nxdomain no : Le NXDOMAIN est le message qui signifie que le nom de domaine n’existe pas (Non eXistent Domain).
  •  listen-on-v6 : Active le fait de résoudre les requêtes sur des adresses IPv6.

Etant donné que nous configurons un seul serveur DNS et que nous mettons en place une configuration de base, nous pouvons laisser la configuration comme elle l'est actuellement.

E. Construction des fichiers de zone

Tout d'abord, il y a deux types de zones :

  •  Les zones "normales" : elles permettent de retrouver l'adresse IP à partir du nom.
  •  Les zones "inverses" : elles permettent de retrouver le nom à partir de l'adresse IP, c'est à dire de faire l'inverse des zones normales. Ce qui permet une résolution dans les deux sens.
  •  La construction d'un fichier de zone :

bind7

  •  "$TTL 86400" correspond à la durée de vie des informations fournies et donc la durée pendant laquelle elles sont gardées en cache par les autres serveurs DNS. Par défaut, ce temps est définit sur 24 heures (86400 secondes).
  •  "SOA" signifie Start Of Authority, ceci indique le serveur qui a autorité sur la zone, puis l’adresse mail du contact technique dont le caractère « @ » est remplacé par un «.».
  •  Serial "1" : C’est la version du fichier de configuration. Le serial est surtout utile quand plusieurs serveurs DNS agissent sur une même zone. Le serial est incrémenté lorsque des modifications sont effectuées sur la zone, ce qui permet aux autres serveurs DNS de voir que des modifications ont été effectuées.
  •  Refresh "604800" : C’est le délai de rafraichissement pour la synchronisation des configurations entre plusieurs serveurs DNS.
  •  Retry "86400" : C’est le délai au bout duquel un serveur DNS secondaire devra retenter une synchronisation si celle qu'il a fait au bout du temps "refresh" a échouée.
  •  Expire "2419200" : Si toutes les tentatives de synchronisation échouent, un serveur DNS secondaire considérera qu'il ne peut plus répondre aux requêtes concernant cette zone une fois que le temps est écoulé. Par défaut le temps est de "2419200" secondes, soit 28 jours.
  • Negative Cache TTL "86400" : Durée de conservation dans le cache de l'information "NXDOMAIN" lorsqu'un incident se produit.
  •  Le symbole "@" : Ce symbole permet de représenter le nom de domaine de la zone. Par exemple, dans notre cas lorsqu'on met "@" c'est comme si on met "flo1.fr".

Note : Dans le fichier tout ce qui est après un point virgule n'est pas pris en compte par Bind. Pour cause, ce sont des commentaires.

A la suite de l'en-tête du fichier, on peut écrire les enregistrements DNS en mettant un enregistrement par ligne.

F. Les types d'enregistrements

Il y a plusieurs types d'enregistrements qui ont chacun un rôle différent :

  •  NS (Name Server) : Sert à définir le ou les serveurs DNS qui répondent à cette zone.
  •  A : Enregistrement d'un hôte ayant une adresse IPv4 (32 bits).
  •  AAAA : Enregistrement d'un hôte ayant une adresse IPv6 (128 bits).
  •  CNAME (Canonical Name) : Enregistrement qui sert d'alias à un enregistrement "A" déclaré auparavant.
  •  MX : Sert à définir le ou les serveurs SMTP à utiliser pour l'envoie des mails selon un ordre de priorité définit dans l'enregistrement.

Dans le cas de ce tutoriel, nous avons besoin de créer des enregistrements de type "A" et "CNAME", l'enregistrement de type "NS" étant déjà définit par défaut.

G. La syntaxe d'un enregistrement

  •  Dans les zones « normales » pour les enregistrements « A » :
<nom-de-l'hote> IN A
  •  Dans les zones « normales » pour les enregistrements « CNAME» :
<nom-de-l'alias> IN CNAME <nom-de-l'enregistrement-de-référence>
  •  Dans les zones « inverses » pour les enregistrements « PTR » :
IN PTR <nom-de-l'hote>

 

Remarque : L’adresse IP ne doit pas être indiquée sur 4 octets parce que si la zone inverse est « 192.168.1 » on indique uniquement le dernier octet de l’adresse IP dans les enregistrements. Si la zone est « 172.16 » on indiquera les deux derniers octets de l’adresse IP dans les enregistrements.

H. Mise en place de la zone « flo1.fr »

Dans un premier temps, on va mettre en place la zone « normale » c'est-à-dire celle qui permet de retrouver l’adresse IP à partir du nom. De ce fait, le nom de la zone sera le nom du domaine c'est-à-dire « flo1.fr ».

Pour cela, éditez le fichier « named.conf.local » qui permet d’indiquer les zones, comme je l’ai dit précédemment. Ajoutez-y ceci :

// Déclaration de la zone « flo1.fr » :
zone "flo1.fr" {
type master;
file "/etc/bind/db.flo1.fr";
allow-update { none; };
};
  •  zone "flo1.fr": On définit le nom de la zone.
  •  type master : On indique que ce serveur fait autorité sur la zone.
  •  file "/etc/bind/db.flo1.fr" : On indique le lien vers le fichier contenant la base d’enregistrements pour la zone.
  •  allow-update { none ;} : On n’autorise pas les mises à jour du fichier d’enregistrements par un tiers, ce qui permet d’augmenter la sécurité et être sur qu’il n’y ait que le serveur DNS qui s’occupe de la zone.

Remarque : Il est important d’indiquer un point virgule à chaque fin de ligne pour la définition des options, sinon le fichier de configuration sera incorrecte pour Bind.

Une fois que vous avez déclaré la zone, quittez le fichier. Puis, copiez le fichier « db.empty » sous le nom « db.flo1.fr » (qui correspond au nom que nous avons indiqué dans la déclaration de la zone) pour partir d’un fichier modèle :

cd /etc/bind
cp db.empty db.flo1.fr

Ensuite, éditez le fichier “db.flo1.fr” pour que l’on y ajoute les enregistrements nécessaires. On va ajouter un enregistrement pour le serveur Web, qui, je vous le rappel, a « 192.168.1.101 » comme adresse IP et « srvweb » comme nom. De plus, on ajoute un enregistrement pour le serveur DNS lui-même. Ce qui donnera les enregistrements suivants :

srvdns IN A 192.168.1.100
srvweb IN A 192.168.1.101

Cet enregistrement permettra de joindre le serveur web grâce au nom de domaine « srvweb.flo1.fr » mais pas « www.flo1.fr ». On pourrait créer un second enregistrement de type « A » pour faire correspondre l’adresse IP du serveur Web au nom d’hôte « www » mais on va utiliser le type d’enregistrement « CNAME ». Ainsi, on créera un alias de « srvweb » en « www », en mettant l’enregistrement suivant :

www IN CNAME srvweb

De ce fait, on pourra joindre le serveur Web en utilisant le FQDN « www.flo1.fr ».

Note : Un FQDN (Fully Qualified Domain Name) est un nom de domaine pleinement qualifié, contenant le nom d’hôte et le nom du domaine.

Lorsqu’on interroge le serveur DNS pour la résolution de noms, il voit que « www » correspond à « srvweb » et que « srvweb » correspond à l’adresse IP « 192.168.1.101 ». De ce fait, il y a deux requêtes effectuées dans la base.

Note : Une machine qui se nomme « poste1 » n’est pas forcément renseignée sous le nom « poste1 » dans le DNS, mais pour la logique et pour s’y retrouver c’est mieux.

I. Redémarrage de Bind9

Pour que Bind9 prenne en compte les changements que nous venons d’effectuer, on le redémarrage grâce à la commande suivante :

service bind9 restart

J. Test de la configuration et des fichiers de zones

Des commandes de test de configuration et de test des zones sont comprises dans Bind, les voici :

  •  Test de la zone « flo1.fr » :
cd /etc/bind # Répertoire où sont stockés les fichiers de zones
named-checkzone flo1.fr db.flo1.fr # named-checkzone

Si tout est correct, vous obtiendrez le résultat suivant :

bind8

  •  Test de la configuration de Bind :
cd /etc/bind # Répertoire où sont stockés les fichiers de zones
named-checkconf named.conf.options # named-checkconf

S’il n’y pas d’erreurs de détectées, aucun message ne sera retourné.

K. Configuration des paramètres réseaux du serveur

Au début, le serveur avait nécessairement un serveur DNS de déclaré pour pouvoir télécharger les paquets, maintenant qu’il est lui-même serveur DNS, nous devons le lui dire. Pour cela, on modifie le fichier « resolv.conf » se situant dans « etc » :

search flo1.fr # Domaine de recherche
domain flo1.fr # Domaine
nameserver 192.168.1.101 # Serveur DNS (lui-même)

Ensuite le réseau pour que la configuration soit prise en compte :

/etc/init.d/networking restart

L. La commande « nslookup »

Nslookup est un utilitaire disponible sous Windows et Linux qui permet d’interroger un serveur DNS dans le but d’obtenir des informations sur la résolution d’un nom en adresse IP et inversement. Par exemple, sur le serveur, saisissez la commande :

nslookup srvdns.flo1.fr

En vous indique d’abord quel est le serveur qui vous a répondu puis en dessous le nom de l’enregistrement et l’adresse IP qui lui correspond. Suite à ce résultat on peut tirer la conclusion que notre serveur DNS fonctionne.

bind9

Si on fait la même chose pour l’enregistrement « www.flo1.fr » on peut voir que notre alias c'est-à-dire l’enregistrement CNAME fonctionne :

 bind12

On peut voir également qu’on accède à notre serveur web en saisissant « www.flo1.fr »:
bind14

M. La zone inverse

Maintenant que notre première zone fonctionne, nous allons créer la zone inverse à celle-ci c'est-à-dire celle qui permettre de retrouver le nom « srvdns.flo1.fr » à partir de l’adresse IP « 192.168.1.100 ».

Cela se fait sur le même principe que pour la zone « normale ». Pour être plus précis, on édite le fichier « named.conf.local » et on ajoute la déclaration de la zone. Ensuite, on copie fait une copie « db.empty » pour partir d’un fichier modèle puis on ajoute les enregistrements dans le fichier de zone.

  •  Modification de named.conf.local :
// Déclaration de la zone inverse à « flo1.fr » :
zone "1.168.192.in-addr.arpa" {
type master;
file "db.inverse.flo1.fr";
allow-update { none; };
};

Vous pouvez remarquer que le nom de la zone est « 1.168.192.in-addr.arpa », tout d’abord on indique, dans l’ordre inverse, les 3 octets de l’adresse IP de la zone représentant le réseau, donc pour le réseau « 192.168.1.0 » ça donnera « 1.168.192 ». Ensuite on ajoute « in-addr.arpa » qui est un nom de domaine créé et utilisé mondialement pour la résolution inverse.

  •  Les enregistrements dans le fichier « db.inverse.flo1.fr » :
100 IN PTR srvdns
101 IN PTR srvweb

L’enregistrement de type PTR, pour “Pointer Record” permet d’associer une adresse IP à un nom, ce qui correspond à ce que nous souhaitons faire dans cette zone.

  •  Que faire après ?

Comme pour la zone précédente, il faut redémarrer le service bind9. Ensuite, vous pouvez refaire des tests de configuration et des zones grâce à named-checkconf et named-checkzone. Vous pouvez également faire des tests grâce à nslookup en mettant une adresse IP plutôt qu’un nom pour vérifier si la zone inverse fonctionne bien.

bind11

IV. Vider le cache DNS de Windows

Si votre configuration DNS vous semble bonne sur votre serveur DNS et que votre client Windows a bien comme DNS votre serveur, et lorsque vous faites un nslookup sur un nom ou une adresse IP vous obtenez une erreur, videz le cache DNS de Windows grâce à la commande suivante :

ipconfig /flushdns

V. Débugger le serveur DNS

En cas de problème, vous pouvez également consulter les logs du système qui vous aideront à les résoudre. Pour rappel on les trouve dans le fichier suivant :

/var/log/syslog

Sinon, vous pouvez également utiliser le forum du site.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Co-Fondateur d'IT-Connect, je souhaite partager mes connaissances et expériences avec vous, et comme la veille techno' est importante je partage aussi des actus.

florian a publié 1601 articles sur IT-Connect.See all posts by florian

3 réactions sur “DNS avec Bind 9

  • 12/07/2017 à 01:29
    Permalink

    Merci à IT connect pour ce superbe TUTO, j’ai suivi ce tuto à la lettre et ma configuration fonctionne parfaitement, cela déjà quelque mois que je cherchais un tuto pour la mise place d’un serveur DNS, aujourd’hui c’est fait après plusieurs mois de recherche (en vain 🙁 )

    Les explications sont très claire, il suffit de les suivre.

    A+

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *