Perché il comando host non risolve le voci in / etc / hosts?


25

Ho il seguente /etc/hostsfile su una macchina 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

Tuttavia, il comando host non risolve il nome puppetmastercorrettamente, mentre lo fa il comando telnet

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 '^]'.

Perché il comando host non risolve le voci in / etc / hosts?

Risposte:


52

Il hostprogramma utilizza direttamente libresolvper eseguire una query DNS, ovvero non utilizza gethostbyname.

La maggior parte dei programmi, quando si tenta di connettersi a un altro host, invoca la gethostbynamechiamata di sistema o una funzione simile. Questa funzione obbedisce alla configurazione di /etc/nsswitch.conf. Questo file ha una linea che in Ubuntu 12.04 è impostata come segue:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

il che significa che verrà utilizzato per primo /etc/hosts, quindi tornerà alle query DNS.

Se si desidera eseguire una ricerca host in questo modo, è possibile farlo con getent hosts. Per esempio:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

Spero che aiuti.


2
Grazie Kvisle, ma sono ancora un po 'confuso. La linea in /etc/nsswitch.confappariva così hosts: files dnse l'ho cambiata in hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4tuttavia in entrambi i casi /etc/hostsnon viene eseguita una query, invece sembra che vengano fatte query dirette dirette. Come posso assicurarmi che /etc/hostsverrà interrogato per primo quando si usa un comando come digo host?
user784637

4
Non puoi. dig / host utilizza direttamente il DNS. Se devi fare un namelookup che controlla prima il file hosts, devi usare getent hostso qualcos'altro che usagethostbyname()
Kvisle

Oh, capisco, mio ​​male, ora ho capito =)
user784637

1
Credo che al giorno d'oggi si dovrebbe usare getent ahostsinvece di getent hostsperché getent hostsusi gethostbyaddr()o gethostbyname*()che sono obsoleti. Se ho capito bene, getent hostsemula quanti vecchi programmi UNIX C funzionavano ed getent ahostsemula il modo in cui dovrebbero funzionare i programmi moderm.
Mikko Rantalainen,

Ma c'è un modo per fare in modo che il comando host usi anche / etc / hosts?
Kornel,

10

Perché l' hostutilità è esclusivamente un'utilità di ricerca DNS.

La maggior parte delle applicazioni utilizza le chiamate in libreria getaddrinfoo gethostbyname. Queste librerie interrogano un file chiamato /etc/nsswitch.confper determinare la priorità e la politica di ricerca su come eseguire ricerche diverse.

In genere /etc/nsswitch.confcontiene la linea

hosts:        files dns

Che dice a un programma di interrogare prima /etc/hostse poi interrogare DNS se non ha successo.

Poiché gli host /etc/hostseseguono esclusivamente ricerche DNS, non viene eseguita la ricerca.


3

Lo troverai dige ti nslookupcomporterai allo stesso modo di host.

La ragione di ciò è che lo scopo di tutti questi comandi è fare ricerche DNS, non cercare nei file.

La maggior parte degli altri programmi utilizza il risolutore di nomi del sistema operativo che consulta /etc/nsswitch.confe quindi (se necessario) /etc/resolv.confper decidere come risolvere il nome host richiesto. (Questa è una semplificazione, ci sono altre opzioni.) Il nsswitch.conffile di solito ha la precedenza sui file locali anziché su DNS.



-1

controlla il file /etc/nsswitch.conf e cerca la riga che inizia con la parola "hosts"? Vedi la parola "file" su questa riga? Se sì, è prima o dopo la parola "dns"?

Su un sistema normale, questa linea dovrebbe essere qualcosa di simile

hosts      files dns

se il tuo non è presente o in un ordine diverso, questo potrebbe essere il tuo problema.


È presente e si presenta cosìhosts: files dns
user784637,
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.