Dlaczego moje rozpoznawanie nazw wpływa na DNS nawet przy wpisie pliku hosta?

15

Korzystam z systemu Ubuntu 10.04.2 LTS Desktop. Będąc programistą, w moim /etc/hostspliku oczywiście utworzyłem „me.com” . Niestety moje rozpoznawanie nazw jest wysyłane do DNS przed pierwszym sprawdzeniem wpisu moich lokalnych hostów i nie mogę zrozumieć, dlaczego.

Ostateczny wynik jest taki, że jeśli mój plik /etc/resolv.conf zawiera nameserver 127.0.0.1tam najpierw, to otrzymam odpowiedź w mojej przeglądarce od me.com (lokalny) w ciągu mniej niż sekundy. Ale jeśli nie mam tego wpisu, moja odpowiedź trwa czasami nawet 5 sekund, jeśli mój dostawca usług internetowych jest trochę powolny.

Problem był tak kłopotliwy, że musiałem tutaj zadać pytanie (i ktoś je rozwiązał), w jaki sposób automatycznie wstawić ten wpis /etc/resolv.conf. Ale jeden z użytkowników (@shellholic) tutaj gorąco polecił (i skomentował to w kółko), że powinienem zadać to pytanie.

Czy wiesz, dlaczego rozpoznawanie nazw mojej stacji roboczej musi najpierw trafić na serwer DNS, zanim trafię na /etc/hostswpis pliku? Na razie używam sztuczki resolv.conf .

Volomike
źródło
1
Możesz spróbować poszukać /etc/nsswitch.conf. Wpisy w moim systemie są trochę nieoczywiste, ale możesz przetestować wyszukiwania tylko filesjako opcję i sprawdzić, czy to miało znaczenie.
belacqua
Tak, czy możesz podać nam dane wyjściowe cat /etc/nsswitch.confi cat /etc/host.conf? Ponadto: jak to testujesz (poprzez pingowanie, przeglądarkę, wąchanie pakietów itp.)?
umówić się na
Aby uzupełnić wersję @arrange, możesz dołączyć wynik time getent hosts me.com; hostname --fqdn; grep 'me.com' /etc/hosts; grep hosts /etc/nsswitch.conf; netstat -uln | grep ':53'; cat /etc/host.conf; wc -l /etc/hosts. Nie wahaj się zaciemniać racjonalności.
shellholic
@shellholic ^ racjonalność ^ racjonalnie? heh
belacqua
@jgbelacqua: Istotnie
shellholic

Odpowiedzi:

15

Plik /etc/nsswitch.confpozwoli Ci zmienić konfigurację rozpoznawania nazw. Domyślnie plik hosta jest pierwszym, a następnie skonfigurowanym DNS. Może być więcej opcji.

Plik /etc/hostszawiera tylko adresy IP i nazwy hostów (wiele nazw dla jednego adresu IP, jeśli chcesz)

Plik /etc/resolv.confzawiera listę domyślnych domen wyszukiwania, a także listę serwerów, których należy użyć.

jfmessier
źródło
4
Pamiętaj również, że gdy nazwa zostanie rozpoznana przez aplikację lub usługę na twoim Linux-ie, pozostanie w pamięci podręcznej przez czas znany jako TTL (czas życia). Jeśli więc zmienisz sekwencję rozdzielczości, lepiej zrestartuj system lub wyczyść pamięć podręczną.
jfmessier
jak wyczyścić pamięć podręczną?
Eric Johnson
Nie jestem pewien, ale ponowne uruchomienie połączenia sieciowego za pomocą komend ifup i ifdown może to zrobić. Oczywiście ponowne uruchomienie powinno wyczyścić pamięć podręczną, ale używamy Linuksa, prawda?
jfmessier
nscdmoże buforować zapytania dotyczące rozpoznawania nazw, ale nie szanuje ttl (dlatego buforowanie hostów jest domyślnie wyłączone). systemd-resolvedbędzie również buforować wpisy. Jeśli żaden z nich nie jest skonfigurowany, hosty Linux nie buforują odpowiedzi DNS . (Przeglądarki prawdopodobnie robią to w warstwie aplikacji)
Gert van den Berg