DNS resolver

Les résolveurs DNS sont un composant essentiel du Domain Name System (DNS). Ils agissent en tant que contrepartie interrogative aux serveurs de noms DNS qui leur répondent. Du point de vue de l’utilisateur, un DNS resolver sert d’interface de transmission entre l’utilisateur ou l’application et les serveurs de noms.

Qu’est-ce qu’un DNS resolver ?

Un résolveur DNS est un service qui fournit une adresse IP sur demande à un nom de domaine. On appelle ce processus la « résolution de noms de domaine », c’est pourquoi ce service est appelé « résolveur ». Ce terme est défini dans le document de spécification Internet RFC 1034 :

Citation

« Resolvers are programs that extract information from name servers in response to client requests. Resolvers must be able to access at least one name server and use that name server’s information to answer a query directly, or pursue the query using referrals to other name servers. » — Source : https://www.rfc-editor.org/rfc/rfc1034.html

Traduction : « Les résolveurs sont des programmes qui, en réponse à la demande de clients, récupèrent des informations des serveurs de noms. Les résolveurs peuvent accéder à au moins un serveur de noms, afin d’utiliser les informations de ce serveur de noms et répondre directement à une requête, ou poursuivre la requête en faisant référence à d’autres serveurs de noms. » (traduit par IONOS).

Les DNS resolvers sont la contrepartie des serveurs de noms qui contiennent les informations DNS. Les serveurs de noms sont également appelés des serveurs DNS et le terme « client DNS » est parfois utilisé pour désigner les résolveurs DNS. Cependant, de nombreux DNS resolvers sont des serveurs ; il existe donc une utilisation multiple du terme « serveur DNS ».

Les résolveurs DNS se présentent sous de nombreuses formes différentes. Un résolveur DNS n’est pas nécessairement un composant unique, ni une technologie spécifique. Du point de vue de l’utilisateur, un résolveur DNS est simplement un système qui s’occupe de déterminer une adresse IP pour un nom de domaine. La manière dont le résolveur DNS reçoit l’information ne joue aucun rôle pour l’utilisateur.

Au niveau le plus bas, il existe ce que l’on appelle les « stub resolvers ». Il s’agit généralement d’une bibliothèque logicielle ou d’un service qui fonctionne sur le système local. Les stub resolvers communiquent généralement avec les DNS resolvers situés sur des systèmes distants, qui eux effectuent le véritable travail de résolution de noms.

Pourquoi a-t-on besoin d’un DNS resolver ?

Le système de noms de domaine (DNS) est un système hiérarchique, réparti dans le monde entier, qui permet de gérer les données associées à des domaines Internet. Un domaine est un nom facile à retenir et à utiliser. L’une des principales tâches du DNS est la résolution de noms, c’est-à-dire la correspondance entre le nom de domaine et les adresses IP. Les résolveurs DNS sont donc l’un des piliers de la structure technique d’Internet. Voici un exemple de résolution de noms :

Nom de domaine recherché

Adresse IP renvoyée

example.com

93.184.216.34

Même si la plupart des utilisateurs ne le savent pas, les opérations quotidiennes pour naviguer sur le Web commencent par la résolution d’un nom de domaine en une adresse IP. Accéder à un site Internet, consulter un email ou se connecter à un compte utilisateur via une application : ces opérations commencent toutes par la résolution du nom. Ce n’est qu’ensuite qu’a lieu le transfert de données.

Opération

Protocole

Serveur

Exemple de nom de domaine

Accéder à un site Web

http

Serveur Web

www.ionos.com

Ouvrir un email

IMAP

Serveur de messagerie électronique

imap.gmail.com

Se connecter à une application

HTTPS

Serveur API

api.twitter.com

Les opérations mentionnées ont en commun le fait qu’elles impliquent toutes des serveurs. Il s’agit donc de systèmes distants avec lesquels notre système local communique. Pour communiquer, on a besoin de l’adresse de l’autre. Et dans ce cas, on a besoin de l’adresse IP des serveurs. Mais en général, on ne connaît que leur nom de domaine. Heureusement, il existe des DNS resolvers qui se chargent de la résolution de noms pour nous.

Que se passe-t-il sans DNS resolver ?

En théorie, il est possible de se passer d’un résolveur DNS, car il est tout à fait possible d’utiliser directement des adresses IP. Mais aujourd’hui, cela ne fonctionne qu’en théorie, car dans la pratique, l’absence de résolution de noms entraîne des pertes considérables.

Tout d’abord, le protocole sécurisé HTTPS est lié aux noms de domaines. Si l’on tente de consulter un site Web avec une IP vierge, aucune communication chiffrée n’est possible. De plus, seule l’attribution du nom de domaine permet d’héberger plusieurs sites Web sur un serveur.

La répartition géographique des ressources de serveur nécessite également l’accès à un DNS resolver. Dans ce cas, un seul nom de domaine est associé à plusieurs adresses IP. L’exemple de la page d’accueil de Google illustre bien ce phénomène : si celle-ci n’était accessible que par une seule adresse IP, le trafic mondial s’y accumulerait et le système serait rapidement surchargé.

Comment fonctionne un DNS resolver ?

Le système de noms de domaine (DNS) est constitué de composants répartis dans le monde entier qui interagissent les uns avec les autres. Il existe quatre classes principales de composants ; trois d’entre elles sont des serveurs de noms qui contiennent des enregistrements DNS. La classe restante comprend les résolveurs DNS, qui sont l’équivalent des serveurs de noms.

Composant DNS

Équivalent anglais

Explication

Serveur racine du DNS

Root name server

Contient les adresses des serveurs de noms de domaine de premier niveau.

Serveur de noms TLD

TLD name server

Contient les adresses des serveurs de noms faisant autorité pour un domaine de premier niveau (TLD).

Serveur de noms faisant autorité

Authoritative name server

Contient des informations pour une zone DNS.

Serveur de noms récursif

Recursive resolver

Détermine les adresses IP correspondant aux noms de domaines

Conseil

Vous souhaitez en savoir plus sur les systèmes de noms de domaine ? Consultez l’article « Qu’est-ce qu’un serveur racine ? » pour en savoir plus sur les bases du Domain Name System.

Comme vous le savez déjà, un DNS resolver reçoit un nom de domaine sous forme de requête et a ensuite pour tâche de déterminer une adresse IP correspondante. Mais comment le processus fonctionne-t-il exactement ? Nous vous présentons les différentes façons de procéder.

Si la demande a déjà été faite auparavant, par exemple lors d’un accès répété à google.com, la réponse est chargée à partir du cache local. Si ce n’est pas le cas, le résolveur effectue des requêtes auprès des serveurs de noms et prépare une réponse à partir des informations obtenues. L’algorithme utilisé pour la résolution de noms a été défini dans la RFC 1034 :

  1. Vérifier si la réponse souhaitée se trouve dans le cache local. Si oui, la réponse est livrée au client.
  2. Déterminer les serveurs de noms à interroger.
  3. Envoyer des requêtes aux serveurs de noms jusqu’à ce que l’un d’entre eux fournisse une réponse.
  4. Évaluer la réponse :
    1. Si la réponse résout la demande ou contient une erreur de nom, la réponse est mise en cache et livrée au client.
    2. Si la réponse contient une référence à d’autres serveurs de noms, la réponse est mise en cache et retour à l’étape 2.
      1. Si la réponse est un enregistrement de nom canonique (CNAME), le CNAME doit être inclus dans le cache, pour ensuite retourner à l’étape 1 avec ce même nom.
    3. Si la réponse contient une erreur de serveur ou semble erronée, le serveur est supprimé de la liste des serveurs et retour à l’étape 3.

Que faire en cas de problème avec le DNS resolver ?

Comme nous l’avons vu, les résolveurs DNS et la résolution de noms qui leur est associée sont importants pour l’utilisation quotidienne d’Internet. Dans ce contexte, le DNS est cependant tristement célèbre pour être une source d’erreurs.

Le risque d’erreur est lié à la nature du système : le DNS est un système réparti dans le monde entier et organisé de manière hiérarchique. Les modifications s’y font progressivement : cela peut prendre jusqu’à 48 heures, c’est pourquoi des incohérences sont facilement provoquées. De plus, des caches sont utilisés, ce qui est critique pour les performances et cause de nombreuses erreurs.

Note

Les erreurs dans les informations DNS stockées localement peuvent causer de nombreux problèmes. Dans de nombreuses situations, il est utile de vider le cache DNS.

Contrairement à l’échange de données sur Internet, qui s’effectue principalement via la suite des protocoles Internet (TCP/IP), le système de noms de domaine fait appel à l’UDP. Le User Datagram Protocol (UDP) est plus simple et consomme moins de ressources. Malheureusement, ce sont précisément ces caractéristiques qui font des DNS resolvers publics des cibles attrayantes pour les cybercriminels.

La variante UDP-Flood permet d’utiliser les résolveurs DNS publics contre les attaques DDoS. Il existe également des empoisonnements du cache DNS, qui visent à falsifier ou dissimuler des informations des résolveurs DNS. Afin de se protéger, les serveurs distribuent aléatoirement les ports source.

Comment vérifier si la résolution de nom fonctionne ?

Si des erreurs étranges qui pourraient être dues au DNS apparaissent dans le système local, il est conseillé de d’abord vérifier le fonctionnement de la résolution de noms. Cette opération est simple et permet d’obtenir rapidement des réponses concernant les éventuels problèmes.

Sur presque tous les systèmes, l’outil nslookup est disponible sous forme de programme en ligne de commande. Dans le cas le plus simple, nous exécutons l’outil et saisissons le nom de domaine souhaité. Si la résolution du nom fonctionne, nous recevons en réponse une adresse IP correspondante. De plus, l’outil affiche le résolveur DNS configuré :

nslookup example.com
bash

De manière pratique, nslookup peut également être utilisé pour la recherche DNS inverse. Dans ce cas, nous passons une adresse IP et recevons un ou plusieurs noms en retour :

nslookup 9.9.9.9
bash

Une alternative à nslookup est d’exécuter la commande ping pour le nom de domaine. La commande ping est préinstallée sur la plupart des systèmes et déclenche la résolution de nom lorsqu’elle est demandée. On recherche le nom de domaine souhaité :

ping example.com
bash

Si nslookup ou ping ne fournissent pas d’adresse IP, il faut partir du principe que la résolution du nom ne fonctionne pas. Dans ce cas, il vaut la peine d’essayer d’apporter des modifications au DNS resolver ou de créer provisoirement une entrée dans le fichier host. Nous y reviendrons plus loin dans l’article.

En principe, si une adresse IP est affichée, cela signifie que la résolution de nom fonctionne. Il peut néanmoins s’agir d’une information erronée. Pour évaluer le résultat fourni, il vaut la peine de comparer avec d’autres enregistrements DNS stockés globalement. Nous utilisons le DNS Propagation Checker de whatsmydns.net pour afficher les enregistrements de type A.

Comment modifier le DNS resolver ?

Comme nous l’avons expliqué au début, le terme de DNS resolver est utilisé à plusieurs reprises. Lorsque nous parlons de modifier le résolveur DNS, nous entendons par là de modifier l’adresse du serveur qui est configuré dans le système effectuant la résolution de noms pour nous. Les utilisateurs ne savent souvent pas qu’un serveur externe est utilisé à cet effet.

La plupart des systèmes, qu’il s’agisse d’un PC, d’un ordinateur portable ou d’un smartphone, utilisent le résolveur DNS de leur fournisseur d’accès. Dans les réseaux domestiques, l’adresse IP du résolveur DNS est généralement stockée dans le routeur. L’utilisation du résolveur DNS par défaut peut présenter des inconvénients considérables.

En plus de la fuite DNS, il existe un autre problème : le DNS Spoofing. Dans ce cas, le fournisseur d’accès Internet fournit aux utilisateurs des données DNS falsifiées. Ainsi, les concurrents sont bloqués ou le trafic Internet est détourné vers des pages publicitaires. Il est donc généralement conseiller de régler soi-même le résolveur DNS.

Pour modifier le DNS resolver, on procède différemment selon le système d’exploitation. En principe, on configure la connexion réseau et on saisit l’adresse Internet d’un résolveur DNS connu. Un serveur DNS secondaire est inscrit à côté du résolveur DNS primaire. Cela assure la redondance et protège contre les erreurs lorsque le serveur DNS ne répond pas.

Pour modifier le résolveur DNS, il faut connaître les adresses IP exactes d’un ou de plusieurs serveurs sur lesquels fonctionne un résolveur DNS. Comme la résolution de noms n’est pas assurée sans résolveur DNS, il n’est logiquement pas possible de rechercher des noms de domaine.

Les résolveurs DNS libres offrent un certain nombre d’avantages. Ils permettent de meilleures performances en termes de vitesse et de protection de la sphère privée, mais offrent également des fonctions de filtrage. Des exemples connus sont Cloudflare avec l’adresse IP 1.1.1.1 et Quad9 avec 9.9.9.9.

Comment se passer du DNS resolver ?

Comme nous l’avons vu, les résolveurs DNS sont essentiels pour travailler avec Internet. Cependant, dans certaines situations, il est judicieux de trouver une autre solution que la résolution de noms par résolveur DNS. L’astuce technique consiste à effectuer des entrées dans le fichier host.

Le fichier host est un vestige de l’époque primitive d’Internet. À l’époque, le DNS n’existait pas encore, mais le nombre d’ordinateurs connectés était gérable. Pour la résolution de noms de domaine, c’est-à-dire pour transformer les noms de domaines en adresses IP, les combinaisons correspondantes étaient directement inscrites dans le fichier host. Une adresse IP y est inscrite à gauche et un ou plusieurs noms de domaines à droite. Pour le nom de domaine localhost pour la « Loopback Interface », la configuration se fait de cette manière :

# IPv4
127.0.0.1       localhost
# IPv6
::1                 localhost

Lors de la résolution du nom, le DNS stub resolver local évalue les enregistrements du fichier host. Si une correspondance est trouvée pour le nom de domaine interrogé, le stub resolver renvoie l’adresse IP correspondante. Dans ce cas, la requête reste entièrement sur la machine locale. Dans le cas contraire, le processus normal de résolution de noms s’effectue via le résolveur DNS externe configuré.

Le fichier host permet de travailler sans résolveur DNS. Cependant, cela nécessite de créer une entrée pour chaque nom de domaine à résoudre. Cela n’est pas très pratique pour une utilisation quotidienne, mais convient bien pour des occasions spécifiques.

Cette astuce est par exemple utilisée pour mettre en sourdine les applications qui n’assurent pas la protection des données privées. En effet, certaines applications communiquent périodiquement à un serveur configuré par nom de domaine et transmettent des données privées sans aucune restriction. Si l’on souhaite empêcher cela, il suffit d’ajouter une entrée dans le fichier host.

Illustrons le principe par un exemple concret : nous voulons empêcher qu’un programme local accède au domaine spy.example.com. Pour ce faire, nous inscrivons le nom de domaine dans le fichier host et faisons référence à l’adresse de bouclage 127.0.0.1. Ainsi, les requêtes sont adressées au système local et n’atteignent jamais le serveur. Pour une application, les demandes restent bloquées, comme si la connexion Internet était par exemple coupée :

127.0.0.1   spy.example.com

Le principe fonctionne également dans le sens inverse. De nombreux pays utilisent aujourd’hui des blocages Web du Domain Name System. Les fournisseurs d’accès à Internet sont contraints de ne pas fournir d’adresses IP ou de les falsifier lorsque certains noms de domaine sont recherchés. Il s’agit en fait d’un DNS Spoofing par un État. Il n’est donc pas possible pour les utilisateurs de ce pays d’accéder aux sites Internet en recherchant ces noms de domaine.

Cependant, une utilisation intelligente du fichier host sur son propre système permet de contourner les blocages Web basés du DNS. Il suffit de connaître l’adresse IP réelle du site Web bloqué. Celle-ci est inscrite avec le nom de domaine dans le fichier host. Supposons par exemple que le domaine blocked.example.com soit bloqué par le fournisseur d’accès via le blocage Web DNS. Si nous inscrivons l’adresse IP du site dans le fichier host, l’accès sera à nouveau possible :

93.184.216.34 blocked.example.com

Il existe une autre approche issue du développement Web qui permet de configurer la résolution de nom sur l’appareil local via le fichier host. Supposons qu’un site Web existant sous le domaine www.example.com doive migrer. Pour préparer la migration de votre site Web, nous transférons d’abord le site sur le nouveau serveur. Il faut maintenant tester l’installation. On rencontre alors un problème : sous le nom de domaine, le site existant sur l’ancien serveur 93.184.216.34 fonctionne toujours, le site migré sur le nouveau serveur ne peut donc pas être testé.

Pour éviter cela, il suffit d’ajouter l’adresse IP du nouveau serveur ainsi que le nom de domaine dans le fichier host. Ainsi, nos demandes locales sont envoyées au nouveau serveur et nous pouvons le tester sans problème. Parallèlement, tous les autres visiteurs continuent à recevoir l’adresse IP de l’ancien serveur. Ainsi, le site reste entièrement accessible aux visiteurs.

198.51.100.0 localhost www.example.com

Une procédure similaire est utilisée pour développer localement un site d’environnement de test. Imaginons que le site www.example.com doive être reconstruit. Nous créons alors un site dans un environnement de développement local, accessible à l’adresse de bouclage 127.0.0.1. Dans le fichier host, nous ajoutons une entrée pour le nom de domaine dev.example.com :

127.0.0.1 localhost dev.example.com