avahi: ping nie może rozpoznać nazwy hosta, ale nslookup może

41

pingmówi mi, że nie może rozwiązać niektórych nazw hostów („ping: nieznany host domain.company.local”) w adresie URL, ale kiedy używam hostlub nslookupna tym samym komputerze w wierszu poleceń, rozdzielczości działają dobrze (tzn. są szybkie i niezawodne ).

Co może być tego przyczyną?

Więcej testów: Firefox wgeti pingten sam problem. Pingowanie adresu IP działa.

System operacyjny: Linux (Ubuntu 13.04)

EDYCJA Moje /etc/resolv.confczyta:

nameserver 127.0.1.1
search domain.company.local

netstat raporty:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               

więc coś działa na tym porcie ( nslookupinformuje również, że używa go 127.0.1.1jako serwera DNS).

Nie ma /etc/*inetd.conf, więc nie jestem pewien, która aplikacja obsługuje ten port.

Wydaje się, że dnsmasqjest używany:

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces
   --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1
   --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec
   --enable-dbus=org.freedesktop.NetworkManager.dnsmasq
   --conf-dir=/etc/NetworkManager/dnsmasq.d

Wszystkie pliki konfiguracyjne i foldery są puste. Ponieważ nslookupmówi, że używa, 127.0.1.1#53domyślam się, że dnsmasqdziała nawet bez konfiguracji. Ale skąd ma wiedzieć, którego nadrzędnego DNS zapytać?

EDIT2 Wyłączenie dnsmasqsugerowane przez harrymc nie pomogło. Uruchomiłem więc, strace pingco dało mi ten dziwny wynik (tylko interesujące części):

open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613
...
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832
...
mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000
...
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44
read(4, "-15 Timeout reached\n", 4096)  = 20

pingWygląda więc w /etc/hostssensie. Następnie ładuje i mmap()s /lib/libnss_mdns4_minimal.so.2co ma sens, jak również.

Ale potem rozmawia z avahi !?

Co doprowadziło mnie do tego postu na forum: ping nie wysyła żądania dns .

Mój /etc/nsswitch.confzawiera również ten wiersz:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Jeśli mam pingdziałający adres, widzę, że proces również się ładuje, /lib/libnss_mdns4_minimal.so.2ale następnie wykonuje zapytanie DNS przez port 53.

Domyślam się więc, że w /lib/libnss_mdns4_minimal.so.2jakiś sposób zauważam, że adres IP kończy się na, .locala nie na, .coma następnie [NOTFOUND=return]następuje wyzwolenie.

Jak to naprawić?

Aaron Digulla
źródło
Co znajduje się w twojej /etc/resolv.conf?
Joseph R.
Które jest poprawne, a które niepoprawne? Czy nazwa hosta powinna zostać rozwiązana, czy nie? Nie powiedziałeś nam, który z dwóch zupełnie różnych problemów masz. (A jeśli to powinno rozwiązać, wyjaśnić tak szczegółowo, jak to możliwe , jak i dlaczego należy go rozwiązać, jako że będzie prawdopodobnie prowadzić do wyjaśnienia, dlaczego tak nie jest.)
David Schwartz
... i jakie są twoje ustawienia proxy HTTP dla Chrome, Firefox i wget.
JdeBP
@DavidSchwartz: Spodziewam się, że rozdzielczość zadziała. Czego nie rozumiem, w jaki sposób nslookuplub w jaki sposób hostmogę rozwiązać nazwę i cokolwiek innego w systemie, nie może.
Aaron Digulla
1
Jeśli nie udostępniasz połączenia innym urządzeniom lub maszynom wirtualnym przez komputer, możesz wyłączyć dnsmasq w Network Managerze. Edytuj /etc/NetworkManager/NetworkManager.confi komentuj dns=dnsmasqlinię (wstaw # przed nią), a następnie zrób sudo restart network-manager. To wyłączy lokalny resolver. ( źródło )
harrymc

Odpowiedzi:

33

Jak opisano szczegółowo w tym blogu , musisz zmienić /etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

To wiąże się z demonem do domeny .alocalzamiast domyślnego .local.

i zrestartuj demona za pomocą:

sudo service avahi-daemon restart

Uwaga z postu na blogu:

Może być konieczne opróżnienie pamięci podręcznej DNS, mDNS i resolvera, a także ponowne uruchomienie przeglądarek internetowych w celu wyczyszczenia wewnętrznej pamięci podręcznej.

Po tym, pingi nslookupzaczął się zgodzić.

Dzięki harrymc za doprowadzenie mnie na właściwy tor.

Aaron Digulla
źródło
1
Zauważ też, pingużyje nss, nslookupnie. (używa lwres i, no cóż, binda, aby rozmawiać bezpośrednio z resolwerem)
Ricky Beam
Dla mnie bardziej sensowne jest skonfigurowanie go poprawnie niż wyłączenie go dla lokalnego.
keiki
@ otakun85: A jak miałbym to zrobić?
Aaron Digulla
@AaronDigulla Skonfigurowałeś go, a bieżąca najwyższa głosowana odpowiedź wyłączyła go dla lokalnego.
keiki
2
To jest niesamowite. Dzięki wielkie. Walczyłem z tym przez wiele godzin, zanim znalazłem ten post.
fpghost
11

Modyfikowanie /etc/nsswitch.conf i zastępowanie:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

przez:

hosts:          files dns

pracował dla mnie.

doep
źródło
2
Działa to kosztem usług AVAHI
Aaron Digulla,
8

Łatwa rzecz do zrobienia: edycja /etc/default/avahi-daemon

Zmień linię:

AVAHI_DAEMON_DETECT_LOCAL=1

do

AVAHI_DAEMON_DETECT_LOCAL=0

Uruchom ponownie avahi-daemonlub zabij.

Nie lubię Avahi i nie korzystam z żadnej z jego funkcji. Jeśli chcesz naprawdę wyłączyć avahi, zmodyfikuj /etc/init/avahi-daemon.conf, podobnie jak poniżej:

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus
MikeDawg
źródło
2
Nie obchodzi mnie, czy nie powinieneś umieszczać tutaj komentarzy „dziękuję”, chciałem tylko wyrazić swoje podziękowanie i ile czasu i energii mnie uratowałeś. Dziękuję bardzo! Korzystam z firmowej sieci VPN, aby wykonać pracę awaryjną w centrum handlowym i nie mogłem uruchomić niektórych naszych witryn pomimo wszystkiego, co chciałem spróbować. Nie byłbym w stanie samodzielnie tego zrozumieć, to na pewno ...
eresonance,
7

wygląda na to, że adres lokalny nie może być dostępny w Ubuntu.

rozwiązaniem jest edycja /etc/nsswitch.confi zmiana tej linii:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

przez to :

hosts:          files dns
Dragouf
źródło
Ten rodzaj zadziałał dla mnie. W moim przypadku w linii hostów „pliki rozwiązały [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns” i zmieniono je na „pliki mdns4_minimal [NOTFOUND = return] dns” działały. Dzięki za wskaźnik we właściwym kierunku.
Andorbal,
Próbowałem inne odpowiedzi powyżej, wyłączone avahi (co jest ulgą) i nadal miałem problem. Ta odpowiedź rozwiązała dla mnie. Dzięki
Adam Plocher
3

Jeśli nie udostępniasz połączenia innym urządzeniom lub maszynom wirtualnym przez komputer, możesz wyłączyć dnsmasq w Network Managerze.

Edytuj /etc/NetworkManager/NetworkManager.confi komentuj linię (umieść # przed nią):

dns=dnsmasq

Następnie wykonaj:

sudo restart network-manager

To wyłączy lokalny resolver.

Źródło: DNS w Ubuntu 12.04 .

harrymc
źródło
2

Domyślam się teraz, że /lib/libnss_mdns4_minimal.so.2 w jakiś sposób zauważa, że ​​adres IP kończy się na .local, a nie na .com, a następnie uruchamiane jest [NOTFOUND = return].

Jak to naprawić?

Zgaduję, ale inne odpowiedzi są przesadzone. Najprostszym rozwiązaniem jest usunięcie faktycznie uruchomionego bitu, czyli usunięcie właśnie [NOTFOUND=return] .

Usunięcie oznacza, że ​​jeśli mdns4_minimalzwróci NOTFOUND, zostanie użyty następny wpis na liście resolvera. To jest normalne zachowanie; [NOTFOUND=return]jest optymalizacją do szybszego niepowodzenia w przypadku nieznanych nazw, ale zakłada, że ​​wszystkie .localnazwy są w mDNS.

MSalters
źródło
1

Miałem ciekawy przypadek z tymi samymi objawami (ping, mount itp. Nie działa, ale host, kopanie działa). Sprawdź uprawnienia do pliku /etc/resolv.conf . W moim przypadku ktoś go zmienił i nie miałem prawa go odczytać (chociaż cat /etc/resolv.confedytowanie pliku działało dobrze).

W każdym razie strace pokazywał:

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

W rezultacie próbowano wysłać zapytanie do localhost (127.0.0.1) zamiast adresu IP serwera nazw z pliku resolv.conf:

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

I tcpdump nie wyświetlał żadnego ruchu DNS podczas pingowania. Wszystko działa po poprawce pozwolenia:

# chmod 644 /etc/resolv.conf
# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 111 Oct  3 09:54 /etc/resolv.conf

Innym problemem mogą być rozszerzone atrybuty pliku lub inny problem z dostępem. W takim przypadku wystarczy usunąć plik /etc/resolv.conf i odtworzyć go od zera.

Pik Master
źródło
Innym problemem, jaki miałem jeden serwer, było to, że wszystkie foldery główne straciły xflagę, a zatem wiele plików binarnych nie działało poprawnie. Naprawiono chmod +x /*.
Silex,
0

Innym powodem jest format /etc/hosts. Upewnij się, że między adresem IP a nazwą hosta nie ma spacji, zamiast tego użyj 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.
Thomas Lauria
źródło
może to być odpowiedź, ale jest sformatowana jako komentarz ...
Francisco Tapia,
-1

Skonfiguruj avahi-daemon na Ubuntu, aby uzyskać dostęp do nazwy hosta ubuntu.localz systemu operacyjnego hosta

sudo apt-get install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan

João Pedro Rodrigues
źródło
Przepraszamy, ta odpowiedź nie jest związana z pytaniem. Nie pytamy, jak zainstalować Avahi. Pytanie brzmi, jak Avahi może przerwać wyszukiwanie DNS po jego zainstalowaniu.
Aaron Digulla