Czy wpisy w lokalnych plikach „hostów” zastępują zarówno wyszukiwanie do przodu, jak i do tyłu?

16

Jeśli mam następujące wpisy w pliku hosts:

192.168.100.1    bugs
192.168.100.2    daffy.example.com
192.168.100.3    elmer.example.com.

Czy próby rozpoznawania nazw IP-> przez lokalne zastosowania (zakładam użycie „gethostbyaddr” lub odpowiednika Windows) honorują te wpisy? Czy to zachowanie można skonfigurować? Czym różni się w zależności od systemu operacyjnego? Czy ma znaczenie to, czy wpisy pliku „hosty” są w pełni kwalifikowane, czy nie?

EDYCJA: W odpowiedzi na Russella, w moim testowym systemie Linux działa RHEL 4. Mój /etc/nsswitch.conf zawiera następującą linię „hosts”:

hosts:      files dns nis

Jeśli pinguję jednego z moich hostów według nazwy (np. Błędy, daffy), rozdzielczość przesyłania dalej działa poprawnie. Jeśli śledzę dowolny z nich według adresu IP, wyszukiwanie wsteczne działa zgodnie z oczekiwaniami. Jeśli jednak pinguję je za pomocą adresu IP, polecenie ping nie wydaje się rozpoznawać nazw hostów. Zrozumiałem, że ping Linux zawsze będzie próbował rozwiązać adresy IP na nazwy, chyba że zalecono inaczej. Dlaczego traceroute miałby obsługiwać wyszukiwania wsteczne w plikach hostów, a ping nie?

Murali Suriar
źródło

Odpowiedzi:

16

Zasadniczo plik hosts będzie używany zarówno do wyszukiwania do przodu, jak i do tyłu. Preferencje w systemie Unix będzie to zależeć od kolejności wpisów w pliku nsswitch.conf.

np. wiersz poniżej spowoduje, że plik hosts zastąpi DNS. Odwrócenie wpisów spowoduje, że DNS zastąpi plik hosts.

hosts: pliki dns

Nie jestem pewien, czy można dostroić kolejność preferencji w systemie Windows.

Spojrzałem na źródło pingowania w inetutils-20071127 (wersja zainstalowana na moim Ubuntu 9.04) i wydaje się, że źródło włącza tryb tylko numeryczny, jeśli pingujesz adres IP zamiast nazwy hosta:

                if (inet_aton (target, & whereto.sin_addr) == 1) {
                        nazwa hosta = cel;
                        if (argc == 1)
                                opcje | = F_NUMERIC;

To może wyjaśniać, dlaczego nie otrzymujesz wstecznego wyszukiwania, gdy wysyłasz ping do hosta według adresu IP.

Russell Heilling
źródło
Tak myślałem, ale tak nie jest. Zobacz zaktualizowane pytanie, aby uzyskać szczegółowe informacje.
Murali Suriar
Nie miałem jeszcze okazji spojrzeć na źródło; Jednak szybkie spojrzenie na pokazach wyjściowych LDD, że w moim systemie ping jest połączony bezpośrednio do biblioteki programu rozpoznawania nazw DNS libresolv, co mogłoby sugerować, że jest z pominięciem pliku nsswitch i robi swoje wyszukiwania wstecznego bezpośrednio ...
Russell Heilling
Korzystając z hostnarzędzia ISC , można odnieść wrażenie, że edycja / etc / hosts nie ma żadnego wpływu. host 10.0.0.1wykona zapytanie DNS i zignoruje plik hosts. Umożliwia to sprawdzenie resolvera systemu:perl -MSocket -le '$a=inet_aton(shift); $_=gethostbyaddr $a, AF_INET; print' 10.0.0.1
mivk
8

Znalazłem odniesienie do zmiany wpisów rejestru w celu zmiany kolejności rozpoznawania nazw w systemie Windows:

http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=963485

Cytując stamtąd:

Domyślnie system Windows sprawdza dostawców rozpoznawania nazw w następującej kolejności:

Lokalny, (pamięć podręczna lokalnych nazw NetBT), hosty, DNS, NetBT (WINS).

Chcesz, aby zamówienie było hostami, DNS, lokalnymi, NetBT.

W dalszej części niższe liczby mają wyższy priorytet.

Następujące klucze rejestru w

HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\ServicessTcpip\ServiceProvider

wymagają modyfikacji.

DnsPriority= 0x3e8 (Decimal: 1000)
HostsPriority= 0x1f4 (Decimal: 500)
LocalPriority= 0x5dc (Decimal: 1500)
NetbtPriority= 0x7d1 (Decimal: 2001)
James F.
źródło
Skąd czerpią takie „wewnętrzne informacje”?
Pacerier
1

W /etc/host.confOkreśla jakiej kolejności plik jest używany do wykrywania adresów IP. Mój domyślnie zawiera następujące elementy:

#
# /etc/host.conf
#

order hosts,bind
multi on

Oznacza to, że plik hosts jest zawsze najpierw sprawdzany, a następnie DNS (wiązanie).

Jeśli nisnie zostanie tu określone, to nigdy nie będzie na nie patrzeć /etc/nsswitch.conf.

Link do dokumentacji: http://tldp.org/LDP/nag/node82.html

Sekenre
źródło
Metoda /etc/host.conf jest przestarzała dla niektórych systemów, używana jest tylko nsswitch.conf (jak systemy oparte na glibc i eglibc). Te wersje glibc parsują plik „/etc/host.conf” bez ostrzeżenia i odrzucają wiersz „order”.