ping
mó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 host
lub nslookup
na 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 wget
i ping
ten sam problem. Pingowanie adresu IP działa.
System operacyjny: Linux (Ubuntu 13.04)
EDYCJA Moje /etc/resolv.conf
czyta:
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 ( nslookup
informuje również, że używa go 127.0.1.1
jako serwera DNS).
Nie ma /etc/*inetd.conf
, więc nie jestem pewien, która aplikacja obsługuje ten port.
Wydaje się, że dnsmasq
jest 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ż nslookup
mówi, że używa, 127.0.1.1#53
domyślam się, że dnsmasq
działa nawet bez konfiguracji. Ale skąd ma wiedzieć, którego nadrzędnego DNS zapytać?
EDIT2 Wyłączenie dnsmasq
sugerowane przez harrymc nie pomogło. Uruchomiłem więc, strace ping
co 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
ping
Wygląda więc w /etc/hosts
sensie. Następnie ładuje i mmap()
s /lib/libnss_mdns4_minimal.so.2
co 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.conf
zawiera również ten wiersz:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Jeśli mam ping
działający adres, widzę, że proces również się ładuje, /lib/libnss_mdns4_minimal.so.2
ale następnie wykonuje zapytanie DNS przez port 53.
Domyślam się więc, że w /lib/libnss_mdns4_minimal.so.2
jakiś sposób zauważam, że adres IP kończy się na, .local
a nie na, .com
a następnie [NOTFOUND=return]
następuje wyzwolenie.
Jak to naprawić?
/etc/resolv.conf
?wget
.nslookup
lub w jaki sposóbhost
mogę rozwiązać nazwę i cokolwiek innego w systemie, nie może./etc/NetworkManager/NetworkManager.conf
i komentujdns=dnsmasq
linię (wstaw # przed nią), a następnie zróbsudo restart network-manager
. To wyłączy lokalny resolver. ( źródło )Odpowiedzi:
Jak opisano szczegółowo w tym blogu , musisz zmienić
/etc/avahi/avahi-daemon.conf
:To wiąże się z demonem do domeny
.alocal
zamiast domyślnego.local
.i zrestartuj demona za pomocą:
Uwaga z postu na blogu:
Po tym,
ping
inslookup
zaczął się zgodzić.Dzięki harrymc za doprowadzenie mnie na właściwy tor.
źródło
ping
użyje nss,nslookup
nie. (używa lwres i, no cóż, binda, aby rozmawiać bezpośrednio z resolwerem)Modyfikowanie /etc/nsswitch.conf i zastępowanie:
przez:
pracował dla mnie.
źródło
Łatwa rzecz do zrobienia: edycja
/etc/default/avahi-daemon
Zmień linię:
do
Uruchom ponownie
avahi-daemon
lub 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:źródło
wygląda na to, że adres lokalny nie może być dostępny w Ubuntu.
rozwiązaniem jest edycja
/etc/nsswitch.conf
i zmiana tej linii:przez to :
źródło
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.conf
i komentuj linię (umieść # przed nią):Następnie wykonaj:
To wyłączy lokalny resolver.
Źródło: DNS w Ubuntu 12.04 .
źródło
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_minimal
zwróciNOTFOUND
, 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.local
nazwy są w mDNS.źródło
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.conf
edytowanie pliku działało dobrze).W każdym razie strace pokazywał:
W rezultacie próbowano wysłać zapytanie do localhost (127.0.0.1) zamiast adresu IP serwera nazw z pliku resolv.conf:
I tcpdump nie wyświetlał żadnego ruchu DNS podczas pingowania. Wszystko działa po poprawce pozwolenia:
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.
źródło
x
flagę, a zatem wiele plików binarnych nie działało poprawnie. Naprawionochmod +x /*
.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.źródło
Skonfiguruj avahi-daemon na Ubuntu, aby uzyskać dostęp do nazwy hosta
ubuntu.local
z systemu operacyjnego hostasudo apt-get install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan
źródło