Le système de noms de domaine (DNS) (anglais: Domain Name System) est le protocole système et réseau utilisé sur Internet pour traduire les noms d’ordinateurs en adresses numériques (adresses IP) et vice versa. Bien que cela s’appelle « traduire », il s’agit simplement de rechercher dans des tableaux, dans lesquels les noms sont liés à des nombres.
Le DNS est un système client-serveur: un interrogateur (client) utilise le protocole DNS pour demander un nom ou une adresse à un fournisseur (serveur DNS), auquel le serveur renvoie une réponse. La recherche d’un numéro par un nom est appelée recherche directe; rechercher un nom avec une recherche inversée de nombre.
La dénomination est hiérarchique: les noms contiennent des points et les unités organisationnelles correspondent à des parties du nom. Une telle unité est appelée un domaine et un nom est appelé un nom de domaine ». Par exemple, Wikipédia en néerlandais se trouve sur le nom de domaine innovimax.fr, qui (au moment de la rédaction) correspond à l’adresse IP 5.135.68.67.
DNS est également utilisé dans le protocole SMTP pour rechercher les serveurs de messagerie d’un domaine, les ordinateurs qui reçoivent le courrier électronique adressé à cette organisation. En outre, il existe un protocole, le Sender Policy Framework (SPF), avec lequel un ordinateur d’envoi d’e-mails peut être recherché via DNS ou qui, selon son organisation, a le droit de le faire. C’est l’un des outils utilisés pour lutter contre le spam mondial.
L’histoire
Chaque ordinateur connecté à Internet doit avoir une adresse IP pour être accessible à distance; un tel ordinateur est appelé hôte car il héberge l’utilisateur qui l’utilise à distance. Parce que ces numéros sont difficiles à retenir pour les gens, chaque ordinateur a également reçu un nom, et le logiciel de connexion Internet intégré à ces noms peut être utilisé en recherchant leur numéro dans un tableau.
Cette table était initialement un fichier, /etc/hosts (parfois appelé: hosts.txt), qui doit être présent sur chaque ordinateur participant au trafic Internet.
À mesure que le nombre et la taille des réseaux participants augmentaient, il était impossible de garder ce fichier à jour sur chaque ordinateur participant. Par conséquent, le protocole DNS a été conçu pour que ces informations puissent être récupérées sur Internet. Par conséquent, une organisation peut toujours modifier l’attribution des numéros aux noms sans avoir besoin d’une action explicite de la part des autres.
Tous les logiciels qui utilisent des connexions Internet prennent en charge DNS, mais hébergent également des fichiers. Parfois, ce dernier fichier est toujours utilisé pour nommer des ordinateurs locaux, par exemple, ou pour ignorer temporairement le système DNS pour un hôte spécifique – parfois utile lors du test d’un nouveau site Web qui a maintenant une URL différente ou s’exécute localement . Une deuxième application consiste à inclure une liste de noms de domaine classés comme indésirables et ayant une référence dans le fichier hosts à une adresse différente (autre qu’un serveur DNS), telle que 127.0.0.1. Des produits anti-abus tels que Spybot Search & Destroy en font également usage.
Technique de base
Le DNS dans les implémentations pratiques se compose de trois parties:
- Le résolveur de talon
- Le résolveur de mise en cache / récursif (également connu sous le nom de récurseur)
- Le serveur de noms faisant autorité
La recherche de données à l’aide de DNS est généralement appelée recherche. Un logiciel, tel qu’un navigateur Web, qui souhaite effectuer une recherche, demande au résolveur de talon. Il s’agit d’un logiciel relativement simple qui, en fonction de la configuration, peut poser la question à un récursif ou regarder d’abord dans un fichier (comme les dérivés Unix connus: /etc/hosts).
Le résolveur de talon compose un paquet DNS et l’envoie au récurseur. Le fournisseur Internet fournit et utilise souvent un récursif, bien qu’un récurseur interne soit également régulièrement installé dans les réseaux. Le récurseur est plus avancé que le résolveur de talon et commencera initialement à poser la question à un serveur racine DNS. Cela peut alors se référer à d’autres serveurs, d’où il peut être redirigé vers d’autres serveurs, etc., jusqu’à ce qu’un serveur soit enfin atteint qui connaisse la réponse ou sache que la recherche n’est pas possible. Ce dernier peut être le cas si le nom n’existe pas ou si les serveurs ne répondent pas. Le processus d’exécution sur différents serveurs faisant autorité est appelé récursivité.
La recherche d’un domaine commence au niveau supérieur (appelé racine), puis les recherches sont de plus en plus spécifiques. Lors de la recherche d’un domaine, le serveur racine DNS est immédiatement sollicité par exemple innovimax.fr. Il n’y a pas d’étape intermédiaire qui ne demande que l’organisation. Après tout, il est théoriquement possible que le serveur racine lui-même connaisse déjà la réponse pour innovimax.fr. Par exemple, les serveurs racine connaissent la réponse pour a.root-servers.net. En règle générale, cependant, le serveur racine DNS fera référence aux serveurs de noms pour l’organisation.
Ces serveurs sur lesquels le récurseur peut poser des questions sont les serveurs de noms faisant autorité. Celles-ci sont également relativement stupides et fournissent des réponses simples. Ces réponses sont souvent stockées dans des fichiers ou dans une base de données. Un serveur de noms faisant autorité peut fournir une réponse, qui peut être soit une référence à un autre serveur, soit une réponse directe à la question.
Le récurseur et le serveur de noms faisant autorité sont souvent appelés serveurs DNS. Il est possible de combiner ces deux fonctions dans un seul programme. Par exemple, cela se fait dans BIND, l’un des serveurs DNS les plus connus et les plus utilisés. Il existe également des programmes qui n’effectuent qu’une des deux fonctions. NSD est un exemple de serveur de noms faisant uniquement autorité. Avec les programmes qui combinent les deux fonctions, il est souvent possible de le désactiver ou de l’ouvrir uniquement au réseau interne.
Mise en cache
Pour empêcher les récurseurs de faire des requêtes superflues très régulièrement (les données DNS changent relativement peu), un récurseur doit implémenter la mise en cache. Cela signifie qu’une fois reçue, la réponse est stockée pendant un certain temps. L’administrateur peut ajuster cette durée par enregistrement et s’appelle Time to live (TTL). En règle générale, c’est entre quelques minutes et quelques jours.
Redondance
En règle générale, il existe plusieurs serveurs faisant autorité pour les mêmes données. Ceci afin de limiter les conséquences possibles d’une panne de serveur.
En principe, si un certain serveur faisant autorité est en panne, un récursif devrait essayer tous les autres. Finalement, on trouvera que l’un fonctionne, ou le récurseur peut conclure qu’il n’est pas possible de traduire le nom.
DNSSEC
Le protocole DNS est vulnérable aux abus. Le DNS a été dupé au moyen d’attaques dites de «pollution du cache DNS» (comme l’attaque de Kaminsky). Par conséquent, des utilisateurs sans méfiance peuvent être envoyés vers un faux site Web frauduleux, par exemple. En réponse à cette menace, une extension du protocole DNS a été développée: les «extensions de sécurité du système de noms de domaine», ou DNSSEC pour faire court. Avec l’aide de cette norme Internet, les réponses DNS peuvent être sécurisées cryptographiquement, de sorte qu’elles ne peuvent plus être falsifiées. Cela se fait sur la base de signatures dites numériques, qui sont générées avec une clé privée et peuvent être validées à l’aide d’une clé publique. L’intégrité et l’authenticité des réponses DNS sont ainsi garanties (même s’il s’agit d’une réponse négative ou vide). Cependant, il est faux de supposer que DNSSEC protège également le trafic DNS contre les écoutes.
Enregistrements de ressources
Les données dans DNS sont stockées dans un enregistrement de ressource. Un enregistrement de ressource contient un type, un TTL, un nom et des données. Les données peuvent être, par exemple, une adresse IP ou un autre nom. Cela dépend du type d’enregistrement de ressource.
Les types courants sont:
- SOA Start-Of-Authority, avec des paramètres pour le (sous) domaine, tels que TTL (Time-To-Live), numéro de série, serveur principal, personne responsable
- A pour déterminer l’adresse IPv4 avec un nom
- AAAA pour déterminer l’adresse IPv6 avec un nom
- CNAME Nom canonique pour configurer l’alias d’un enregistrement A ou AAAA
- PTR pour déterminer un nom avec une adresse IPv4 ou IPv6 (voir plus loin sous Recherches inversées)
- MX pour déterminer les serveurs de messagerie d’un domaine, chaque serveur de messagerie se voyant attribuer sa propre priorité
- NS pour indiquer quels serveurs de noms sont les serveurs de noms faisant autorité (également utilisés pour faire référence à d’autres serveurs de noms)
- TXT initialement utilisé pour tout commentaire souhaité par l’utilisateur. Désormais également utilisé par l’initiative anti-spam SPF.
- SRV un enregistrement relativement nouveau qui est utilisé pour indiquer les services.
- DKIM un enregistrement relativement nouveau utilisé pour valider l’authenticité du courrier électronique. Les grandes parties telles que Gmail utilisent maintenant ce «DomainKeys Identified Mail (DKIM).