Mappatura nome host e indirizzo IP in / etc / hosts


14

Nella mia macchina linux, quando corro hostname, mostra mongodb, ma quando corro host mongodb, mostra:

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

Il mio /etc/hostsfile:

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
  • La mia prima domanda è: dato che si /etc/hostssta mappando da IP a nome host, perché questa macchina non è in grado di risolvere il nome host mongodba IP 192.168.10.10? Invece, quando corro host localhost, può essere risolto e mostra:

    localhost has address 127.0.0.1
    
  • Un'altra mia domanda: secondo il /etc/hostsfile, il nome host localhostavrebbe dovuto essere risolto in 192.168.10.10 invece dell'indirizzo IP di loopback 127.0.0.1. Qualcuno può spiegarmelo?

Risposte:


30

Le utilità host(e nslookup) interrogano esplicitamente i server DNS e non consultano il /etc/hostsfile in una configurazione di sistema predefinita. Se dovessi tracerouteo pingquell'indirizzo, lo vedresti risolto correttamente.

Tu non vuole cambiare localhostper mappare a qualcosa di diverso da 127.0.0.1, questo può avere effetti strani e sottili su molte cose. Io penso che /etc/hostsviene analizzato nell'ordine in cui è scritto, e dal momento che si dispone di:

192.168.10.10   localhost
127.0.0.1       localhost

..la seconda voce potrebbe avere la precedenza sulla prima.


5
/etc/hostsnon ha alcun effetto sulla risoluzione DNS durante l'interrogazione diretta dei server DNS, che è ciò che hostfa. Tuttavia, molti strumenti e utilità di sistema usano la localhostdefinizione, aspettandosi che sia un indirizzo di loopback e usano la risoluzione dei nomi di sistema (che esamina /etc/hostsprima di interrogare il DNS) per risolvere i nomi piuttosto che andare strettamente al DNS, che potrebbe non essere sempre presente.
DopeGhoti,

1
Posso anche condividere esperienze con problemi nel /etc/hostsfile riguardanti localhost. In passato avevamo usato un software che inseriva un 127.0.0.2 localhostfile nel file hosts e con quella che era l'ultima localhostvoce che lo faceva diventare quello in effetti causava tutti i tipi di software e problemi di licenza. Quindi la mia raccomandazione è di avere 127.0.0.1 localhostcome prima voce nel tuo /etc/hostsfile e assicurarti che non ci sia altra localhostvoce in quel file. E verificherei anche qualsiasi materiale ipv6.
Ron,

5
Per essere un po 'pedanti, entrambi eseguono una ricerca ns che potrebbe essere una ricerca DNS se è così che è stata configurata la ricerca host in nsswitch.conf.
symcbean,

1
@symcbean - quello che dici è corretto. Non lo definirei pedante.
DarkHeart,

2
Una notevole eccezione non ovvia a ciò è se si /etc/resolv.confpunta a un server DNS in esecuzione direttamente sul dispositivo (come una cache dnsmasq) e detto server sta consultando il proprio locale /etc/hostsprima di interrogare server esterni. Quindi, indirettamente, comandi simili hostverranno eseguiti dal tuo /etc/hosts- questa è una configurazione non comune, ma quella con cui ho visto i dispositivi spediti, e l'esperienza di qualcuno che usa un tale sistema può sembrare in conflitto con questa risposta se qualcuno non è a conoscenza di questa particolare configurazione .
mtraceur,

9

Oltre alla risposta di DopeGhoti, per testare la tua risoluzione, compresa la /etc/hostsprecedenza, puoi usare il getent hosts <some_hostname>comando.


-3

Ho avuto problemi simili con un / etc / hosts contenente più spazi tra IP e nome host, invece usando una scheda. Dopo essere passato a TAB, il nome host può essere risolto tramite ping.

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

vedi anche su /superuser//a/938366/467479


5
Questo mi sorprende. La manpage di hostsdice: Fields of the entry are separated by any number of blanks and/or tab characters. Forse nel tuo caso c'era un carattere estraneo non stampabile tra l'IP e il nome host?
dr01,

Non c'erano definitivamente personaggi non stampabili. L'ho controllato prima di pubblicarlo qui;)
Thomas Lauria,

Non ho i caratteri di tabulazione, eseguo SLES 11.x e dopo un'installazione pulita da dvd il mio file / etc / hosts è 127.0.0.1seguito da 7 spazi seguiti da localhost. Quindi sarei un po 'titubante nel fissare il problema specificamente su più caratteri spaziali e concludere usando il carattere tab come soluzione.
Ron,

dimenticato di menzionare la tab contro lo spazio può anche accadere all'interno di una versione specifica o distribuzione di Linux, che può essere un bug? e in tal caso dovresti essere in grado di creare varie voci di indirizzo IP / nome host con una scheda o uno spazio, quindi esegui un ping per vedere se viene risolto ... non farlo conlocalhost
ron

sfortunatamente non ricordo su quale macchina (e quindi distro) ho riscontrato il problema ... - Penso che sia stato su Ubuntu 15.05 da virtualboximages.com/… Sto per valutarlo.
Thomas Lauria,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.