web-dev-qa-db-fra.com

Comment Traceroute résolve les noms?

Lors de la rédaction d'un script, je voulais faire référence à une machine par le nom de l'ordinateur que je l'ai donné (par exemple "selenium-rc"). Je ne pouvais pas ping-à-moi en utilisant "selenium-rc", j'ai donc essayé les commandes suivantes de voir si le nom a été 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 "trouvé" le nom. Comment? Suivant ...

> 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 du nom du système, tandis que le premier exemple utilisait un processus spécifique à TracerOne. 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 "selenium-rc" n'a pas changé sur la machine elle-même, mais le processus de résolution du nom de TracerOne doit inclure une sorte de priorité et donne désormais un résultat probablement plus autoritaire 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 que cela ne serait donc pas utile dans un script.)

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

11
Keith Bentrup

Généralement, sous Linux et Unix, Traceroute et Ping utiliseraient tous les 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 la commande dans laquelle 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 être utilisée) pour interroger en premier 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

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

hôtes: fichiers DNS

Définit la commande de recherche pour regarder dans/etc/hosts avant de rechercher DNS.

Traceroute et Ping utiliseraient tous les deux ces méthodes pour rechercher toutes les bases de données de nommage configurées. Les commandes Host et nslookup _ Les commandes n'utilisent que DNS, elles ne dupliquent donc pas nécessairement les résultats apparemment incompatibles que vous voyez.

Solaris a 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 DO - en suivant l'ensemble configuré de bases de données de nommage à la recherche.

getent hosts <hostname>

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

Alors. Dans votre cas, pour obtenir des résultats cohérents, ajoutez les éléments suivants à/etc/hôtes

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 que cela est fait, vous devriez voir des résultats plus cohérents avec Ping et Traceroute, ainsi que d'autres commandes, telles que SSH, Telnet, Curl, Wget, etc.

9
Tim Kennedy