होस्ट कमांड / आदि / मेजबानों में प्रविष्टियों का समाधान क्यों नहीं करता है?


25

मैं /etc/hostsएक ubuntu 12.04 मशीन पर निम्नलिखित फ़ाइल है

127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

हालाँकि होस्ट कमांड puppetmasterसही तरीके से नाम का समाधान नहीं करता है, जबकि टेलनेट कमांड करता है

root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)

root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.

होस्ट कमांड / आदि / मेजबानों में प्रविष्टियों का समाधान क्यों नहीं करता है?

जवाबों:


52

hostकार्यक्रम का उपयोग करता है libresolvसीधे एक DNS पूछताछ प्रदर्शन करने के लिए, यानी, का उपयोग नहीं करता gethostbyname

अधिकांश कार्यक्रम, जब किसी अन्य होस्ट से कनेक्ट करने का प्रयास करते हैं, तो gethostbynameसिस्टम कॉल या इसी तरह के फ़ंक्शन को आमंत्रित करते हैं । यह फ़ंक्शन कॉन्फ़िगरेशन का पालन करता है /etc/nsswitch.conf। इस फ़ाइल में एक पंक्ति है जो Ubuntu 12.04 में निम्न के लिए डिफ़ॉल्ट है:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

जिसका अर्थ है कि यह पहले उपयोग करेगा /etc/hosts, फिर DNS प्रश्नों पर वापस आएगा ।

यदि आप इस तरह से होस्ट लुकअप करना चाहते हैं, तो आप इसके साथ कर सकते हैं getent hosts। उदाहरण के लिए:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

आशा है कि ये आपकी मदद करेगा।


2
धन्यवाद Kvisle, लेकिन मैं अभी भी थोड़ा भ्रमित हूँ। इस /etc/nsswitch.confतरह दिखने वाली लाइन hosts: files dnsऔर मैंने इसे बदल दिया, hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4हालांकि दोनों ही मामलों /etc/hostsमें इसे बुझाया नहीं गया, बल्कि ऐसा प्रतीत होता है कि प्रत्यक्ष डीएनएस प्रश्न किए जाते हैं। मैं यह कैसे सुनिश्चित कर सकता हूं कि /etc/hostsपहले digया जैसे कमांड का उपयोग करते समय इसे क्वेर किया जाएगा host?
user784637

4
आप नहीं कर सकते। dig / host DNS का सीधे उपयोग करता है। यदि आपको एक ऐसा नामचौक बनाने की आवश्यकता है जो पहले मेजबान-फ़ाइल की जांच करता है, तो आपको उपयोग getent hostsया कुछ और उपयोग करना होगाgethostbyname()
Kvisle

ओह, मैं देख रहा हूं, मेरा बुरा, मुझे अब मिल गया है =)
user784637

1
मुझे विश्वास है कि आजकल एक का उपयोग किया जाना चाहिए getent ahostsबजाय getent hostsक्योंकि getent hostsउपयोग करता है gethostbyaddr()या gethostbyname*()जो अप्रचलित हैं। अगर मैं सही तरीके से समझ गया हूं, तो यह getent hostsबताता है कि पुराने UNIX C प्रोग्राम कैसे काम करते थे और getent ahostsजिस तरह से moderm प्रोग्राम को काम करना चाहिए, उसका अनुकरण करता है।
मिकको रेंटालिनेन

लेकिन क्या मेजबान कमांड का उपयोग करने का एक तरीका भी है / आदि / मेजबान?
कोर्नेल

10

क्योंकि hostउपयोगिता विशेष रूप से एक DNS लुकअप उपयोगिता है।

अधिकांश एप्लिकेशन लाइब्रेरी कॉल getaddrinfoया का उपयोग करते हैं gethostbyname। इन पुस्तकालयों ने /etc/nsswitch.confलुकअप प्राथमिकता और कैसे अलग-अलग लुकअप करने की नीति निर्धारित करने के लिए बुलाया फ़ाइल से पूछताछ की ।

आमतौर पर /etc/nsswitch.confलाइन होती है

hosts:        files dns

जो किसी प्रोग्राम को पहले पूछताछ करने /etc/hostsऔर फिर असफल होने पर DNS से पूछताछ करने के लिए कहता है ।

चूंकि मेजबान विशेष रूप से DNS लुकअप करते हैं, इसलिए यह लुकअप करने के लिए झांकता नहीं है /etc/hosts


3

आप उसे वैसा ही पाएंगे digऔर nslookupवैसा ही व्यवहार करेंगे host

इसका कारण यह है कि इन सभी आदेशों का उद्देश्य DNS लुकअप करना है, न कि फाइलों में देखना।

अधिकांश अन्य प्रोग्राम ऑपरेटिंग सिस्टम के नाम रिज़ॉल्वर का उपयोग करते हैं जो यह सलाह देते हैं /etc/nsswitch.confऔर फिर (यदि आवश्यक हो) /etc/resolv.confयह तय करने के लिए कि जिस होस्टनाम का आप अनुरोध कर रहे हैं उसे कैसे हल किया जाए। (यह एक सरलीकरण है, अन्य विकल्प भी हैं।) nsswitch.confफ़ाइल आमतौर पर DNS की बजाय स्थानीय फाइलों पर पूर्वता रखती है।



-1

फ़ाइल /etc/nsswitch.conf की जाँच करें और शब्द "मेजबानों" से शुरू होने वाली रेखा को देखें? क्या आप इस लाइन पर "फाइलें" शब्द देखते हैं? यदि हाँ, तो यह "डीएनएस" शब्द से पहले या बाद में है?

एक सामान्य प्रणाली पर, यह रेखा कुछ इस तरह होनी चाहिए

hosts      files dns

यदि आपका वर्तमान नहीं है या अलग-अलग क्रम में है, तो यह आपकी समस्या हो सकती है।


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