Linux / Commande nslookup : requêtes DNS et mode interactif

nslookup interroge un serveur DNS pour obtenir les informations d’un nom ou d’une adresse IP. Il fonctionne en commande ponctuelle et en mode interactif pour enchaîner les recherches. Lisez séparément le serveur interrogé et les données de la réponse : une adresse DNS trouvée ne garantit pas que le service correspondant fonctionne.

Effectuer une recherche ponctuelle

DNS signifie Domain Name System. Les exemples concernent nslookup de BIND sous Linux ; vérifiez man nslookup et nslookup -version pour la version installée. La syntaxe générale est :

nslookup [-OPTION] [NOM_OU_ADRESSE] [SERVEUR_DNS]
nslookup example.com
nslookup -type=A example.com
nslookup -type=AAAA example.com
nslookup -type=MX example.com
nslookup -type=TXT example.com

Avec un nom comme argument, l’outil affiche le résultat puis quitte. -type choisit le type : A pour les adresses IPv4, AAAA pour IPv6, MX pour les échangeurs de courrier et TXT pour les textes DNS. Le comportement par défaut de BIND consulte A puis AAAA ; choisissez explicitement un type pour comparer la même question entre plusieurs serveurs.

Les options précèdent les arguments. -query=MX est une forme abrégée usuelle de querytype pour choisir MX. Ne mélangez pas une option de ligne de commande et une commande du mode interactif : leurs écritures diffèrent.

Identifier le serveur et la réponse

Le dernier argument facultatif choisit un serveur pour cette consultation :

nslookup -type=A example.com 192.0.2.53

192.0.2.53 est une adresse de documentation. Remplacez-la par celle d’un DNS autorisé de votre environnement ; elle n’est pas ici un serveur opérationnel à tester. Ce choix ne modifie pas les réglages DNS persistants de la machine.

Exemple fictif et abrégé de sortie :

Server:  192.0.2.53
Address: 192.0.2.53#53

Non-authoritative answer:
Name:    example.com
Address: 192.0.2.10

La première adresse concerne le serveur DNS utilisé, avec son port lorsque celui-ci est indiqué. L’adresse située après Name appartient à la réponse pour le nom recherché. Plusieurs réponses ou alias peuvent être affichés : ne prenez pas la première ligne Address pour l’adresse du site.

Non-authoritative answer signifie que cette réponse n’est pas présentée comme faisant autorité pour la zone. Un résolveur récursif peut l’avoir obtenue ou l’avoir conservée en cache ; cette mention n’est pas une erreur et ne signifie pas que la donnée est nécessairement fausse.

La réponse peut varier selon le serveur, le cache, la vue DNS interne ou publique et le moment de la consultation. Conservez le même nom et le même type pour comparer. Si vous devez lire le TTL, les sections et le statut en détail, la commande dig pour analyser une réponse DNS fournit une présentation plus complète.

Utiliser et quitter le mode interactif

Lancez d’abord le programme sans argument :

nslookup

Saisissez ensuite ces lignes dans nslookup, une par une ; elles ne sont pas des commandes à lancer directement dans Bash :

set type=MX
example.com.
set type=A
example.com.
exit

Le premier réglage demande MX, puis le second rétablit A avant une nouvelle recherche. Le point final rend le nom absolu et évite qu’un suffixe de recherche soit ajouté. exit termine le programme ; Ctrl+D permet également de terminer une entrée interactive sous Linux.

Pour choisir temporairement un autre serveur dans cette session, utilisez server suivi de son adresse réelle. Pour entrer directement en mode interactif avec un serveur explicite, la forme générale est nslookup - serveur. Un réglage effectué dans la session concerne les recherches de ce programme ; il ne réécrit pas la configuration système.

Distinguer recherche inverse, erreur DNS et panne réseau

nslookup 192.0.2.10
nslookup -type=A -timeout=2 example.com

Une adresse comme premier argument déclenche normalement la recherche inverse PTR, Pointer, avec le type par défaut. Utilisez une adresse réelle à vérifier ; l’adresse fictive ne possède pas ici de nom garanti. Un PTR absent ne prouve pas qu’une adresse est libre ou qu’un serveur est arrêté.

-timeout=2 règle l’intervalle initial d’attente en secondes. Des tentatives supplémentaires et plusieurs recherches peuvent prolonger l’exécution ; ce n’est pas une échéance globale de deux secondes. En mode interactif, set timeout=2 modifie ce paramètre.

Situation Vérification utile
Nom déclaré inexistant Confirmer le nom exact, le serveur et une éventuelle vue interne.
Pas de donnée pour un type Ne pas confondre une absence AAAA avec l’inexistence du nom qui possède un A.
SERVFAIL ou refus Examiner le traitement et la politique du serveur, plutôt que déclarer le domaine absent.
Délai expiré Contrôler le serveur choisi, sa disponibilité et le passage du trafic DNS.
DNS correct, application en échec Vérifier son chemin de résolution et le protocole du service séparément.

nslookup ne reproduit pas toute la résolution de noms d’une application, notamment /etc/hosts et les sources NSS, Name Service Switch. La commande getent pour consulter les bases de noms du système peut donc donner une vue différente sans contradiction.

Pour BIND nslookup, le code de sortie est 1 si une requête a échoué, et 0 sinon. Lisez néanmoins le résultat précis : le succès d’une requête DNS n’atteste pas la disponibilité HTTP, SSH ou d’un autre service. Le manuel officiel nslookup de BIND 9 détaille les modes, options et valeurs de retour.