Pourquoi la commande host ne résout-elle pas les entrées dans / etc / hosts?


25

J'ai le /etc/hostsfichier suivant sur une machine Ubuntu 12.04

127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Cependant, la commande hôte ne résout pas le nom puppetmastercorrectement, tandis que la commande telnet est

root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)

root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.

Pourquoi la commande host ne résout-elle pas les entrées dans / etc / hosts?

Réponses:


52

Le hostprogramme utilise libresolvpour effectuer une requête DNS directement, c'est-à-dire qu'il n'utilise pas gethostbyname.

La plupart des programmes, lorsqu'ils tentent de se connecter à un autre hôte, gethostbynameappellent l'appel système ou une fonction similaire. Cette fonction obéit à la configuration de /etc/nsswitch.conf. Ce fichier a une ligne qui dans Ubuntu 12.04 est par défaut la suivante:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

ce qui signifie qu'il utilisera d'abord /etc/hosts, puis retombera sur les requêtes DNS.

Si vous souhaitez effectuer une recherche d'hôte de cette façon, vous pouvez le faire avec getent hosts. Par exemple:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

J'espère que ça aide.


2
Merci Kvisle, mais je suis toujours un peu confus. La ligne dans /etc/nsswitch.confressemblait à ceci hosts: files dnset je l'ai changé, hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4mais dans les deux cas, il /etc/hostsn'est pas demandé, à la place, il semble que des requêtes DNS directes soient effectuées. Comment puis-je m'assurer que /etc/hostssera interrogé en premier lors de l'utilisation d'une commande comme digou host?
user784637

4
Tu ne peux pas. dig / host utilise directement DNS. Si vous devez faire un namelookup qui vérifie d'abord le fichier hosts, vous devez utiliser getent hostsou quelque chose d'autre qui utilisegethostbyname()
Kvisle

Oh je vois, ma mauvaise, je l'ai maintenant =)
user784637

1
Je crois que de nos jours, il faut utiliser getent ahostsplutôt que getent hostsparce que les getent hostsutilisations gethostbyaddr()ou gethostbyname*()qui sont obsolètes. Si j'ai bien compris, getent hostsémule l'ancien fonctionnement des programmes UNIX C et getent ahostsémule le fonctionnement des programmes moderm.
Mikko Rantalainen

Mais existe-t-il un moyen d'utiliser la commande host aussi / etc / hosts?
Kornel

10

Parce que l' hostutilitaire est exclusivement un utilitaire de recherche DNS.

La plupart des applications utilisent les appels de bibliothèque getaddrinfoou gethostbyname. Ces bibliothèques interrogent un fichier appelé /etc/nsswitch.confpour déterminer la priorité de recherche et la politique sur la façon d'effectuer différentes recherches.

/etc/nsswitch.confContient généralement la ligne

hosts:        files dns

Ce qui indique à un programme d'interroger d'abord /etc/hostspuis d'interroger DNS en cas d'échec.

Étant donné que les hôtes effectuent exclusivement des recherches DNS, il ne regarde pas /etc/hostspour effectuer la recherche.


3

Vous le trouverez diget vous vous nslookupcomporterez de la même manière que host.

La raison en est que le but de toutes ces commandes est de faire des recherches DNS, pas de chercher dans des fichiers.

La plupart des autres programmes utilisent le résolveur de nom du système d'exploitation qui consulte /etc/nsswitch.confpuis (si nécessaire) /etc/resolv.confpour décider comment résoudre le nom d'hôte que vous demandez. (Il s'agit d'une simplification, il existe d'autres options.) Le nsswitch.conffichier place généralement la priorité sur les fichiers locaux plutôt que sur DNS.



-1

vérifier le fichier /etc/nsswitch.conf et chercher la ligne commençant par le mot "hosts"? Voyez-vous le mot «fichiers» sur cette ligne? Si oui, est-ce avant ou après le mot "dns"?

Sur un système normal, cette ligne devrait ressembler à

hosts      files dns

si le vôtre n'est pas présent ou dans un ordre différent, cela pourrait être votre problème.


Il est présent et ressemble à cecihosts: files dns
user784637
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.