Comment traceroute résout-il les noms?

11

Lors de l'écriture d'un script, j'ai voulu référencer une machine par le nom de l'ordinateur que je lui ai donné (par exemple "sélénium-rc"). Je ne pouvais pas le cingler en utilisant "selenium-rc", j'ai donc essayé les commandes suivantes pour voir si le nom était reconnu.

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

Ok, traceroute a "trouvé" le nom. Comment? Prochain ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

Hmm ... le mécanisme de recherche ici doit être différent car l'hôte est inconnu. Je suppose que cela utilise un processus de résolution de nom de système alors que le premier exemple utilisait un processus spécifique à traceroute. Correct?

Puis quand je suis revenu un peu plus tard ...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

Ok, résultat différent. Le nom "sélénium-rc" n'a pas changé sur la machine elle-même, mais le processus de résolution de nom de traceroute doit inclure une sorte de priorité et donne maintenant un résultat vraisemblablement plus faisant autorité attribué par un autre système / service sur le réseau. (Malheureusement, je suppose que c'est un nom dynamique que je ne contrôle pas et qu'il ne serait donc pas utile dans un script.)

Quelqu'un peut-il expliquer les résultats?

Keith Bentrup
la source

Réponses:

9

Généralement, sous Linux et Unix, traceroute et ping utilisent tous deux un appel à gethostbyname () pour rechercher le nom d'un système. gethostbyname () utilise à son tour les fichiers de configuration du système pour déterminer l'ordre dans lequel interroger les bases de données de nommage, c'est-à-dire: / etc / hosts et DNS.

Sous Linux, l'action par défaut est (ou peut être utilisée pour) pour interroger d'abord DNS, puis / etc / hosts. Cela peut être modifié ou mis à jour en définissant l'ordre souhaité dans /etc/host.conf.

Pour rechercher / etc / hosts avant DNS, définissez l'ordre suivant dans /etc/host.conf:

order hosts,bind

Dans Solaris, ce même ordre est contrôlé via le fichier /etc/nsswitch.conf, dans l'entrée de la base de données des hôtes.

hôtes: fichiers dns

Définit l'ordre de recherche pour rechercher dans / etc / hosts avant de rechercher DNS.

Traceroute et ping utiliseraient tous deux ces méthodes pour rechercher toutes les bases de données de nommage configurées. les hostet les nslookupcommandes à la fois l' utilisation que DNS, ils reproduiront pas nécessairement les résultats vous semblent incohérentes de seeing êtes la .

Solaris dispose d'un outil de recherche getent, qui peut être utilisé pour identifier les hôtes ou les adresses de la même manière que traceroute et ping - en suivant l'ensemble configuré de bases de données de nommage à rechercher.

getent hosts <hostname>

rechercherait dans les bases de données répertoriées pour les hôtes, dans /etc/nsswitch.conf.

Donc. Dans votre cas, pour obtenir des résultats cohérents, ajoutez ce qui suit à / etc / hosts

192.168.235.41 selenium-rc

Et assurez-vous que /etc/host.conf a:

order hosts,bind

Ou, assurez-vous que /etc/nsswitch.conf a:

hosts: files dns

Une fois cela fait, vous devriez voir des résultats plus cohérents avec ping et traceroute, ainsi qu'avec d'autres commandes, comme ssh, telnet, curl, wget, etc.

Tim Kennedy
la source
Lorsque j'ai interrogé le serveur DNS répertorié dans le fichier resolv.conf avec l'utilitaire dig, j'ai trouvé les deux entrées. Je suppose que traceroute a préféré celui qui est pleinement qualifié.
Keith Bentrup
2

Il semble que la recherche inversée soit correctement configurée, mais pas vers l'avant.

Votre système peut rechercher l'adresse IP 192.168.235.41 et reconnaître que c'est le cas selenium-rc, mais lorsqu'il essaie de le rechercher, selenium-rcil échoue.

Je vous recommande de vérifier /etc/hostset /etc/resolv.conf; le comportement de l' getaddrinfoappel système est dicté par ce dernier et fait référence au premier.

Shadur
la source
1

Ma conjecture: l'invocation a traceroute 192.168.235.41provoqué une requête DNS pour trouver le nom qui va avec l'adresse IP 192.168.235.41. traceroute -n 192.168.235.41est le moyen de démarrer traceroute sans qu'il effectue des recherches DNS sur chaque adresse IP qu'il trouve. Le serveur DNS a mis plus de temps à répondre que le système DNS ne voulait attendre, donc au début traceroute n'a pas donné de nom d'hôte pour 192.168.235.41. Au moment où traceroute envoie et reçoit des paquets de 192.168.235.41, votre serveur DNS a répondu, donc traceroute peut lui donner un nom d'hôte.

Donc, je dirais «problèmes de serveur DNS», avec un timing très pratique qui vous rendait suspect d'autres choses. Pensez à "la loi de Murphy" ici. Lorsque vous êtes revenu un peu plus tard, vous obtenez un nom différent pour la même adresse IP, ce qui me fait également penser que peut-être que quelqu'un jouait avec la configuration du serveur DNS pendant que vous faisiez vos traceroutes.

Bruce Ediger
la source