J'ai le /etc/hosts
fichier 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 puppetmaster
correctement, 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?
la source
/etc/nsswitch.conf
ressemblait à cecihosts: files dns
et je l'ai changé,hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
mais dans les deux cas, il/etc/hosts
n'est pas demandé, à la place, il semble que des requêtes DNS directes soient effectuées. Comment puis-je m'assurer que/etc/hosts
sera interrogé en premier lors de l'utilisation d'une commande commedig
ouhost
?getent hosts
ou quelque chose d'autre qui utilisegethostbyname()
getent ahosts
plutôt quegetent hosts
parce que lesgetent hosts
utilisationsgethostbyaddr()
ougethostbyname*()
qui sont obsolètes. Si j'ai bien compris,getent hosts
émule l'ancien fonctionnement des programmes UNIX C etgetent ahosts
émule le fonctionnement des programmes moderm.Parce que l'
host
utilitaire est exclusivement un utilitaire de recherche DNS.La plupart des applications utilisent les appels de bibliothèque
getaddrinfo
ougethostbyname
. Ces bibliothèques interrogent un fichier appelé/etc/nsswitch.conf
pour déterminer la priorité de recherche et la politique sur la façon d'effectuer différentes recherches./etc/nsswitch.conf
Contient généralement la ligneCe qui indique à un programme d'interroger d'abord
/etc/hosts
puis d'interroger DNS en cas d'échec.Étant donné que les hôtes effectuent exclusivement des recherches DNS, il ne regarde pas
/etc/hosts
pour effectuer la recherche.la source
Vous le trouverez
dig
et vous vousnslookup
comporterez de la même manière quehost
.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.conf
puis (si nécessaire)/etc/resolv.conf
pour décider comment résoudre le nom d'hôte que vous demandez. (Il s'agit d'une simplification, il existe d'autres options.) Lensswitch.conf
fichier place généralement la priorité sur les fichiers locaux plutôt que sur DNS.la source
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 à
si le vôtre n'est pas présent ou dans un ordre différent, cela pourrait être votre problème.
la source
hosts: files dns