Mappage du nom d'hôte et de l'adresse IP dans / etc / hosts

14

Dans ma machine Linux, quand je cours hostname, ça montre mongodb, mais quand je cours host mongodb, ça montre:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

Mon /etc/hostsdossier:

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#127.0.0.1 localhost
# 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
  • Ma première question est: étant donné que le /etc/hostsmappage de l'IP au nom d'hôte, pourquoi cette machine ne peut pas résoudre le nom mongodbd' hôte en IP 192.168.10.10? Au lieu de cela, lorsque je cours host localhost, il peut être résolu et affiche:

    localhost has address 127.0.0.1
    
  • Ma autre question: selon le /etc/hostsfichier, le nom d'hôte localhostaurait dû être résolu en 192.168.10.10 au lieu de l'adresse IP de bouclage 127.0.0.1. Quelqu'un peut-il m'expliquer cela?

wuchang
la source

Réponses:

30

Les utilitaires host(et nslookup) interrogent explicitement les serveurs DNS et ne consultent pas le /etc/hostsfichier dans une configuration système par défaut. Si vous deviez tracerouteou pingcette adresse, vous la verriez correctement se résoudre.

Vous ne pas voulez changer localhostde carte à tout autre que 127.0.0.1, cela peut avoir des effets étranges et subtiles sur beaucoup de choses. Je pense que /etc/hostsc'est analysé dans l'ordre dans lequel il est écrit, et puisque vous avez:

192.168.10.10   localhost
127.0.0.1       localhost

..la deuxième entrée peut remplacer la première.

DopeGhoti
la source
5
/etc/hostsn'a aucun effet sur la résolution DNS lors de l'interrogation directe des serveurs DNS, ce qui est le hostcas. Cependant, de nombreux outils et utilitaires système utilisent la localhostdéfinition, s'attendant à ce qu'il s'agisse d'une adresse de bouclage, et utilisent la résolution de noms de système (qui examine /etc/hostsavant d'interroger DNS) pour résoudre les noms plutôt que d'aller strictement à DNS, qui peut ne pas toujours être présent.
DopeGhoti
1
Je peux également partager mon expérience avec des problèmes dans le /etc/hostsdossier concernant localhost. Dans le passé, nous avions utilisé des logiciels qui inséraient un 127.0.0.2 localhostfichier dans le fichier hosts et, comme localhostc'était la dernière entrée, c'était celui qui provoquait toutes sortes de problèmes de logiciels et de licences. Ma recommandation est donc d'avoir 127.0.0.1 localhostcomme première entrée dans votre /etc/hostsfichier et de vous assurer qu'il n'y a pas d'autre localhostentrée dans ce fichier. Et je vérifierais également tous les trucs ipv6.
ron
5
Pour être quelque peu pédant, les deux font une recherche ns qui pourrait être une recherche dns si c'est ainsi que vous avez configuré la recherche d'hôte dans nsswitch.conf.
symcbean
1
@symcbean - ce que vous dites est correct. Je n'appellerais pas ça pédant.
DarkHeart
2
Une exception notable non évidente à cela est si vous /etc/resolv.confpointez sur un serveur DNS fonctionnant directement sur votre appareil (comme une mise en cache dnsmasq) et que ce serveur consulte votre section locale /etc/hostsavant d'interroger des serveurs externes. Ensuite, indirectement, des commandes comme celles- hostci seront effectuées par votre /etc/hosts- il s'agit d'une configuration peu commune, mais celle avec laquelle j'ai vu des appareils être livrés, et l'expérience de quelqu'un utilisant un tel système peut sembler entrer en conflit avec cette réponse si quelqu'un n'est pas au courant de cette configuration particulière .
mtraceur
9

En plus de la réponse de DopeGhoti, pour tester votre résolution, y compris la /etc/hostspriorité, vous pouvez utiliser la getent hosts <some_hostname>commande.

HBruijn
la source
-3

J'ai eu des problèmes similaires avec un / etc / hosts contenant plusieurs espaces entre IP et nom d'hôte, à la place en utilisant un TAB. Après avoir changé en TAB, le nom d'hôte peut être résolu par ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

voir aussi sur /superuser//a/938366/467479

Thomas Lauria
la source
5
Cela me surprend. La page de manuel de hostsdit: Fields of the entry are separated by any number of blanks and/or tab characters. Peut - être dans votre cas il y avait un caractère non imprimable superflu entre l'IP et le nom d'hôte?
dr01
Il n'y avait définitivement pas de caractères non imprimables. J'ai vérifié cela avant de le poster ici;)
Thomas Lauria
Je n'ai pas de caractères de tabulation, j'exécute SLES 11.x, et après une nouvelle installation à partir du DVD, mon fichier / etc / hosts a 127.0.0.1suivi de 7 espaces suivis de localhost. Je serais donc un peu hésitant à épingler le problème spécifiquement sur plusieurs caractères d'espace et à conclure en utilisant le caractère de tabulation comme solution.
ron
J'ai oublié de mentionner que l'onglet par rapport à l'espace peut également se produire dans une version ou une distribution spécifique de Linux, ce qui peut être un bug? et si tel était le cas, vous devriez pouvoir faire diverses entrées d'adresse IP / nom d'hôte avec un onglet ou un espace, puis faites un ping dessus pour voir si cela est résolu ... ne le faites pas aveclocalhost
ron
malheureusement je ne me souviens pas sur quelle machine (et donc distribution) j'ai rencontré le problème ... - Je pense que c'était sur Ubuntu 15.05 de virtualboximages.com/… je vais l'évaluer.
Thomas Lauria