Dlaczego plik / etc / hosts nie działa?

29

Przez jakiś czas miałem z tym problemy i próbowałem wszystkiego, co wiem, więc pomyślałem, że w końcu nadszedł czas, aby poprosić o pomoc.

Wszelkie zmiany, które wprowadzam, po /etc/hostsprostu nie działają.

Przykład:

julian@ifrit:~$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   ifrit
192.168.1.100   dev.julianfernand.es

W powyższym przykładzie, kiedy uzyskuję dostęp dev.julianfernand.es(to nie istnieje), powinno się ładować z 192.168.1.100.

Jeśli pinguję, działa dobrze. Jednak gdy uzyskuję dostęp dev.julianfernand.esza pomocą Google Chrome lub Firefox, nie ma.

Teraz, po ponownym uruchomieniu kilka razy, działa. Ponieważ jednak pracuję w zarządzanej firmie hostingowej WordPress, mam do czynienia z wieloma sytuacjami, w których muszę edytować plik, aby wyświetlić witrynę internetową klienta na naszym serwerze.

Po prostu nie mogę ponownie uruchomić komputera. To wcale nie jest produktywne. Ponowne uruchomienie usługi sieciowej nie działa, podobnie jak w przypadku czyszczenia pamięci podręcznej (nawet wewnętrznej pamięci podręcznej Chrome DNS).

Czy ktoś tu ma pomysł? Dzieje się tak w przypadku elementaryOS (oparty na Ubuntu 12.04) i Ubuntu 13.10 (codziennie). Nie próbowałem jeszcze z żadną inną wersją.

PS: jeśli to ważne, mam serwer NGINX działający na tym komputerze z PHP-FPM i MySQL.

Z góry dziękuję :)

Julian Fernandes
źródło
Trudno poznać problem. Czy podczas uzyskiwania dostępu do witryny za pośrednictwem nazwy hosta (dev.julianfernand.es) nie można uzyskać dostępu do witryny za pośrednictwem adresu IP (192.168.1.100)?
Panther
@ bodhi.zazen Tak, mogę. Ponieważ jednak nasza firma nie korzysta z domyślnego pomysłu „dostęp IP w celu uzyskania dostępu do strony internetowej” ze współdzielonych hostów, to nie działa.
Julian Fernandes,
Nie sugerowałem, abyś uzyskiwał dostęp do stron internetowych przez ip jako rozwiązanie długoterminowe. Informacje te pomagają w debugowaniu, ponieważ wykluczają inne problemy, od zapory ogniowej po routing do problemów po stronie serwera.
Panther
Co powiesz, jeśli wpiszesz adres IP w pasku adresu przeglądarki?
Sergiy Kolodyazhnyy

Odpowiedzi:

14

W Ubuntu, jeśli chcesz opróżnić pamięć podręczną DNS, musisz zrestartować nscddemona.

Zainstaluj nscdza pomocą następującego polecenia:

sudo apt-get install nscd

Opróżnij pamięć podręczną DNS w systemie Ubuntu za pomocą następującego polecenia:

sudo service nscd restart

LUB

sudo service dns-clean start

Odniesienie: http://www.upubuntu.com/2012/05/how-to-flush-clear-dns-cache-under.html

Arnold
źródło
Sprawdź także swoją konfigurację i plik dziennika błędów Nginx. Gdy wchodzisz na stronę, musi tam być jakiś ślad.
Arnold
7

Dla mnie działało: dodaj

addn-hosts=/etc/hosts

w

/etc/NetworkManager/dnsmasq.d/hosts.conf

zabij dnsmasq i

service NetworkManager restart
Ruediger
źródło
6

Dla mnie rozwiązaniem była edycja /etc/nsswitch.confpliku (możesz użyć polecenia sudo vim /etc/nsswitch.conf). Zmieniłem linię:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

do:

hosts:          dns files mdns4_minimal [NOTFOUND=return]

a teraz działa zgodnie z oczekiwaniami!

jmarceli
źródło
1
Prawdopodobnie chcesz filesjako pierwszy wpis, jeśli chcesz /etc/hostsmieć pierwszeństwo przed wynikami z serwerów DNS.
mur
To dziwne, ale to nie pomyłka. Muszę mieć dokładnie taki porządek, żeby zadziałało.
jmarceli
4

Przyjęta odpowiedź działa w wersjach od 12.04 do 13.04 przez wyłączenie dnsmasq, ale przestała działać dla mnie w 13.10. Znalazłem następujące nowe rozwiązanie dla 13.10.

Edytuj / etc / default / dnsmasq i zmień ENABLED=1na ENABLED=0i uruchom ponownie.

Mark E. Haase
źródło
2
Nie mam żadnego pliku dnsmasq w określonej ścieżce. Jestem na Linuksie 15.04
Hiren
Nie ma już akceptowanej odpowiedzi. O jakiej odpowiedzi mówisz?
toon81
3

Od: http://blog.calebthorne.com/2012/08/broken-etchosts-in-ubuntu-1204.html

Nową „funkcją” w wersji Ubuntu 12.04 na komputery stacjonarne jest użycie dnsmasqjako wtyczki do NetworkManager dla lokalnego DNS. Dnsmasq ma na celu przyspieszenie usług DNS i DHCP, ale ma jeden niefortunny efekt uboczny: dnsmasqbuforuje lokalny DNS i ignoruje zmiany /etc/hosts. Często robię zmiany w pliku hosts podczas pracy na stronach internetowych, więc ta „funkcja” była dość denerwująca.

Rozwiązaniem jest wyłączenie dnsmasqw pliku konfiguracyjnym Networkmanager. Otwórz /etc/NetworkManager/NetworkManager.confi skomentuj wiersz:

dns=dnsmasq

Mój NetworkManager.confplik zawiera następujące elementy:

[main]
plugins=ifupdown,keyfile
# dns=dnsmasq

[ifupdown]
managed=false

Zobacz także https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/993298

Pantera
źródło
1
Próbowałem tego na 13.10 i elementaryOS, wciąż nic. Ale dzięki za pomoc! :)
Julian Fernandes,
@JulianFernandes Wygląda na to, że to nie działa 13.10. Postępowałem zgodnie z tą radą i zadziałało to 12.04, ale po aktualizacji do 13.10 dnsmasq powrócił i nie mogę się go pozbyć.
Mark E. Haase
1

Prosty i zaktualizowany

  1. Utwórz /etc/NetworkManager/dnsmasq.d/hosts.conf.
  2. Umieść linie jak address=/whatever/1.2.3.4w tym. Zobacz dokumenty (poszukaj --address). Symbole wieloznaczne są możliwe: address/.whatever./1.2.3.4.
  3. Kill dnsmasq( błąd ).
  4. Ponownie uruchom go: $ service network-manager restart.
Mightyiam
źródło
0

Wygląda na to, że Twoja konfiguracja jest podobna do mojej. Mam komputer z systemem Ubuntu jako moim serwerem biurowym i hostem programistycznym. Na tym urządzeniu uruchamiam aplikacje Nginx, Apache, Tomcat, Rails i wszystko, czego potrzebuję.

Na komputerze Mac mogę po prostu dodać wpis hosta i załadować serwer dowolną nazwą, której potrzebuję, ale z klienta ElementaryOS to nie działa.

Próbowałem powyższych poprawek, ale bez powodzenia.

To, co zrobiłem, to uruchomić Squid Proxy Server i dodać nazwy hostów do / etc / hosts na serwerze. (Edycja wymaga ponownego uruchomienia kałamarnicy).

Następnie wprowadź odpowiednie ustawienia proxy w przeglądarce lub panelu sterowania systemu operacyjnego.

Jim O'Connell
źródło
0

Sprawdź uprawnienia do /etc/hostspliku.

W mojej usłudze w chmurze po sklonowaniu serwera uprawnienia do pliku hosts zmieniły się z 644na, 600więc plik nie może być odczytany przez apache ( www-data). Pobiegłem sudo chmod 644 hostsz /etci naprawić go.

Problem zaczął się jako:

MongoConnectionException Failed to connect to: localhost:27017: Previous connection attempts failed, server blacklisted. 

Śledziłem ją do zmiennej serwera w MongoClient, wskazując na localhost. Nie mogłem pingować localhost lub nazwy hosta.

użytkownik228414
źródło
Czasami miałem sukces w zmianie „localhost” na „127.0.0.1” w tego rodzaju przypadkach
pbr
0

Edytuj /etc/nsswitch.conf, skomentuj poniżej linii, dodając # przed linią

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

i dodaj

hosts:          files mdns4_minimal [NOTFOUND=return] dns

Zasadniczo konfiguracja jest zmieniana. Teraz proces wyszukiwania domeny najpierw sprawdzi plik, który będzie, /etc/hostsa następnie skonsultuje się z DNS. Przy domyślnej konfiguracji najpierw sprawdza DNS przed innymi odpowiednimi usługami lub plikami.

Do szybkiego sprawdzenia, czy działa, czy nie

sudo python -m SimpleHTTPServer 80

aby utworzyć prosty serwer HTTP do obsługi plików z katalogu, a następnie komentować poniżej wiersza w /etc/hostspliku

127.0.0.1      localhost
127.0.1.1      01hw730983

i dodaj

127.0.0.1       content

następnie przejdź do przeglądarki i wpisz content/, jeśli widzisz strukturę katalogu, która działa, w przeciwnym razie nie.

nerw
źródło