# Réseaux TCP/IP/Les serveurs DNS

Le DNS (Domain Name System) est un service qui permet d'effectuer la résolution de noms, c'est à dire d'associer une adresse IP à un FQDN (Full Qualified Domain Name) et inversement.

## FQDN

Un FQDN est composé d'un nom d'hôte et d'un nom de domaine, par exemple .wikibooks.org est un FQDN où est le nom d'hôte et wikibooks.org le nom de domaine.
Les noms de domaine sont organisés de manière hiérarchique, le domaine se trouvant le plus haut dans la hiérarchie est « . », il est omis dans les FQDN. En « dessous » dans la hiérarchie se trouvent les TLD (Top Level Domain).

## Le cours sur les serveurs DNS

Le Domain Name System (ou DNS, système de noms de domaine) est un système permettant d'établir une correspondance entre une adresse IP et un nom de domaine et, plus généralement, de trouver une information à partir d'un nom de domaine.

### Adresse FQDN

Dans un réseau TCP/IP, chaque machine possède une adresse FQDN (Fully Qualified Domain Name) encore appelée nom qualifié.
Le FQDN est l'association entre le nom de la machine et le domaine auquel elle appartient.
Exemple : .wikibooks.org. est le FQDN de la machine appartenant au domaine .wikibooks.org.
Ce nom a la structure ww.xx.yy.zz soit une suite d'éléments séparés par des points. Chaque élément est fait des lettres de l'alphabet, chiffres et/ou trait d'union, et ne peut excéder 63 caractères. L'ensemble d'un FQDN ne peut excéder 255 caractères.

### Résolution de noms directe

Dans un réseau IP, lorsqu’une machine A veut communiquer avec une machine B, la machine A connaît le nom FQDN de B.
Par exemple, lorsqu’on navigue sur le net, on connaît en général le nom FQDN des serveurs qu’on visite (exemple .wikibooks.org). Pour que A puisse communiquer avec B grâce au protocole IP, A va avoir besoin de connaître l’adresse IP de B.
A doit posséder un moyen d’effectuer la résolution de noms directe, c’est-à-dire un moyen de trouver l’adresse IP de B à partir de son nom qualifié. Le résolveur est le programme chargé de cette opération.

### Résolution de noms inverse

La machine B reçoit un datagramme IP en provenance de A. Ce datagramme contient l’adresse IP de A. B peut avoir besoin de connaître le nom FQDN de la machine A. B doit donc être capable de trouver le nom FQDN de A à partir de son adresse IP. C’est ce qu’on appelle la résolution de noms inverse.
Le résolveur est également chargé de cette opération.

### Résolution de noms par fichier hosts

Un fichier comprend l’adresse FQDN de chaque machine du réseau ainsi que son adresse IP. Cette méthode n’est envisageable que pour les réseaux très petits.

### Résolution de nom par serveur DNS (Domain Name System)

On installe un serveur de noms sur le réseau. Chaque machine du réseau doit connaître l’adresse IP de ce serveur DNS. Dès qu’une machine veut effectuer une résolution de noms directe ou inverse, elle va interroger le serveur de noms. L’administrateur doit configurer le serveur de noms pour que ce dernier connaisse l’adresse IP et le nom de toutes les machines du réseau.

### Notation inverse des adresses IP

Les DNS notent les adresses IP (partielles) dans l'ordre inverse et ajoutent le suffixe "IN-ADDR.ARPA".
Exemples :

### Zones directes et inverses

* Dans un réseau TCP/IP, chaque machine doit être capable de faire de la résolution de noms directe sur les adresses FQDN de toutes les machines du réseau.
* Chaque machine doit aussi être capable de faire de la résolution de noms inverses sur toutes les adresses IP du réseau.
* exemple :
Un réseau IP utilise les adresses IP 200.201.202.0 de masque 255.255.255.0 .
Ce réseau comporte 3 machines A, B et C d'adresse respective 200.201.202.1, 200.201.202.2 et 200.201.202.3 . Toutes les machines sont dans le domaine de noms toto.fr. Les adresses FQDN de A, B et C sont donc A.toto.fr., B.toto.fr. et C.toto.fr. Nous allons installer un serveur DNS sur la machine C.
Zone directe
C doit être capable à partir de n'importe quel nom du type *.toto.fr de fournir l'adresse IP de la machine. Dans le jargon TCP/IP, on dit que C a autorité sur la zone toto.fr.
Cette zone sert à faire de la résolution de noms directe.
Zone inverse
C doit être capable à partir de n'importe quelle adresse IP du type 200.201.202.* de fournir l'adresse FQDN de la machine.
Dans le jargon TCP/IP, on dit que C a autorité sur la zone 202.201.200.IN-ADDR.ARPA. . Cette zone sert à faire de la résolution de noms inverse.
Récapitulatif
Notre serveur DNS a donc autorité sur 2 zones : → toto.fr.
→ 202.201.200.IN-ADDR.ARPA. .
La configuration de chaque zone est écrite dans un fichier de zone.

### Panne d'un serveur DNS

* Un serveur DNS est un élément vital sur un réseau. S'il tombe en panne, les machines du réseau sont incapables de communiquer entre elles (À moins, bien sûr, que les machines connaissent directement l'adresse IP des machines du réseau avec lesquelles elle veulent communiquer).
* De plus, un serveur de noms DNS qui reçoit des requêtes de millions de machines peut être saturé.
* Le réseau entre une machine et son serveur DNS peut également tomber en panne.
* Dans les 3 cas, tout le réseau est en panne.

### Amélioration de la résistance aux pannes

* Pour améliorer la résistance aux pannes du réseau, on installe des serveurs de noms secondaires.
* Tout comme les serveurs primaires, ils sont capables de faire de la résolution de noms directe et inverse sur différentes zones.
* Un serveur secondaire s’installe lorsque le serveur DNS primaire est en marche (pas après la panne).

### Configuration d'un DNS secondaire

Tout serveur secondaire pour une zone donnée doit connaître l'adresse IP du serveur de noms primaire qui a autorité sur cette zone.
Lorsqu'on lance le serveur secondaire, il va interroger le serveur de noms primaire pour obtenir une copie du fichier de zone.
Pour une zone donnée, il ne peut y avoir qu'un seul serveur de noms primaire (sauf rares cas particuliers ou plusieurs serveurs primaires peuvent être nécessaires).
Par contre, il peut y avoir de nombreux serveurs de noms secondaires.

### Configuration des postes clients

Chaque machine doit connaître une liste de serveurs DNS primaires ou secondaires Cette liste doit comporter au moins un élément. Lorsqu’aucun serveur DNS n’est en panne, la machine va interroger en permanence le premier serveur de la liste.

### Serveur DNS en panne

Si la machine interroge le premier serveur DNS de la liste et que celui-ci ne répond pas, la machine va interroger le deuxième de la liste. Si le deuxième ne répond pas, on interroge le troisième. Si tous les serveurs DNS sont en panne, tout le réseau est en panne. 'Remarque : Si la machine interroge le premier serveur DNS de la liste et que celui-ci répond que la machine n’existe pas, la machine ne va pas interroger le deuxième de la liste.

### Répartition de la charge

Le premier serveur DNS de la liste n’est pas forcément le serveur primaire.
Si le réseau contient un DNS primaire A et 2 serveurs secondaires B et C, il est bon de répartir la charge entre A, B et C :
1/3 des machines aura comme liste A, B et C
1/3 des machines aura comme liste B, C et A
1/3 des machines aura comme liste C, A et B

### Mise à jour d'un serveur DNS primaire

La mise à jour des serveurs de noms primaires est effectuée par l'administrateur de réseau. Il doit rentrer chaque machine du réseau dans la zone directe et dans la zone inverse.

### Mise à jour d'un serveur DNS secondaire

La mise à jour des serveurs de noms secondaires est automatique. Chaque serveur de noms secondaire doit interroger à intervalle de temps régulier (par exemple toutes les 3 heures) le serveur de noms primaire et il met à jour sa copie locale du fichier de zone.

### Un problème lié à la mise à jour du DNS

L'administrateur met à jour un serveur de noms primaire et lui rajoute une machine Si le serveur de noms secondaires se met à jour toutes les 3 heures, il peut se passer un délai de plusieurs heures avant que les serveurs de noms secondaires soient à jour. Cela peut être très gênant pour le fonctionnement du réseau : la machine qu’on vient de rajouter est inaccessible. L ’administrateur peut forcer « à la main » la mise à jour du serveur secondaire mais ce n ’est pas très pratique.

### Notification

De manière optionnelle, l'administrateur peut mettre en œuvre la notification. Le serveur de noms primaire doit connaître les adresses IP des serveurs de noms secondaires. Dès que l'administrateur met à jour le serveur de noms primaires, celui-ci envoie automatiquement un message à tous les serveurs de noms secondaires qui se mettent alors à jour immédiatement.
Remarque : Il faut être sûr des modifications apportées. Si une erreur s'est glissée dans les modifications apportées, celle-ci sera automatiquement propagée sur les serveurs DNS secondaires.

### Interconnexion de réseaux

Supposons que 3 réseaux Ethernet A, B et C soient interconnectés par un routeur R
A est le réseau 192.168.1.0 /24
B est le réseau 192.168.2.0 /24
C est le réseau 192.168.3.0 /24
Toutes les machines du réseau peuvent avoir le même domaine direct toto.fr
* Installation d'un serveur DNS primaire
** Sur un tel réseau, on peut très bien n’installer qu’un seul serveur DNS sur le réseau A par exemple. Nous appellerons ce serveur DNS-A.
** Toutes les machines attaqueront dans ce cas le même serveur DNS : il n’est pas obligatoire qu’un serveur DNS soit sur le même réseau qu’une machine.
* Zones directes et inverses
Le serveur DNS-A aura autorité sur 4 zones
** toto.fr.
** 1.168.192.IN-ADDR.ARPA.
** 2.168.192.IN-ADDR.ARPA.
** 3.168.192.IN-ADDR.ARPA.
* Résistance aux pannes
** Pour améliorer la résistance aux pannes, il est toutefois conseillé d’installer un serveur DNS sur chaque réseau.
** Nous installerons donc 2 serveurs DNS secondaires DNS-B et DNS-C respectivement sur les réseaux B et C.
** Chacun de ces serveurs DNS secondaires aura autorité sur les 4 zones mais sera serveur DNS secondaire pour ces zones.
** Chaque machine interrogera en premier le serveur DNS le plus proche d’elle.
* Configuration des postes clients
** Chaque poste client interrogera en premier les serveurs DNS en commençant par le plus proche.
** Les machines du réseau A auront comme liste de serveurs DNS : DNS-A, DNS-B et DNS-C.
** Les machines du réseau B auront comme liste de serveurs DNS : DNS-B, DNS-C et DNS-A.
** Les machines du réseau C auront comme liste de serveurs DNS : DNS-C, DNS-A et DNS-B.
** Ce choix assure en plus une meilleure résistance aux pannes en cas de panne de R.
** Il faudra également configurer sur chaque machine le nom du domaine direct.

### Quelques notions sur les fichiers de zone

* La configuration de chaque zone est décrite dans un fichier texte appelé fichier de zone.
* Le fichier de zone est constitué d’enregistrements.
* Il existe de nombreux types d’enregistrements : NS, SOA, A, PTR, ...
* En général, on utilise un logiciel de configuration qui écrit automatiquement les fichiers de zone.

### Les enregistrements NS

* NS Name server, ils permettent de spécifier les serveurs de noms ayant autorité sur le domaine.
Exemple :
Cet enregistrement indique que la machine d'adresse FQDN serveur.toto.fr. a autorité sur toto.fr. Chaque fichier de zone comporte en général un tel enregistrement.

### Les enregistrements SOA

* SOA Start Of Authority
Ils permettent de fixer des paramètres en secondes qui sont utilisés lorsqu’il y a des serveurs DNS secondaires.
Exemple :
Cet enregistrement comporte :
* Le nom de la zone toto.fr. Pour parler de la zone courante on aurait pu indiquer @ à la place de toto.fr.
* IN SOA qui indique le type de l'enregistrement.
* L'adresse FQDN du serveur primaire, ici : serveur.toto.fr.
* L'adresse e-mail de l'administrateur, ici : admin@serveur.toto.fr.
* Le numéro de version du fichier, ici : 32. À chaque modification du ficher de zone ce numéro doit être incrémenté de 1. Il permet aux serveurs DNS secondaires de savoir s'ils possèdent ou non la dernière version du fichier de zone.
* Le temps de rafraîchissement, ici : 10800 secondes soit 3h. Toutes les 3 heures, les serveurs DNS secondaires doivent contacter le primaire et éventuellement mettre à jour leur fichier de zone.
* Le temps avant un nouvel essai, ici : 600 secondes soit 10 minutes. Si l'opération précédente a échoué (le serveur primaire redémarrait ou le réseau était momentanément en panne,...), les serveurs DNS secondaires vont essayer de se mettre à jour toutes les 10 minutes jusqu'à ce qu'ils y arrivent. Ils reprennent ensuite leur cycle de mise à jour toutes les 3 heures.
* Le temps d'expiration, ici : 86400 secondes soit 24 heures. Si les DNS secondaires n'arrivent pas à contacter le primaire, ils vont fonctionner de manière autonome durant 24h ensuite ils considèreront leurs informations comme étant obsolètes et ils cesseront de fonctionner.
* Durée de vie d'un enregistrement (TTL), ici : 3600 secondes soit 1 heure. La durée de vie d'un enregistrement permet de déterminer le temps durant lequel une copie de cet enregistrement peut être conservée dans un cache.

### Enregistrements de type A

* A Address
Ils se trouvent dans la zone directe et permettent d'associer une adresse FQDN à une adresse IP. En général, chaque machine possède un enregistrement de type A dans sa zone directe.
Exemple :

### Enregistrements de type PTR

* PTR PoinTer Record
Il se trouve dans la zone inverse et permet d'associer la dernière partie d'une adresse IP (numéro de machine) à une adresse FQDN. L'adresse IP est écrite "à l'envers" et se termine par in-addr.arpa (!). En général, chaque machine possède un enregistrement de type PTR dans sa zone inverse.
Exemple : Pour la machine pc1.toto.fr d'adresse IP 200.50.12.14 :

### Exemple de fichier de zone

* Présentation
Un réseau utilise les adresses 200.50.12.0/24 et le nom de domaine toto.fr. Le réseau comporte 3 machines : pc1 (adresse IP 200.50.12.1), pc2 (adresse IP 200.50.12.2) et pc3 (adresse IP 200.50.12.3). pc3 est le serveur DNS du réseau.
* Zones:
pc3 a autorité sur la zone directe toto.fr et sur la zone inverse 12.50.200.IN-ADDR.ARPA
* Fichier de zone de toto.fr

### Interconnexion de serveurs DNS

Sur Internet, les différents serveurs DNS se connaissent mutuellement. Imaginons la situation suivante : l'utilisateur de la machine X du réseau local de l'entreprise toto utilise Internet Explorer et tape : .wikibooks.org. Cette machine a besoin de connaître l'adresse IP de la machine portant le nom .wikibooks.org.
* Les différents serveurs DNS
** S1 est le serveur DNS de l'entreprise toto. Il a autorité sur toto.fr.
** S2 est le serveur DNS de l'organisation wikibooks. Il a autorité sur wikibooks.org.
** S3 est le serveur DNS ayant autorité sur .fr.
** S4 est le serveur DNS ayant autorité sur .com.
** S5 est un serveur racine d'Internet qui a autorité sur . (point étant la racine de tous les noms de domaines).
* Schéma d'une résolution
** La machine voulant faire la résolution interroge S1.
** S1 ne connaît pas l'adresse IP de .wikibooks.org. Il interroge S3, qui n'a pas la réponse mais qui fournit à S1 l'adresse IP de S5.
** S1 interroge S5 qui n'a pas la réponse mais qui fournit à S1 l'adresse IP de S4.
** S1 interroge S4 qui n'a pas la réponse mais qui fournit à S1 l'adresse IP de S2.
** S1 interroge S2 qui a autorité sur wikibooks.org et qui connaît donc l'adresse IP de la machine .wikibooks.org. S2 envoie à S1 cette adresse IP.
** S1 fournit la réponse à la machine de départ.
Bien entendu, le nombre de connexions étant important, chaque DNS (et parfois les postes clients) gère un cache des noms de domaines demandés afin de diminuer le nombre de requêtes.

## Liens internes

* DNS : Quelques notions sur les DNS.
* Serveurs DNS racine : présentation des serveurs DNS racines.