avahi: ping ana bilgisayar adını çözemiyor, ancak nslookup yapabilir


41

pingbazı ana makine adını ( "ping: bilinmiyor konak domain.company.local") çözemezse söylüyor bir URL ama kullandığınızda hostveya nslookupkomut satırında aynı bilgisayarda, çözünürlükleri çalışıyor (yani hızlı ve güvenilir ).

Buna ne sebep olabilir?

Daha fazla test: Firefox wgetve pingaynı sorunu var. IP adresine ping işlemi çalışır.

İşletim Sistemi: Linux (Ubuntu 13.04)

DÜZENLEME Benim /etc/resolv.confokur:

nameserver 127.0.1.1
search domain.company.local

netstat raporlar:

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      -               

bu yüzden bu portta bir şeyler çalışıyor ( DNS sunucusu olarak nslookupkullandığını da bildirir 127.0.1.1).

Hayır /etc/*inetd.conf, bu yüzden hangi uygulamanın bu bağlantı noktasına hizmet ettiğinden emin değilim.

Görünüşe göre dnsmasqkullanılmış:

/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

Tüm yapılandırma dosyaları ve klasörleri boş. Tahmin ettiğimden beri nslookup, 127.0.1.1#53benim dnsmasqyapılandırmam bile işe yaramaz. Ancak hangi ana DNS'nin sorgulanacağını nasıl biliyor?

EDIT2 Harrymcdnsmasq tarafından önerildiği gibi devre dışı bırakmanın yardımı olmadı. Bu yüzden koştum strace pingbana bu garip çıktı (sadece ilginç kısımlar):

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

Yani pingbakar /etc/hostshangi mantıklı. Sonra yükler ve mmap()s /lib/libnss_mdns4_minimal.so.2sıra mantıklı.

Ama sonra avahi ile konuşuyor!

Beni bu forum gönderisine yönlendirdi: ping dns isteğinde bulunmadı .

Benim /etc/nsswitch.confde bu satırı içeriyor:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Eğer pingçalışan bir adressem, işlemin de yüklendiğini görüyorum /lib/libnss_mdns4_minimal.so.2ancak daha sonra 53 numaralı port üzerinden DNS sorgulaması yapıyor.

Benim tahminim şimdi böylece /lib/libnss_mdns4_minimal.so.2her nasılsa IP adresi uçları ile bu fark edilir .localve birlikte .comve daha sonra [NOTFOUND=return]tetiklenir.

Bunu nasıl düzeltebilirim?


Gözlerinde farklı nedir /etc/resolv.conf?
Joseph R.

Hangisi doğru, hangisi yanlış? Ana bilgisayar adı çözülmeli mi yoksa çözülmemeli mi? Bize birbirinden tamamen farklı iki problemin olduğunu söylemedin. (Bu eğer gerektiğini çözmek, mümkün olduğu kadar ayrıntılı olarak açıklamak nasıl ve niçin muhtemelen öyle değil neden açıklama yol açacaktır olarak, bu çözmelidir.)
David Schwartz'a

... ve HTTP proxy ayarlarınızın Chrome, Firefox ve wget.
JdeBP

@DavidSchwartz: Çözünürlük çalışmayı bekliyorum. Ne anlamadığımı nslookupya hostda isminin nasıl çözülebileceğini ya da çözebileceğini ve sistemdeki herhangi bir şeyi çözemez.
Aaron Digulla,

1
Bilgisayarınızdaki diğer cihazlarla veya VM'lerle bağlantı paylaşımı yapmıyorsanız, dnsmasq'ı Ağ Yöneticisi'nden kapatabilirsiniz. Düzenleme /etc/NetworkManager/NetworkManager.confyorum ve dns=dnsmasqçizgi (önünde # koyun) sonra yapmak sudo restart network-manager. Bu yerel çözümleyiciyi kapatır. ( kaynak )
harrymc 24

Yanıtlar:


33

Bu blog gönderisinde ayrıntılı olarak açıklandığı gibi , aşağıdakileri düzenlemeniz gerekir /etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

Bu daemon'u .alocalvarsayılan yerine etki alanına bağlar .local.

ve arka plandaki programı yeniden başlatın:

sudo service avahi-daemon restart

Blog gönderisinden not:

DNS, mDNS ve çözümleyici önbelleğini temizlemeniz gerekebilir, ayrıca kendi önbelleklerini temizlemek için web tarayıcılarınızı yeniden başlatmanız gerekebilir.

Bundan sonra, pingve nslookupanlaşmak başladı.

Teşekkür etmek harrymc doğru yolda beni almak için.


1
Ayrıca, pingnss kullanacağını not edin nslookup. (doğrudan çözücüyle konuşmak için lwres kullanır ve derinden bağlanır)
Ricky Beam

Benim için yerel olarak devre dışı bırakmak yerine doğru şekilde yapılandırmak daha mantıklı.
keiki

@ otakun85: Bunu nasıl yaparım?
Aaron Digulla

@AaronDigulla Siz yapılandırdınız ve mevcut en yüksek oyu alan cevap yerel dilde etkisizleştirildi.
keiki

2
Bu harika. Çok teşekkürler. Bu yazıyı bulmadan önce saatlerce bununla savaş.
fpghost

11

/Etc/nsswitch.conf dosyasını değiştirmek ve değiştirmek:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

tarafından:

hosts:          files dns

benim için çalıştı.



8

Yapılacak kolay şeyler: Düzenle /etc/default/avahi-daemon

Satırı değiştir:

AVAHI_DAEMON_DETECT_LOCAL=1

için

AVAHI_DAEMON_DETECT_LOCAL=0

Yeniden başlat avahi-daemonveya öldür.

Avahi'den hoşlanmıyorum ve hiçbir özelliğini kullanmıyorum. Avahi'yi gerçekten devre dışı bırakmak istiyorsanız /etc/init/avahi-daemon.conf, aşağıdakine benzer şekilde değiştirin :

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus

2
Buraya "teşekkür" yorumları koymanız gerekmiyorsa umrumda değil, sadece teşekkürlerimi ve beni ne kadar zaman ve enerjiden kurtardığınızı ifade etmek istedim. Çok teşekkür ederim! Bir alışveriş merkezinden acil işler yapmak için bir şirket VPN kullanıyorum ve denemeyi düşündüğüm her şeye rağmen sitelerimizden bazılarını çalıştıramadım. Bunu kendi
başıma çözemezdim

7

Öyle görünüyor ki....

bir çözüm /etc/nsswitch.confbu satırı düzenlemek ve değiştirmek:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

bundan :

hosts:          files dns

Bu benim için çalıştı. Benim durumumda, ana bilgisayar dizisi "dosya çözünürlüğü [! İşaretçi için doğru yöne teşekkür ederiz.
Andorbal

Yukarıdaki diğer cevapları denedim, engelli avahi (bir rahatlama) ve hala sorun vardı. Bu cevap benim için çözdü. Teşekkürler
Adam Plocher

3

Bilgisayarınızdaki diğer cihazlarla veya VM'lerle bağlantı paylaşımı yapmıyorsanız, dnsmasq'ı Ağ Yöneticisi'nden kapatabilirsiniz.

Düzen /etc/NetworkManager/NetworkManager.confve yorum hattı (önünde # koyun):

dns=dnsmasq

O zaman yapın:

sudo restart network-manager

Bu yerel çözümleyiciyi kapatır.

Kaynak: 12.04'te Ubuntu'da DNS .


2

Yani benim tahminim şudur ki /lib/libnss_mdns4_minimal.so.2 bir şekilde IP adresinin .local ile bittiğini ve .com ile bitmediğini ve ardından [NOTFOUND = return] tetiklendiğini fark ediyor.

Bunu nasıl düzeltebilirim?

Oldukça iyi bir tahmin, ancak diğer cevaplar geçersiz. Basit çözüm, gerçekte tetiklenen ucu çıkarmak, yani sadece kaldırmaktır [NOTFOUND=return].

Çıkarılması , mdns4_minimaldöndürürse NOTFOUND, çözümleyici listesindeki bir sonraki girişin kullanıldığı anlamına gelir . Bu normal davranış; [NOTFOUND=return]bilinmeyen adlarda daha hızlı başarısızlığa uğramak için bir optimizasyondur, ancak tüm .localadların mDNS içinde olduğunu varsayar .


1

Aynı semptomları gösteren ilginç bir durum vardı (ping, mount vs. çalışmıyor, fakat ev sahibi, kazıyor). /Etc/resolv.conf dosyasındaki izinleri kontrol edin . Benim durumumda, birisi onu değiştirdi ve okuma hakkına sahip değildim (rağmen cat /etc/resolv.confve dosyayı düzenleme iyi çalıştı).

Neyse, strace gösteriyordu:

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

Sonuç olarak, resolv.conf dosyasındaki nameserver IP'si yerine localhost (127.0.0.1) sorgulamaya çalışıyordu:

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}])

Ve tcpdump , ping yaparken hiçbir DNS trafiği göstermiyordu. Hepsi bir izin düzeltmesinden sonra çalışıyor:

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

Başka bir sorun, dosyanın öznitelikleri veya başka herhangi bir erişim problemi olabilir. Bu durumda /etc/resolv.conf dosyasını silin ve sıfırdan yeniden oluşturun.


Bir sunucuya sahip olduğum bir başka sorun da tüm kök klasörlerin xbayraklarını kaybetmesiydi ve bu nedenle birçok ikili dosya düzgün davranmıyordu. Düzeltme yapıldı chmod +x /*.
Silex

0

Diğer bir sebep ise formatıdır /etc/hosts. IP ve ana bilgisayar adı arasında boşluk olmadığından emin olun, bunun yerine bir SEKME kullanın. SEKME değiştirdikten sonra, ana bilgisayar adı ping ile çözülebilir.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

bir cevap olabilir ama yorum olarak biçimlendirilmiş ...
Francisco Tapia

-1

Ubuntu'da avahi-daemon'u kurun, böylece ana ubuntu.localbilgisayar işletim sisteminden ana bilgisayar adına erişebilirsiniz

sudo apt-get yüklemek yüklemek avahi-daemon avahi-keşfetmek avahi-utils libnss-mdns mdns-scan


Üzgünüz, bu cevap soru ile ilgili değil. Avahi'nin nasıl kurulacağını sormuyoruz. Soru, Avahi'nin kurulduktan sonra DNS aramalarını nasıl kırabileceğidir.
Aaron Digulla
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.