मेरा होस्टनाम रिज़ॉल्यूशन इतना लंबा क्यों है?


16

कई महीने पहले मैंने देखा कि मेरे पाठ संपादक (emacs) और IDE (IntelliJ) को शुरू होने में बहुत लंबा समय लग रहा था। DNS सर्वर OS X का उपयोग करते हुए समय अलग-अलग दिखाई देता है।

मैं इस मुद्दे को अलग करने में सक्षम था जब एक परियोजना का परीक्षण सूट धीरे-धीरे चल रहा था। मैंने (उच्च स्तर) अपराधी को कॉल करने के लिए पाया socket.getfqdn()

OS X 10.10.2 पर टर्मिनल में निम्न कमांड चलाने से समस्या प्रदर्शित होती है:

$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()'  0.02s user 0.00s system 0% cpu 5.122 total

मैंने उस कोड को ट्रेस किया socket.getfqdn()जो कॉल करने पर चलता है और देरी के कारण होता है getaddrinfo(3)। मैंने एक छोटा कार्यक्रम लिखा जो समस्या को अलग करता है और gai_strerror(3)यह संदेश प्रदान करता है:

$ time ./hostinfo
Hostname: MacBook-Pro.local
getaddrinfo: nodename nor servname provided, or not known
./hostinfo  0.00s user 0.00s system 0% cpu 5.101 total

ऐसा लगता है कि डीएनएस की क्वेरी का समय समाप्त होने का इंतजार हो रहा है। उपरोक्त परिणाम Google के सार्वजनिक DNS सर्वर का उपयोग कर रहे थे। यदि मैं अपने ISP के DNS सर्वर का उपयोग करता हूं, हालांकि, समय 30 सेकंड तक बढ़ जाता है:

$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()'  0.01s user 0.01s system 0% cpu 30.114 total

(उत्सुकता से सी कार्यक्रम hostinfoअभी भी 5 सेकंड से ऊपर लेता है)

इस समस्या का कारण क्या है? क्या मेरा होस्टनाम अमान्य है या समस्याएँ पैदा कर रहा है?

$ hostname
MacBook-Pro.local

यह समस्या उसी नेटवर्क पर मैकबुक एयर पर नहीं होती है।

मुख्य अंतर जो मैं देख सकता हूं वह यह है कि समस्याग्रस्त मशीन पर, निम्नलिखित डीएनएस कन्फ्यूजन सूचीबद्ध है:

$ scutil --dns
DNS configuration

resolver #1
  search domain[0] : Home
  nameserver[0] : 8.8.8.8
  nameserver[1] : 8.8.4.4
  flags    : Request A records
  reach    : Reachable

DNS configuration (for scoped queries)

resolver #1
  search domain[0] : Home
  nameserver[0] : 8.8.8.8
  nameserver[1] : 8.8.4.4
  if_index : 4 (en0)
  flags    : Scoped, Request A records
  reach    : Reachable

मैकबुक एयर पर, कई अतिरिक्त प्रविष्टियों को शामिल किया गया है जो mDNS से ​​संबंधित हैं। उदाहरण के लिए:

resolver #2
  domain   : local
  options  : mdns
  timeout  : 5
  flags    : Request A records
  order    : 300000

यह महत्वपूर्ण प्रतीत होता है। दिलचस्प है, ऊपर सूचीबद्ध टाइमआउट ऊपर के रनटाइम के समान है।

मुझे ध्यान देना चाहिए कि मैं वाईफाई का उपयोग करके इंटरनेट से जुड़ा हुआ हूं और मेरे कंप्यूटर के होस्ट नाम को हल करने का प्रयास करते समय समस्या केवल मौजूद है।


बोर्ड n ° 67590 पर आपका स्वागत है। कृपया अपने प्रश्न में जोड़ें कि आपका MBP इंटरनेट (ईथरनेट, वाई-फाई, ब्लूटूथ…) से कैसे जुड़ा है। क्या आपने एक मूल ping my_ISP_DNS_serverऔर कोशिश की ping Google_DNS_server?
डेन

जवाबों:


13

मैं इस मुद्दे को स्पष्ट रूप से सेट करके HostNameउपयोग scutilकरने में सक्षम था जैसे कि यह मान LocalHostName:

$ scutil --set HostName $(scutil --get LocalHostName)

अभी:

$ sudo scutil --set HostName MacBook-Pro
$ time python -c 'import socket; print(socket.getfqdn())'
MacBook-Pro
python -c 'import socket; print(socket.getfqdn())'  0.01s user 0.00s system 86% cpu 0.016 total

मैं निम्नलिखित के कारण पहले भ्रमित था:

$ scutil --get LocalHostName
MacBook-Pro

$ hostname
MacBook-Pro.local

परंतु:

$ scutil --get HostName
HostName: not set

जैसा कि दूसरे उत्तर में कहा गया है कि ऐसा लगता है कि इसे न केवल ठीक किया जाना चाहिए, बल्कि इसमें .local(या शायद सिर्फ एक .सामान्य) भी होना चाहिए ।
कीथ स्माइली

4

मैं मूल रूप से एक ही मुद्दा था, लेकिन अंततः इसे हल कर दिया।

मैं करने के लिए इस्तेमाल किया:

$ scutil --get HostName
Michaels-Macbook-Pro
$ scutil --get LocalHostName
Michaels-Macbook-Pro
$ time python -c 'import socket; socket.getfqdn()'
... 30s ...

फिर मैं बदल गया:

$ scutil --set HostName Michaels-Macbook-Pro.local
$ time python -c 'import socket; socket.getfqdn()'
... 5s ...

फिर मैंने इसमें जोड़ा: /etc/hosts

127.0.0.1       localhost Michaels-Macbook-Pro.local
::1             localhost Michaels-Macbook-Pro.local

यह तेज हो गया।


2

एक ही मुद्दा था, लेकिन आपके सुझाव मेरे काम नहीं आए।

आखिरकार, मैंने ऐसा करते ही इसे ठीक कर लिया:

sudo scutil --set HostName uranus.local

मेरी मशीन होस्ट 'यूरेनस' है। मुझे केवल इसमें '.Local' जोड़ना था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.