Deux machines interrogeant le même serveur DNS peuvent résoudre un nom différemment, sans qu’aucune des deux n’ait un problème réseau ou de configuration DNS : /etc/nsswitch.conf définit l’ordre dans lequel les sources sont consultées pour résoudre un nom, et un ordre différent entre les deux machines suffit à expliquer un résultat différent.
Ce que NSS (Name Service Switch) contrôle réellement
nsswitch.conf ne concerne pas que la résolution DNS : il définit, pour plusieurs catégories d’information système (hosts, passwd, group, shadow), la liste ordonnée des sources à consulter et l’ordre de priorité entre elles.
# /etc/nsswitch.conf : ordre par défaut sur la plupart
# des distributions modernes pour la résolution de noms
hosts: files dns
Cette ligne indique que /etc/hosts est consulté en premier, le DNS n’intervenant que si aucune entrée correspondante n’y figure. Une entrée périmée ou erronée dans /etc/hosts prend donc systématiquement le pas sur un enregistrement DNS pourtant correct, un piège classique quand une entrée de test oubliée dans /etc/hosts explique une résolution incohérente qu’on cherche en vain du côté du DNS.
Pourquoi deux machines peuvent diverger
Un ordre hosts: dns files sur une machine et hosts: files dns sur une autre suffit à produire des résultats différents pour le même nom, si une entrée existe dans /etc/hosts sur l’une des deux : ce n’est ni le DNS ni le réseau qui diffèrent, seulement l’ordre de consultation défini localement.
# Vérifie l'ordre effectivement configuré,
# la première étape avant de suspecter le DNS lui-même
cat /etc/nsswitch.conf | grep hosts
Le cas particulier des conteneurs
Un conteneur Docker ou un pod Kubernetes hérite généralement d’une configuration NSS minimale, différente de celle de l’hôte, une source fréquente de confusion pour qui compare le comportement de résolution DNS déjà documenté en contexte Kubernetes entre un conteneur et la machine qui l’héberge : l’écart ne vient pas nécessairement du réseau ou de ndots, mais potentiellement d’un nsswitch.conf différent entre les deux environnements.
Au-delà des noms d’hôtes
Le même mécanisme s’applique à passwd et group : une entrée passwd: files ldap détermine si les utilisateurs locaux (/etc/passwd) sont vérifiés avant un annuaire LDAP distant, un ordre qui peut expliquer pourquoi un utilisateur existant en LDAP mais aussi défini localement (avec des attributs différents) ne se comporte pas comme attendu selon la machine.
À retenir
/etc/nsswitch.conf définit l’ordre de consultation des sources pour résoudre noms d’hôtes, utilisateurs et groupes, un fichier qui explique souvent une divergence de comportement entre deux machines là où le DNS ou le réseau semblent pourtant identiques. Une entrée dans /etc/hosts prend le pas sur le DNS par défaut sur la plupart des distributions, un piège classique pour une entrée de test oubliée. Les conteneurs héritent généralement d’une configuration NSS minimale et différente de l’hôte, un facteur à vérifier avant de chercher la cause d’une résolution incohérente du côté du DNS lui-même.