avahi: पिंग hostname का समाधान नहीं कर सकता, लेकिन nslookup कर सकता है


41

pingमुझे बताता है कि यह URL में कुछ होस्टनाम ("पिंग: अज्ञात होस्ट domain.company.local") को हल नहीं कर सकता है, लेकिन जब मैं कमांड लाइन पर एक ही कंप्यूटर का उपयोग करता हूं hostया nslookupकरता हूं , तो संकल्प ठीक काम करता है (यानी यह तेज और विश्वसनीय है) )।

ऐसा किसके कारण हो सकता है?

अधिक परीक्षण: फ़ायरफ़ॉक्स, wgetऔर pingएक ही समस्या है। IP पते को पिंग करना काम करता है।

OS: लिनक्स (Ubuntu 13.04)

EDIT माई /etc/resolv.confरीड्स:

nameserver 127.0.1.1
search domain.company.local

netstat रिपोर्ट:

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      -               

इसलिए इस पोर्ट पर कुछ चल रहा है ( nslookupयह भी रिपोर्ट करता है 127.0.1.1कि इसे DNS सर्वर के रूप में उपयोग किया जाता है)।

कोई नहीं है /etc/*inetd.conf, इसलिए मुझे यकीन नहीं है कि कौन सा एप्लिकेशन इस पोर्ट की सेवा करता है।

ऐसा लगता है कि dnsmasqइसका उपयोग किया जाता है:

/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

सभी कॉन्फिग फाइल और फोल्डर खाली हैं। चूंकि nslookupयह कहता है कि यह 127.0.1.1#53मेरे अनुमान का उपयोग करता है, इसलिए यह dnsmasqबिना विन्यास के भी काम करता है। लेकिन यह कैसे पता है कि किस मूल DNS को क्वेरी करना है?

EDIT2,dnsmasq जैसा कि harrymc द्वारा सुझाया गया है, अक्षम करने से मदद नहीं मिली। तो मैं भाग गया strace pingजिसने मुझे यह अजीब आउटपुट दिया (सिर्फ दिलचस्प हिस्से):

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ऐसा लग रहा है /etc/hostsजिसमें समझ में आता है। फिर यह लोड करता है और mmap()एस /lib/libnss_mdns4_minimal.so.2जो समझ में आता है।

लेकिन फिर यह अवही से बात करता है !?

जो मुझे इस मंच पोस्ट की ओर ले गया: पिंग एक डीएनएस अनुरोध नहीं करता है

मेरी /etc/nsswitch.confभी यह पंक्ति है:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

यदि मैं pingएक कामकाजी पता है, तो मैं देखता हूं कि प्रक्रिया भी लोड होती है, /lib/libnss_mdns4_minimal.so.2लेकिन फिर, यह पोर्ट 53 के माध्यम से एक DNS क्वेरी करता है।

इसलिए मेरा अनुमान अब यह /lib/libnss_mdns4_minimal.so.2है कि किसी भी तरह से यह सूचित किया जाता है कि आईपी पता के साथ समाप्त होता है .localऔर नहीं .comऔर फिर [NOTFOUND=return]ट्रिगर होता है।

मैं यह कैसे तय करुं?


तुम्हारे में क्या है /etc/resolv.conf?
जोसेफ आर।

कौन सा सही है और कौन सा गलत? चाहिए होस्टनाम का समाधान या ऐसा नहीं होना चाहिए? आपने हमें यह नहीं बताया कि आपको दो अलग-अलग समस्याएं हैं। (और अगर इसे हल करना चाहिए , तो जितना संभव हो उतना विस्तार से बताएं कि यह कैसे और क्यों हल करना चाहिए, क्योंकि इससे स्पष्टीकरण की संभावना बढ़ जाएगी कि यह क्यों नहीं होता है।)
डेविड श्वार्ट्ज

... और क्रोम, फ़ायरफ़ॉक्स, और के लिए आपकी HTTP प्रॉक्सी सेटिंग्स क्या हैं wget
JdeBP

@DavidSchwartz: मुझे काम करने के संकल्प की उम्मीद है। मुझे समझ में नहीं आ रहा है कि सिस्टम पर नाम और कुछ और कैसे हल किया जा सकता है nslookupया hostनहीं।
आरोन दिगुल्ला

1
यदि आप अपने कंप्यूटर के माध्यम से अन्य उपकरणों या VMs के साथ कनेक्शन साझा नहीं कर रहे हैं, तो आप नेटवर्क प्रबंधक में dnsmasq को बंद कर सकते हैं। लाइन को संपादित करें /etc/NetworkManager/NetworkManager.confऔर टिप्पणी करें dns=dnsmasq(इसके सामने एक # डालें) फिर a sudo restart network-manager। यह स्थानीय रिज़ॉल्वर को बंद कर देगा। ( स्रोत )
harrymc

जवाबों:


33

जैसा कि इस ब्लॉग पोस्ट में विस्तार से बताया गया है , आपको संपादित करने की आवश्यकता है /etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

यह डिमॉन .alocalको डिफ़ॉल्ट के बजाय डोमेन में बांध देता है .local

और डेमॉन को पुनः आरंभ करें:

sudo service avahi-daemon restart

ब्लॉग पोस्ट से ध्यान दें:

आपको DNS, mDNS और रिज़ॉल्वर कैश को फ्लश करने की आवश्यकता हो सकती है, साथ ही अपने आंतरिक ब्राउज़रों को उनके आंतरिक कैश को साफ़ करने के लिए पुनः आरंभ कर सकते हैं।

उसके बाद, pingऔर nslookupसहमत होना शुरू कर दिया।

मुझे सही रास्ते पर लाने के लिए हार्दिक धन्यवाद ।


1
ध्यान दें, pingnss का उपयोग करेगा, nslookupनहीं करता है। (यह एक रिवाल्वर के साथ सीधे बात करने के लिए lwres और, अच्छी तरह से, बाँध का उपयोग करता है)
रिकी बीम

मेरे लिए यह स्थानीय के लिए अक्षम करने के बजाय इसे सही तरीके से कॉन्फ़िगर करने के लिए अधिक समझ में आता है।
कीकी

@ otakun85: और मैं ऐसा कैसे करूंगा?
एरॉन दिगुल्ला

@AaronDigulla आपने इसे कॉन्फ़िगर किया है और वर्तमान उच्चतम मतदान जवाब ने इसे स्थानीय के लिए अक्षम कर दिया है।
कीकी

2
ये अद्भुत है। बहुत बहुत धन्यवाद। इस पोस्ट को खोजने से पहले घंटों तक उससे जूझते रहे।
fpghost


8

आसान काम: संपादित करें /etc/default/avahi-daemon

लाइन बदलें:

AVAHI_DAEMON_DETECT_LOCAL=1

सेवा मेरे

AVAHI_DAEMON_DETECT_LOCAL=0

इसे पुनरारंभ करें avahi-daemon, या इसे मार दें।

मुझे अवही पसंद नहीं है, और मैं इसकी किसी भी विशेषता का उपयोग नहीं करता हूं। यदि आप वास्तव में अवही को निष्क्रिय करना चाहते हैं, /etc/init/avahi-daemon.confतो निम्न के समान संशोधित करें :

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

2
मुझे परवाह नहीं है अगर आप यहाँ "धन्यवाद" टिप्पणी करने वाले नहीं हैं, तो मैं सिर्फ अपना धन्यवाद व्यक्त करना चाहता था और आपने मुझे कितना समय और ऊर्जा बचाई। आपको बहुत - बहुत धन्यवाद! मैं एक मॉल से कुछ आपातकालीन काम करने के लिए एक कंपनी वीपीएन का उपयोग कर रहा हूं और जो कुछ भी मैंने कोशिश करने के बारे में सोचा उसके बावजूद हमारी कुछ साइटें काम नहीं कर सकीं। मैं अपने दम पर यह पता लगाने में सक्षम नहीं होगा, यह सुनिश्चित करने के लिए है ...
eresonance

7

ऐसा लगता है कि .local पते को ubuntu में एक्सेस नहीं किया जा सकता है।

/etc/nsswitch.confइस लाइन को संपादित करने और बदलने के लिए एक समाधान है :

hosts:          files mdns4_minimal [NOTFOUND=return] dns

इसके द्वारा :

hosts:          files dns

मेरे लिए इस तरह का काम किया। मेरे मामले में, मेजबानों की लाइन में "फाइलें हल [! UNAVAIL = वापसी] mdns4_minimal [NOTFOUND = वापसी] dns" थी और इसे बदलकर "फाइलें mdns4_minimal [NOTFOUND = वापसी = dns" में बदल दिया गया। सही दिशा में सूचक के लिए धन्यवाद।

ऊपर दिए गए अन्य जवाबों की कोशिश की, विकलांग अवही (जो एक राहत है) और अभी भी समस्या थी। इस जवाब ने इसे मेरे लिए हल कर दिया। धन्यवाद
एडम प्लॉकर

3

यदि आप अपने कंप्यूटर के माध्यम से अन्य उपकरणों या VMs के साथ कनेक्शन साझा नहीं कर रहे हैं, तो आप नेटवर्क प्रबंधक में dnsmasq को बंद कर सकते हैं।

/etc/NetworkManager/NetworkManager.confलाइन संपादित करें और टिप्पणी करें (इसके सामने एक # डालें):

dns=dnsmasq

फिर करो :

sudo restart network-manager

यह स्थानीय रिज़ॉल्वर को बंद कर देगा।

स्रोत: Ubuntu 12.04 में DNS


2

इसलिए अब मेरा अनुमान है कि /lib/libnss_mdns4_minimal.so.2 किसी भी तरह से यह देख रहा है कि IP पता .local के साथ समाप्त होता है। .com के साथ नहीं और फिर [NOTFOUND = return] को ट्रिगर किया जाता है।

मैं यह कैसे तय करुं?

बहुत अच्छा अनुमान है, लेकिन अन्य जवाब overkill हैं। सरल उपाय यह है कि वास्तव में ट्रिगर होने वाले बिट को हटा दें, अर्थात बस हटा दें [NOTFOUND=return]

इसे हटाने का मतलब है कि यदि mdns4_minimalरिटर्न NOTFOUND, रिज़ॉल्वर सूची पर अगली प्रविष्टि का उपयोग किया जाता है। यह सामान्य व्यवहार है; [NOTFOUND=return]अज्ञात नामों पर जल्दी विफल होने के लिए एक अनुकूलन है, लेकिन यह मानता है कि सभी .localनाम mDNS में हैं।


1

मेरे पास एक ही लक्षण के साथ एक दिलचस्प मामला था (पिंग, माउंट आदि काम नहीं कर रहा है, लेकिन मेजबान, खुदाई का काम)। /Etc/resolv.conf फ़ाइल पर अनुमतियों की जाँच करें । मेरे मामले में, किसी ने इसे बदल दिया और मेरे पास इसे पढ़ने के लिए अधिकार नहीं थे (हालांकि cat /etc/resolv.confफ़ाइल ठीक काम कर रही थी)।

वैसे भी, स्ट्रेस दिखा रहा था:

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

और इसके परिणामस्वरूप, यह resolv.conf फ़ाइल से नेमसर्वर के IP के बजाय लोकलहोस्ट (127.0.0.1) को क्वेरी करने की कोशिश कर रहा था:

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

और pcing करते समय tcpdump कोई DNS ट्रैफ़िक नहीं दिखा रहा था। अनुमति के बाद सभी काम कर रहे हैं:

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

एक अन्य समस्या फ़ाइल या किसी अन्य एक्सेस समस्या की विस्तारित विशेषताएँ हो सकती हैं। उस स्थिति में बस /etc/resolv.conf फ़ाइल हटाएं और इसे स्क्रैच से फिर से बनाएँ।


मेरे पास एक सर्वर था एक और समस्या यह थी कि सभी रूट फ़ोल्डरों ने अपना xध्वज खो दिया था , और इस प्रकार बहुत सारे बायनेरिज़ ने ठीक से व्यवहार नहीं किया। फिक्स था chmod +x /*
सिलेक्स

0

एक और कारण का प्रारूप है /etc/hosts। सुनिश्चित करें कि आईपी और होस्ट नाम के बीच कोई रिक्त स्थान नहीं है, इसके बजाय एक TAB का उपयोग करें। TAB में बदलने के बाद मेजबान नाम को पिंग द्वारा हल किया जा सकता था।

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

यह एक उत्तर हो सकता है लेकिन यह टिप्पणी के रूप में प्रारूपित है ...
फ्रांसिस्को तापिया

-1

उबंटू पर अवही-डेमॉन सेटअप करें ताकि आप ubuntu.localहोस्ट ओएस से होस्टनाम तक पहुंच सकें

sudo apt-get Install avahi-daemon avahi-डिस्कवर अवही-बर्तन libnss-mdns mdns-scan


क्षमा करें, यह उत्तर प्रश्न से संबंधित नहीं है। हम यह नहीं पूछ रहे हैं कि अवही को कैसे स्थापित किया जाए, सवाल यह है कि अवही डीएनएस लुकअप को स्थापित करने के बाद कैसे तोड़ सकता है।
आरोन दिगुल्ला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.