J'ai ce qui suit /etc/hosts
fichier 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 Host ne résout pas correctement le nom puppetmaster
, 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?
Le programme Host
utilise libresolv
pour 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, appellent l'appel système gethostbyname
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 revenez aux 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.
Parce que l'utilitaire Host
est exclusivement un utilitaire de recherche DNS.
La plupart des applications utilisent les appels de bibliothèque getaddrinfo
ou gethostbyname
. Ces bibliothèques interrogent un fichier appelé /etc/nsswitch.conf
pour déterminer la priorité de recherche et la politique à suivre pour effectuer différentes recherches.
Généralement /etc/nsswitch.conf
contient la ligne
hosts: files dns
Qui indique à un programme d'interroger d'abord /etc/hosts
, puis interrogez DNS en cas d'échec.
Étant donné que les hôtes effectuent exclusivement des recherches DNS, il ne regarde pas dans /etc/hosts
pour effectuer la recherche.
Vous constaterez que Dig
et nslookup
se comportent 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.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.) Le nsswitch.conf
le fichier place généralement la priorité sur les fichiers locaux plutôt que sur DNS.