Mam następujący /etc/hosts
plik na komputerze z 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
Jednak polecenie hosta nie rozwiązuje puppetmaster
poprawnie nazwy , podczas gdy polecenie telnet tak
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 '^]'.
Dlaczego polecenie host nie rozpoznaje wpisów w / etc / hosts?
źródło
/etc/nsswitch.conf
wyglądała takhosts: files dns
i zmieniłem ją nahosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
jednak w obu przypadkach/etc/hosts
nie jest ona odpytywana, zamiast tego wydaje się, że tworzone są bezpośrednie zapytania dns. Jak mogę się upewnić, że/etc/hosts
zostaną najpierw zapytane przy użyciu polecenia typudig
lubhost
?getent hosts
lub coś innego, co używagethostbyname()
getent ahosts
zamiast zgetent hosts
powodugetent hosts
zastosowańgethostbyaddr()
lubgethostbyname*()
które są przestarzałe. Jeśli dobrze zrozumiałem,getent hosts
emuluje, jak stare programy UNIX C działały igetent ahosts
emuluje sposób działania programów moderm.Ponieważ
host
narzędzie jest wyłącznie narzędziem do wyszukiwania DNS.Większość aplikacji korzysta z wywołań biblioteki
getaddrinfo
lubgethostbyname
. Biblioteki te/etc/nsswitch.conf
sprawdzają wywołany plik w celu ustalenia priorytetu wyszukiwania i zasad wykonywania różnych wyszukiwań.Zazwyczaj
/etc/nsswitch.conf
zawiera linięKtóry nakazuje programowi najpierw przesłuchać,
/etc/hosts
a następnie przesłuchać DNS, jeśli się nie powiedzie.Ponieważ hosty wykonują wyłącznie wyszukiwania DNS, nie
/etc/hosts
wykonuje podglądu.źródło
Znajdziesz to
dig
i będziesznslookup
zachowywać się tak samo jakhost
.Powodem tego jest to, że celem wszystkich tych poleceń jest wyszukiwanie DNS, a nie wyszukiwanie plików.
Większość innych programów korzysta z mechanizmu rozpoznawania nazw systemu operacyjnego, który konsultuje się,
/etc/nsswitch.conf
a następnie (w razie potrzeby)/etc/resolv.conf
decyduje o sposobie rozwiązania żądanej nazwy hosta. (Jest to uproszczenie, istnieją inne opcje).nsswitch.conf
Plik zwykle ma pierwszeństwo przed plikami lokalnymi, a nie DNS.źródło
sprawdzić plik /etc/nsswitch.conf i poszukać linii zaczynającej się od słowa „hosts”? Czy widzisz w tym wierszu słowo „pliki”? Jeśli tak, czy jest to przed czy po słowie „dns”?
W normalnym systemie ta linia powinna być podobna
jeśli twój nie jest obecny lub w innej kolejności, może to być twój problem.
źródło
hosts: files dns