Quelle est la différence entre `dig` et` host` lors de l'interrogation d'un serveur de noms spécifique?

11

J'utilisais cette commande pour vérifier si j'avais configuré correctement les choses avec un fournisseur DNS:

host hostname.example.com ns1.example-nameserver.com

Pour autant que je sache, cela demande ns1.example-nameserver.comde rechercher hostname.example.comet de rapporter la réponse. J'obtenais une réponse d'hôte introuvable alors j'ai pensé que je l'avais mal fait. Cependant, sans préciser leur nom serveur (ce qui permet nom serveur de mon fournisseur d' accès Internet pour le rechercher) Je suis la bonne réponse ( hostnameest un CNAMEsi elle importe). Je ne pouvais pas comprendre cela, j'ai donc cherché et trouvé la digcommande:

dig @ns1.example-nameserver.com hostname.example.com

Pour autant que je sache, cela fait la même chose que la hostcommande - demande à un serveur de noms spécifique de rechercher un hôte. Je conclus donc qu'ils doivent le faire différemment et que la mise en cache des serveurs de noms doit utiliser la même méthode que dig.

Ma conclusion est bonne ou mauvaise, si elle est juste:

Quelle est la différence entre ces deux méthodes de recherche?

Si c'est faux:

Quels sont mes malentendus à propos du DNS et des commandes hostet digqui m'ont conduit à cette conclusion?

Exemple de sortie:

$ host cardiff.tzmchapters.org ns1.livedns.co.uk
Using domain server:
Name: ns1.livedns.co.uk
Address: 213.171.192.250#53
Aliases: 

Host cardiff.tzmchapters.org not found: 3(NXDOMAIN)

$ dig @ns1.livedns.co.uk cardiff.tzmchapters.org

; <<>> DiG 9.8.3-P1 <<>> @ns1.livedns.co.uk cardiff.tzmchapters.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23620
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;cardiff.tzmchapters.org.   IN  A

;; ANSWER SECTION:
cardiff.tzmchapters.org. 3600   IN  CNAME   ghs.google.com.

;; AUTHORITY SECTION:
google.com.     3600    IN  SOA ns1.livedns.co.uk. admin.google.com. 1354213742 10800 3600 604800 3600

;; Query time: 27 msec
;; SERVER: 213.171.192.250#53(213.171.192.250)
;; WHEN: Mon Apr 22 23:47:05 2013
;; MSG SIZE  rcvd: 128
jhabbott
la source
les deux commandes devraient fonctionner de la même manière dans ce cas. Pouvez-vous afficher la sortie complète de chaque commande?
Renan
Remarquez comment les deux diget hostsignalez NXDOMAIN. Avec digvous pouvez le voir dans l'en-tête (5ème ligne non vierge de la sortie) et avec hostc'est plus évident. NXDOMAINsignifie que le domaine n'existe pas. Pourtant, un CNAMEest retourné dans la section réponse! Je crois que c'est un bug dans le serveur DNS!
Celada
Donc dans ce cas, est-ce digque les hostdeux envoient exactement le même paquet de requête, obtiennent exactement le même paquet de réponse (à part les horodatages), mais l'interprètent différemment? hostRenfloue- t-il dès qu'il voit NXDOMAIN?
jhabbott
FWIW J'ai exactement le problème opposé sur un sous-domaine spécifique. L'utilisation de l'hôte sur ce sous-domaine spécifique fournit l'enregistrement attendu montrant que ce sous-domaine particulier se résout en un nom d'hôte canonique attendu. Cependant, lorsque j'utilise dig sur ce sous-domaine particulier, je reçois une réponse indiquant que l'enregistrement n'existe pas. En outre, la navigation vers ce sous-domaine avec un navigateur ne fonctionne pas. J'ai essayé plusieurs fois, en vérifiant les fautes d'orthographe, etc. Les commandes ne fonctionnent clairement PAS de la même manière.
user12345

Réponses:

13

host, diget nslookuptous partagent la plupart des mêmes fonctionnalités. Dans le cas où vous posez des questions sur (poser une question DNS particulière à un serveur de noms particulier), diget host(et en effet nslookup) vous comportez exactement la même chose.

Pour le dépannage DNS, digest préférable car son format de sortie est plus "brut": dans sa sortie, il affiche directement le contenu des 4 champs de la réponse DNS: question, réponse, autorité et sections supplémentaires (plus les indicateurs dans l'en-tête) , et il a également plus d'options. host, d'autre part, a un format de sortie plus convivial.

Si vous n'avez pas besoin d'une option que l'une des commandes possède et que les autres n'ont pas, ou d'un élément d'information que l'un d'eux génère et les autres non, alors cela revient à une question de préférence.

Celada
la source
2
S'ils font la même chose du côté du réseau (la requête réelle), comment puis-je obtenir un hôte non trouvé lors de l'utilisation, hostmais la bonne réponse lors de l'utilisation dig? Même si le serveur est configuré en utilisant un paramètre particulier (par choix ou accident) pour provoquer cela, il doit être capable de différencier les demandes.
jhabbott
Nan! Les deux commandes que vous donnez dans votre question sont équivalentes et elles devraient produire la même réponse! Êtes-vous sûr que cela digvous a donné une réponse réelle et non un enregistrement dans la section supplémentaire ou d'autorisation? Comme le suggère Renan , il peut être utile d'afficher la sortie.
Celada
Ok, j'ai ajouté un exemple de sortie. J'obtiens le même résultat à la maison et au travail. Lorsque je ne spécifie pas de serveur de noms à utiliser et que mon FAI gère la requête, cela hostfonctionne bien. Veuillez l'essayer vous-même et faites-moi connaître les résultats.
jhabbott
Juste en passant en revue cela - Le FAI m'a finalement dit que son serveur était configuré pour ne pas répondre aux requêtes directes des clients, uniquement aux autres serveurs de noms demandant des transferts d'informations - la digrequête est-elle différente, comme le ferait un serveur de noms?
jhabbott
1
creuser peut faire à la fois des questions régulières (tous les types sauf AXFR) et des transferts de zone (type AXFR) mais les opérateurs DNS limitent généralement les transferts de zone aux esclaves autorisés, vous voudrez donc probablement utiliser des questions régulières
Celada
0

Si vous utilisez le nom d'hôte non FQDN, les résultats peuvent être différents car hostils utiliseront les domaines de recherche dans resolv.conf, alors que ce dign'est pas le cas par défaut.

Vous devez utiliser l' +searchoption si vous souhaitez digutiliser resolv.conf(ou l'ajouter à ~/.digrc).

Par exemple:

$ host foo
foo.myfqdn.com has address 10.1.2.3

$ dig +short foo
# (no result)

$ dig +short +search foo
10.1.2.3
wisbucky
la source