La page qui s'ouvrait pour une seule personne
Un technicien du support reçoit un appel. La page web de la boutique s'ouvre sur un portable et pas sur un autre. Les deux sont sur le même réseau.
La cause est une vieille ligne dans un petit fichier du second portable. Elle répond pour le nom avant que personne n'interroge le réseau.
Cette leçon montre où une machine cherche, et comment lire ce qui revient.
À la fin de cette leçon
Remarque
Je peux chercher un nom avec dig et dire quel enregistrement a répondu.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Résolveur | la partie d'une machine qui cherche les noms | |
| Fichier hosts | une courte liste de noms et d'adresses sur la machine elle-même | /etc/hosts |
| CNAME | un enregistrement qui dit que ce nom est un autre nom | |
| TTL | le nombre de secondes pendant lesquelles une réponse peut être gardée | 300 |
| NXDOMAIN | la réponse qui dit que ce nom n'existe pas | |
| Zone | les noms dont un serveur DNS a la charge | boutique.test |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une machine cherche à deux endroits
Avant d'interroger le réseau, une machine lit son fichier hosts. Si le nom y est, cette réponse l'emporte. Ensuite seulement le résolveur interroge un serveur DNS.
Un fichier /etc/nsswitch.conf fixe l'ordre. Le mot files désigne le fichier hosts, et dns le serveur.
Lire l'ordre que la machine suit
grep '^hosts' /etc/nsswitch.confAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Chercher un nom comme le font les programmes
getent hosts localhostAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un serveur DNS répond avec des enregistrements
Un serveur DNS détient une zone, les noms dont il a la charge. Chaque nom a des enregistrements, et chaque réponse porte un TTL : un résolveur peut la garder aussi longtemps.
Ici vous lancez un petit serveur à vous pour une boutique inventée. Il écoute sur le port 5300, sur cette machine seulement, et détient une zone, boutique.test.
Lancer un serveur d'essai pour la boutique
sudo dnsmasq --conf-file= --no-hosts --no-resolv --port=5300 --listen-address=127.0.0.1 --bind-interfaces --local-ttl=300 --local=/boutique.test/ --host-record=boutique.test,10.20.30.40 --host-record=courrier.boutique.test,10.20.30.50 --cname=www.boutique.test,boutique.test --mx-host=boutique.test,courrier.boutique.test,10 --txt-record=boutique.test,v=demoAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple : interroger avec dig
| Vous tapez | Il demande | Il affiche |
|---|---|---|
| dig +short @127.0.0.1 -p 5300 boutique.test | L'enregistrement A | 10.20.30.40 |
| dig +noall +answer ... www.boutique.test | Le nom et ses enregistrements | Une ligne CNAME, puis la ligne A |
| dig +short ... boutique.test MX | Qui reçoit le courrier | 10 courrier.boutique.test. |
| dig +short ... -x 10.20.30.40 | Quel nom porte cette adresse | boutique.test. |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Demander l'adresse de la boutique
dig +short @127.0.0.1 -p 5300 boutique.testAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Suivre la chaîne depuis le nom www
dig +noall +answer @127.0.0.1 -p 5300 www.boutique.testAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander qui reçoit le courrier
dig +short @127.0.0.1 -p 5300 boutique.test MXAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander quel nom porte une adresse
dig +short @127.0.0.1 -p 5300 -x 10.20.30.40Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Le statut dit ce qui a mal tourné
Chaque réponse a un statut. NOERROR veut dire que le serveur a répondu. NXDOMAIN veut dire que le nom n'existe pas dans une zone que le serveur détient.
REFUSED veut dire que le serveur ne répondra pas du tout pour ce nom. Votre serveur d'essai ne détient que boutique.test et n'a personne d'autre à interroger.
Demander un nom absent de la zone
dig @127.0.0.1 -p 5300 rien.boutique.test | grep statusAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander un nom d'une autre zone
dig @127.0.0.1 -p 5300 boutique.invalid | grep statusAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
On croit souvent que dig et ping cherchent un nom de la même façon. Ce n'est pas le cas. dig interroge un serveur DNS et rien d'autre. La plupart des programmes, ping compris, lisent d'abord le fichier hosts. Un nom peut marcher dans un navigateur et ne rien montrer avec dig.
Voir les deux façons en désaccord
dig +short @127.0.0.1 -p 5300 localhostAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une vraie recherche descend étiquette par étiquette
Sur Internet, aucun serveur ne connaît tous les noms. Un résolveur interroge la racine, puis le serveur de la terminaison, puis celui de l'entreprise.
Le labo n'a pas d'Internet : ce tableau est lu et pas exécuté. Il montre les questions pour www.boutique.exemple.
Exemple : chercher www.boutique.exemple
| Étape | Le résolveur interroge | La réponse |
|---|---|---|
| 1 | Un serveur racine | Interrogez les serveurs de la terminaison .exemple |
| 2 | Un serveur de .exemple | Interrogez les serveurs de boutique.exemple |
| 3 | Un serveur de boutique.exemple | www vaut 203.0.113.20, gardé 300 secondes |
| 4 | Personne, pendant 300 secondes | Le résolveur répond depuis sa mémoire |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Arrêter le serveur d'essai
sudo pkill -f '[-]-port=5300'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour aller plus loin : l'en-tête de dig
Lancez de nouveau dig @127.0.0.1 -p 5300 boutique.test, serveur d'essai démarré, et lisez tout l'en-tête.
Trouvez la ligne des drapeaux et les nombres de questions et de réponses. Demandez ensuite rien.boutique.test et comparez les nombres. Lequel a changé ?