Le système DNS

Afin de communiquer sur Internet, il est nécessaire de contacter un serveur avec une adresse IP. Or, cela pose des inconvénients :

  • Cela est difficile à retenir et peu pratique
  • Si le serveur change d'hébergeur, l'adresse IP peut changer

Pour remédier à cela, nous utilisons des noms de domaines. Ces derniers sont associés aux adresses IP.

Le DNS (Domain Name System) est un mécanisme distribué permettant de traduire les noms de domaine (tels que google.fr, fr.wikipedia.org, etc.) en adresse IP. Cependant, d'autres informations peuvent également y être renseignées, nous les verrons plus loin. Le DNS s'apparente au carnet d'adresses en associant un nom de contact à un numéro de téléphone.

Il remplace le fichier hosts (RFC 608), encore présent aujourd'hui sur les systèmes d'exploitation. Ce fichier contient l'association adresse IP ↔ nom de domaine. Il fut créé pour ARPANET et remplissait cette tâche à une époque où les équipements sur le réseau étaient peu nombreux.

127.0.0.1				localhost
127.0.1.1				antoine-laptop
216.58.213.131				google.fr

# The following lines are desirable for IPv6 capable hosts
::1     				ip6-localhost ip6-loopback
fe00::0 				ip6-localnet
ff00::0 				ip6-mcastprefix
ff02::1 				ip6-allnodes
ff02::2 				ip6-allrouters
2620:0:862:ed1a::1			fr.wikipedia.org
Exemple de fichier hosts

La très forte augmentation du nombre d'équipements sur le réseau rendit sa mise à jour et sa diffusion compliquées (transmis par FTP). Un système décentralisé et hiérarchique devenait nécessaire et c'est dans ce cadre que le système DNS est né.

Le service DNS écoute sur le port UDP 53.

Composition d'un nom de domaine

Le système DNS fonctionne de manière hiérarchique. Voici la position du nom de domaine dans une URL Web :

https:// fr . wikitionary . org /wiki/DNS
Protocole 3e niveau Séparateur 2e niveau Séparateur TLD Ressource

Le domaine dans une adresse de messagerie se trouve après le symbole arobase (@) :

alain@ example . com
Identifiant 2e niveau Séparateur TLD

Le nom de domaine se décompose en partant de la fin.

L'arborescence du DNS

Le système DNS est une hiérarchie au sommet de laquelle on retrouve la racine représentée par le symbole point (.). Il est souvent implicite lors de l'écriture des noms de domaine, mais il doit apparaître lors de la désignation d'un nom de domaine absolu, notamment dans la configuration des serveurs DNS.

Chaque sous-domaine est rattaché à son domaine parent. Ainsi, les TLD ont des sous-domaines rattachés directement à la racine. Chaque niveau de domaine est séparé du précédent par un point (.). Voici une représentation graphique de l'arborescence DNS.

Représentation graphique de l'arborescence DNS
Représentation graphique de l'arborescence DNS

Chaque nœud possède une base de données qui détaille les nœuds enfants (sous-domaines, machines, etc.). Ce qui permet une gestion décentralisée de l'ensemble du système.

Les Top Level Domains (TLD)

Le domaine de premier niveau est situé le plus à droite du nom de domaine. Les TLD sont gérés par l'ICAAN. On y retrouve deux types de domaines :

Les domaines nationaux
Ce sont des domaines dédiés à un pays ou territoire (.fr pour la France, .be pour la Belgique, .re pour La Réunion, etc.).
Les domaines génériques
Ils visent à regrouper les domaines partageant une caractéristique autre que géographique (.com initialement prévu pour les organismes à but lucratif, .museum pour les musées, etc.)

Chaque TLD est géré par un registre, qui peut être une association, un état ou tout autre organisme (Le .fr est géré par l'AFNIC, une association loi 1901). Chaque registre peut à son tour déléguer la vente des domaines à des sociétés (OVH est habilité par l'AFNIC pour la vente de domaines en .fr).

Chaque TLD possède des conditions et des tarifs propres afin d'attribuer un domaine (pour le .fr, l'AFNIC impose que la personne morale ou physique demandant un nom de domaine soit résident de l'UE, de la Suisse, de la Norvège, de l'Islande ou du Liechtenstein).

Les sous-domaines

Le DNS fonctionnant de manière hiérarchique, chaque niveau est un sous-domaine du niveau précédant. Ainsi, les TLD sont des sous-domaines de la racine. Il est possible d'avoir plusieurs niveaux de sous-domaines. Voici un exemple :

fr .www .example .com .
4e niveau 3e niveau 2e niveau TLD (1e niveau) Racine

Fonctionnement de la résolution de nom de domaine

La résolution du nom de domaine commence par le TLD et remonte jusqu'au sous-domaine. Le schéma ci-dessous décrit l'ordre des requêtes et des réponses entre le client, le serveur DNS récursif et les serveurs DNS des différentes composantes du nom de domaine demandé.

Étapes d'une résolution de nom par un serveur DNS
Étapes d'une résolution de nom par un serveur DNS

Aller à l'exercice 1

Serveurs DNS racine

Le domaine racine est géré par les 13 grappes de serveurs racines contrôlés par 12 autorités de noms différentes. Les domaines de premier niveau sont des sous-domaines du domaine racine. Ces grappes de serveurs sont nommées lettre.root-servers.net avec lettre compris entre A et M.

Leur liste ainsi que leurs adresses IP sont disponibles en ligne sur https://root-servers.org

Résolution inverse

Ce mécanisme permet de trouver le nom de domaine associé à une adresse IP. Cette information est retournée par un enregistrement PTR. Comme la partie désignant le plus grand ensemble d'une adresse IP se situe à gauche (premier octet d'une IPv4), et non à droite pour le nom de domaine (TLD), on cherche a résoudre le domaine composé de l'IP inversée concaténée avec in-addr.arpa. Ainsi, pour l'IPv4 10.104.12.31, on résout le domaine 31.12.104.10.in-addr.arpa.

Un enregistrement PTR correct pour les domaines est indispensable pour les services exposés derrière des IP publiques. Par exemple, un courriel provenant d'un serveur SMTP n'ayant pas de PTR valide a de grandes chances d'être considéré comme indésirable et être bloqué.

Types courants d'enregistrements DNS

Voici les types les plus courants d'enregistrements DNS :

EnregistrementDescription
AAssocie un nom de domaine à une IPv4
AAAAAssocie un nom de domaine à une IPv6
NSIdentifie le serveur DNS associé à chaque zone
SOAFournit des informations sur la zone de domaine (serveur principal, courriel de contact, TTL, etc.)
CNAMEDéfinit un alias pour un autre domaine
MXDéfinit les serveurs SMTP pour le domaine
PTRAssocie une adresse IP à un nom de domaine pour le reverse DNS
TXTPermet de renseigner un texte dans un enregistrement DNS, cela est utilisé par exemple pour la spécification SPF de la messagerie

Dans un enregistrement DNS, un nom de domaine pleinement qualifié (en anglais FQDN pour Fully Qualified Domain Name), c'est-à-dire défini de manière absolue, se termine par un point (.) qui représente la racine. Sinon, il est relatif au domaine.

Il est possible de faire de l'équilibrage de charge par le DNS avec le mécanisme DNS round-robin en inscrivant pour un même domaine, plusieurs enregistrements différents. La réponse à la requête comportera les enregistrements dans un ordre aléatoire. Cela permet de répartir la charge sur les serveurs. Un exemple est donné avec des enregistrements A ci-dessous.

Les exemples suivants sont donnés pour le domaine example.com.

Enregistrement A

Voici la syntaxe d'un enregistrement A pour le sous-domaine cloud. Les deux enregistrements possèdent les mêmes informations :

cloud 			IN	A	10.104.12.31
cloud.example.com. 	IN	A	10.104.12.31

Le premier enregistrement est relatif car il ne possède pas de point à la fin du domaine. Le second est absolu.

Voici ci-dessous un exemple de répartition de charge par le DNS :

cloud 			IN	A	10.104.12.31
cloud			IN	A	10.104.12.32
cloud			IN	A	172.16.85.204
cloud			IN	A	192.168.14.52

Enregistrement AAAA

De la même manière que pour un enregistrement A, voici la syntaxe pour un enregistrement AAAA relatif et absolu :

cloud 			IN	AAAA	2001:412f:c1::1
cloud.example.com. 	IN	AAAA	2001:412f:c1::1

Enregistrement NS

L'enregistrement NS désigne quel(s) serveur(s) DNS est en charge du sous-domaine demandé :

example.com.		IN	NS	ns0.example.com.
example.com. 		IN	NS	ns1.example.com.

Enregistrement SOA

Un enregistrement SOA permet de renseigner les informations officielles sur la zone DNS :

  • Le serveur DNS principal
  • Une adresse courriel de contact technique dont le @ est remplacé par un point.
  • Un numéro de série de la configuration de la zone. Il doit être incrémenté à chaque version. Par convention, le numéro de série est la date au format YYYYMMDDNN soit l'année, le mois, le jour de la modification et le numéro de révision de la journée.
  • Le temps de rafraîchissement entre le serveur principal et les serveurs secondaires exprimé en secondes.
  • Le temps d'attente, après un essai infructueux de rafraîchissement depuis les serveurs secondaires vers le serveur principal exprimé en secondes.
  • Le temps d'expiration, si les serveurs secondaires ne peuvent pas joindre le serveur principal, exprimé en secondes, durée au-delà de laquelle la zone est considérée comme invalide.
  • Le TTL des enregistrements dans les caches DNS, en secondes.

La syntaxe est la suivante :

example.com. IN SOA ns0.example.com. root.example.com. 2020120401 43200 7200 259200 3600

Enregistrement CNAME

L'enregistrement CNAME permet de faire un alias vers un autre domaine :

web			IN	CNAME	cloud.example.com.
fr.example.com.		IN	CNAME	web

Enregistrement MX

Cet enregistrement désigne le serveur SMTP auquel il faut envoyer un courriel destiné à une adresse du domaine. Un serveur SMTP va tenter de contacter le serveur dont le numéro de préférence (situé après MX) est le plus petit. Un équilibrage de charge est possible si le numéro de préférence est identique à plusieurs enregistrements :

example.com.		IN	MX	10	mail1.example.com.
example.com.		IN	MX	20	mail2.example.com.
example.com.		IN	MX	20	mail3.example.com.

Enregistrement PTR

Cet enregistrement, également appelé Reverse DNS Record, associe une adresse IP à un domaine.

L'adresse IPv4 10.104.12.31 doit être au format 31.12.104.10.in-addr.arpa. L'adresse IPv6 2001:412f:c1::1 doit être saisie (bonne chance !) au format 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.0.0.f.2.1.4.1.0.0.2.ip6.arpa :

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.0.0.f.2.1.4.1.0.0.2.ip6.arpa.	IN	PTR	cloud.example.com.
31.12.104.10.in-addr.arpa.							IN	PTR	cloud.example.com.

Enregistrement TXT

Cet enregistrement permet de renseigner du texte dans un enregistrement DNS. Nous verrons dans le chapitre SMTP certains de ses usages :

example.com.			IN	TXT	"Lorem ipsum dolor sit amet"

Aller à l'exercice 2  Aller à l'exercice 3

Interroger manuellement un serveur DNS

GNU/Linux

La commande dig affiche les informations renvoyées par le serveur DNS :

$ dig iutdijon.u-bourgogne.fr
; <<>> DiG 9.16.1-Ubuntu <<>> iutdijon.u-bourgogne.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3728
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;iutdijon.u-bourgogne.fr.	IN	A

;; ANSWER SECTION:
iutdijon.u-bourgogne.fr. 360	IN	A	193.52.232.67

;; Query time: 68 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: mer. nov. 04 22:46:50 CET 2020
;; MSG SIZE  rcvd: 68

Windows

La commande nslookup dans l'invité de commandes permet d'effectuer une requête DNS :

> nslookup fr.wikipedia.org
Serveur :   UnKnown
Address:  192.168.1.254

Réponse ne faisant pas autorité :
Nom :    dyna.wikimedia.org
Addresses:  2620:0:862:ed1a::1
          91.198.174.192
Aliases:  fr.wikipedia.org

Sécurité du DNS

Au-delà de l'attaque par déni de service, le service DNS est vulnérable à plusieurs types d'attaques :

Interception et attaque man in the middle

L'absence de chiffrement des requêtes et réponses DNS permet l'interception de la communication entre le client et le serveur, voire l'altération de la requête ou de la réponse par l'attaquant. Le but est d'obtenir des informations sur les domaines requêtes et de renvoyer de fausses informations (par exemple, renvoyer l'IP d'un serveur malveillant au lieu de l'IP du serveur de votre banque).

Interception
Interception
Modification
Modification
Interception et modifications d'une requête et/ou d'une réponse DNS

Empoisonnement du cache DNS

Cette technique consiste à fournir une mauvaise information à un serveur DNS afin que celui-ci l'insère dans son cache. Cette information erronée sera renvoyée à tout utilisateur du serveurs DNS demandant le même domaine.

DNSSEC

Le DNSSEC permet de résoudre ces problèmes : une signature cryptographique est associée à chaque enregistrement d'un serveur doté de ce protocole. Ce qui permet au client de vérifier avec la clef publique du serveur que l'enregistrement retourné est bien valide et n'a pas été altéré.

Ce protocole permet également de déléguer les signatures. Un domaine peut déclarer qu'un sous-domaine est signé et ainsi établir une chaîne de confiance jusqu'à la racine.

Noms de domaine internationalisés

Initialement, les noms de domaine ne pouvaient être composés uniquement des caractères alpha-numériques (a-z et 0-9) sans casse (les majuscules et les minuscules ne sont pas différenciées), ainsi que du trait d'union (-).

La syntaxe punycode a été introduite par les RFC 3490, 3491 et 3492 et permet d'encoder des caractères Unicode en chaînes de caractères ASCII afin d'être compatible avec le système DNS.

Aller à l'exercice 4  Aller à l'exercice 5