Mapowanie nazwy hosta i adresu IP w / etc / hosts

14

Na moim komputerze z systemem Linux, gdy uruchamiam hostname, pokazuje mongodb, ale kiedy uruchamiam host mongodb, pokazuje:

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

Mój /etc/hostsplik:

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
  • Moje pierwsze pytanie brzmi: skoro /etc/hostsmapowanie z adresu IP na nazwę hosta, dlaczego to urządzenie nie może rozpoznać nazwy hosta mongodbna IP 192.168.10.10? Zamiast tego po uruchomieniu host localhostmożna go rozwiązać i wyświetla:

    localhost has address 127.0.0.1
    
  • Moje kolejne pytanie: zgodnie z /etc/hostsplikiem nazwa hosta localhostpowinna zostać rozstrzygnięta na 192.168.10.10 zamiast adresu IP sprzężenia zwrotnego 127.0.0.1. Czy ktoś może mi to wyjaśnić?

wuchang
źródło

Odpowiedzi:

30

Narzędzia host(i nslookup) jawnie odpytują serwery DNS i nie sprawdzają /etc/hostspliku w domyślnej konfiguracji systemu. Jeśli byłeś pod tym adresem traceroutelub pod pingtym adresem, zobaczysz go poprawnie rozwiązany.

Zdajesz nie chce zmienić localhostmapowanie do niczego innego niż 127.0.0.1, może to mieć dziwne i subtelny wpływ na wiele rzeczy. Myślę , że /etc/hostsjest to parsowane w kolejności, w jakiej jest napisane, a ponieważ masz:

192.168.10.10   localhost
127.0.0.1       localhost

.. drugi wpis może zastępować pierwszy.

DopeGhoti
źródło
5
/etc/hostsnie ma żadnego wpływu na rozpoznawanie DNS podczas bezpośredniego wysyłania zapytań do serwerów DNS, co właśnie hostrobi. Jednak wiele narzędzi i narzędzi systemowych korzysta z localhostdefinicji, oczekując, że będzie to adres zwrotny, i używa rozpoznawania nazw systemu (które sprawdzane są /etc/hostsprzed zapytaniem o DNS) do rozpoznawania nazw, a nie tylko do DNS, które nie zawsze mogą być obecne.
DopeGhoti
1
Mogę również podzielić się doświadczeniami dotyczącymi problemów w /etc/hostspliku dotyczących localhost. W przeszłości korzystaliśmy z oprogramowania, które wstawiałoby 127.0.0.2 localhostplik hosta, a ten ostatni localhostwpis powodował, że w rzeczywistości powodował on różnego rodzaju problemy z oprogramowaniem i licencjami. Więc zalecam, aby mieć 127.0.0.1 localhostjako pierwszy wpis w /etc/hostspliku i upewnić się, że nie ma w nim innych localhostwpisów. Sprawdziłbym również wszelkie rzeczy związane z ipv6.
ron
5
Aby być trochę pedantycznym, oba wykonują wyszukiwanie ns, które może być wyszukiwaniem dns, jeśli tak skonfigurowałeś wyszukiwanie hosta w nsswitch.conf.
symcbean
1
@symcbean - to, co mówisz, jest poprawne. Nie nazwałbym tego pedantycznym.
DarkHeart
2
Godnym uwagi nieoczywistym wyjątkiem jest to, że /etc/resolv.confwskazujesz na serwer DNS działający bezpośrednio na twoim urządzeniu (np. Buforowanie dnsmasq), a ten serwer konsultuje się z lokalnym /etc/hostsprzed zapytaniem serwerów zewnętrznych. Następnie pośrednio takie polecenia hostzostaną wykonane przez Ciebie /etc/hosts- jest to rzadka konfiguracja, ale widziałem, że urządzenia są dostarczane, a doświadczenie kogoś korzystającego z takiego systemu może wydawać się sprzeczne z tą odpowiedzią, jeśli ktoś nie jest świadomy tej szczególnej konfiguracji .
mtraceur
9

Oprócz odpowiedzi DopeGhoti, aby przetestować swoje rozwiązanie, w tym /etc/hostspierwszeństwo, możesz użyć getent hosts <some_hostname>polecenia.

HBruijn
źródło
-3

Mam podobne problemy z plikiem / etc / hosts zawierającym wiele spacji między adresem IP a nazwą hosta, zamiast tego za pomocą TAB. Po zmianie na TAB nazwę hosta można rozwiązać za pomocą polecenia ping.

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

patrz również na /superuser//a/938366/467479

Thomas Lauria
źródło
5
To mnie zaskakuje. Strona podręcznika hostsmówi: Fields of the entry are separated by any number of blanks and/or tab characters. Być może w twoim przypadku istniała jakaś obca postać, która nie może zostać wydrukowana między adresem IP a nazwą hosta?
dr_
Nie było definitywnie żadnych znaków niedrukowalnych. Sprawdziłem to, zanim opublikowałem to tutaj;)
Thomas Lauria,
Nie mam znaków tabulacji, uruchamiam SLES 11.x, a po czystej instalacji z dvd po moim pliku / etc / hosts 127.0.0.1następuje 7 spacji, po których następuje localhost. Byłbym więc nieco niezdecydowany, aby przypiąć problem konkretnie do wielu znaków spacji i zakończyć używanie znaku tabulacji jako rozwiązania.
ron
zapomniałeś wspomnieć, że tabulacja kontra przestrzeń może się także zdarzyć w ramach określonej wersji lub dystrybucji linuksa, co może być błędem? a jeśli tak, powinieneś być w stanie wprowadzić różne adresy IP / nazwy hosta za pomocą tabulacji lub spacji, a następnie zrób ping na nich, aby sprawdzić, czy problem zostanie rozwiązany ... po prostu nie rób tego zlocalhost
ron
niestety nie pamiętam, na której maszynie (a zatem i dystrybucji) napotkałem problem ... - Myślę, że to było na Ubuntu 15.05 z virtualboximages.com/ ... Zamierzam to ocenić.
Thomas Lauria,