IP पते पर होस्टनाम को हल करने के लिए `/ etc / मेजबान` और DNS एक साथ कैसे काम करते हैं?


10

लिनक्स में, /etc/hostsआईपी ​​एड्रेस को होस्टनाम को हल करने के लिए डीएनएस और डीएनएस एक साथ कैसे काम करते हैं?

  1. यदि एक होस्टनाम को हल किया जा सकता है /etc/hosts, तो क्या DNS /etc/hosts होस्टनाम को हल करने के बाद डीएनएस लागू करता है या /etc/hostsपुनरावृत्ति को हल करने के लिए "होस्टनाम" के रूप में हल किए गए आईपी पते का इलाज करता है ?
  2. मेरे ब्राउज़र में (फ़ायरफ़ॉक्स और गूगल क्रोम), जब मैं इसमें जोड़ता हूँ /etc/hosts:

    127.0.0.1 google.com www.google.com
    

    ब्राउज़रों के एड्रेस बार में www.google.com टाइप करना और एंटर करना वेबसाइट से कनेक्ट नहीं होगा। मैं उस लाइन को हटाने के बाद /etc/hosts, मैं वेबसाइट से जुड़ सकता हूं। क्या इसका मतलब यह है कि /etc/hostsहोस्टनामों को हल करने के लिए DNS को ओवरराइड करता है ?

    मैं लाइन को फिर से जोड़ने के बाद /etc/hosts, मैं वेबपेज को रिफ्रेश करने के बाद भी वेबसाइट से कनेक्ट कर सकता हूं। क्यों /etc/hostsफिर से लागू नहीं होता है, ताकि मैं वेबसाइट से कनेक्ट न कर सकूं?

धन्यवाद।


9
सावधान रहें कि कई वेब ब्राउज़र अपने स्वयं के DNS सर्वर और DNS कैश को लागू करते हैं और सिस्टम पर कॉन्फ़िगर किए गए किसी भी नाम-लुकअप तंत्र से परामर्श नहीं करते हैं। दूसरे शब्दों में, कुछ वेब ब्राउज़र पूरी तरह से अनदेखी करते हैं /etc/hostsऔर स्थानीय रूप से परिभाषित नाम सर्वर। यह पहली बार देखने के लिए काफी भ्रामक है। (आप को देखते हुए, क्रोमियम-आधारित ब्राउज़र!)
क्रिस्टोफर

@ क्रिस्टोफर मैं यही बात कहने के लिए यहां आ रहा था। संबंधित unix.stackexchange.com/questions/363498/…
रुई एफ रिबेरो

@Christopher के बाद मैं / / / मेजबानों को फिर से जोड़ने के बाद, मैं अभी भी वेबसाइट से कनेक्ट कर सकते हैं, वेबपेज ताज़ा करने के बाद भी। क्यों / आदि / मेजबान फिर से लागू नहीं होते हैं, ताकि मैं वेबसाइट से कनेक्ट न कर सकूं? क्या यह फ़ायरफ़ॉक्स के डीएनएस कैश की वजह से है?
टिम

@RuiFRibeiro इस क्रोमियम बिल्ड का सम्मान /etc/hostsऔर सिस्टम द्वारा परिभाषित DNS सर्वरों के लिए लगता है: ( github.com/Eloston/ungoogled-chromium )। होमब्रे के साथ मैकओएस पर स्थापना brew cask install eloston-chromium:।
क्रिस्टोफर

जवाबों:


21

यह NSS (नाम सेवा स्विच) कॉन्फ़िगरेशन या /etc/nsswitch.confफ़ाइल के hostsनिर्देश द्वारा निर्धारित होता है । उदाहरण के लिए, मेरे सिस्टम पर:

hosts:    files mdns4_minimal [NOTFOUND=return] dns

यहाँ, फ़ाइल filesको संदर्भित करता है /etc/hosts, और dnsDNS सिस्टम को संदर्भित करता है। और जैसा कि आप कल्पना कर सकते हैं कि जो भी पहले जीतता है

इसके अलावा, man 5 nsswitch.confइस पर अधिक विचार प्राप्त करने के लिए देखें ।


एक अलग रूप में के रूप में, एनएसएस मेजबान संकल्प orderings उपयोग का पालन करने के getentसाथ hostsके रूप में डेटाबेस उदाहरण के लिए:

getent hosts example.com

धन्यवाद। मेरे भाग 2 में, ऐसा इसलिए है क्योंकि मेरे वेब ब्राउज़र का DNS सर्वर काम नहीं करता है, लेकिन वेब ब्राउज़र का DNS कैश काम करता है?
टिम

systemd.resolverप्रस्तावों को कैसे प्रभावित करता है? एनआईएस और एलडीएपी संकल्प प्रणाली में कहां फिट होते हैं? क्या आदेश एक macOS सिस्टम या एक विंडोज सिस्टम का अनुसरण करता है ?.
इसहाक

@ समय पर हां, आपका ब्राउज़र कैश से डेटा प्राप्त कर रहा है।
हेमायल

7

बस अपने आखिरी प्रश्न का उत्तर देने के लिए: /etc/hostsतुरंत फिर से लागू नहीं होता है क्योंकि firefoxपिछले होस्टनाम को कैशिंग कर रहा है जो इसके लिए मिला है google.com; यदि आप इसे कर इसे फिर लाने के लिए चाहते हैं, आप सेट करना होगा network.dnsCacheExpirationकरने के लिए 0में about:config। अधिक जानकारी (हालांकि थोड़ा पुराने) यहाँ । क्षमा करें यदि यह ऑफटॉपिक है।


एक विचार के रूप में, कई कार्यक्रम मानक रिज़ॉल्वर ( getaddrinfo(3), getnameinfo(3)[1]) का उपयोग नहीं करते हैं क्योंकि यह बेकार है

सबसे पहले, इंटरफ़ेस अतुल्यकालिक नहीं है; किसी भी मामूली जटिल कार्यक्रम को बस एक अलग थ्रेड स्पॉन करना होगा getaddrinfo()और फिर इसके साथ संवाद करने के लिए अपने स्वयं के प्रोटोकॉल का आविष्कार करना होगा (और चलो प्रवेश भी नहीं करते हैं getaddrinfo_a(), जो पूरा होने पर एक संकेत भेज रहा है , इसलिए यह और भी बुरा है)।

दूसरा, glibc(लिनक्स में मानक सी लाइब्रेरी) में रिज़ॉल्वर कार्यान्वयन भयानक है, जिससे आपको यह उम्मीद है कि आप इसे dlopen()अपनी पीठ के माध्यम से पता स्थान में यादृच्छिक गतिशील वस्तुओं को खींचने दें , और इसे किसी भी तरह से शामिल करना या इसे सांख्यिकीय रूप से उपयोग करना असंभव बना देता है। जुड़े हुए निष्पादनयोग्य।

के बाद से कई कार्यक्रमों सीधे मानक समाधानकर्ता का उपयोग नहीं करते हैं, वे भी वास्तव में अपने व्यवहार को दोहराने के लिए परेशान नहीं है, और कुछ या सभी की उपेक्षा /etc/resolv.conf, /etc/hosts, /etc/nsswitch.confया /etc/gai.conf

[1] और गैर-रीवेंटेंट, आईपीवी ४-केवल का भी उल्लेख नहीं करते हैं gethostbyname(), जो कि उम्र के बाद से हटा दिया गया था।


धन्यवाद। "गैर-प्रतिवादी" का क्या मतलब है?
टिम

1
इसका मतलब है कि यदि आप कर रहे हैं तो आप google = GHBN("google.com"); facebook = GHBN("facebook.com")दोनों के साथ समाप्त हो सकते हैं googleऔर facebookइसका पता लगा सकते हैं facebook.com। जब दो कॉल अलग-अलग थ्रेड में किए जाते हैं, तो यह और भी मजेदार है: आप एक पते के साथ समाप्त हो सकते हैं जो आधा Google और आधा facebook या पूरा कचरा है।
चाचा बिली

gethostbyname()अब क्या बदल गया है?
टिम

1
getaddrinfoउस के लिए मानक कार्य है, लेकिन स्वयं ब्रोकर है, जैसा कि मैंने पहले ही समझाया है, इसलिए इसका उपयोग ब्राउज़रों या अन्य वास्तविक जीवन के ऐप के रूप में नहीं किया जाता है।
अंकल बिली

उदाहरण के लिए वास्तव में फ़ायरफ़ॉक्स और क्रोम अपने स्वयं के हल का उपयोग करते हैं। हर्षित नोट्स के लिए धन्यवाद।
रुई एफ रिबेरो

6

फ़ाइल /etc/hostsऔर DNS एक साथ काम नहीं करते हैं। वे नामों (नेटवर्क नामों) के स्वतंत्र संकल्प प्रदान करते हैं।

गोंद जो उन्हें जोड़ता है , लिनक्स सिस्टम के लिए अंदर है/etc/nsswitch.conf । में /etc/netsvc.confAIX सर्वर के लिए, के लिए प्रणाली में विंडोज और साथ सूचीबद्ध किया जा सकता lookupd -configuration: (LookupOrder के लिए खोज, इसी तरह करने के लिए Cache FF DNS NI DSMacOS प्रणालियों में)।

वास्तविक आदेश जटिल हो जाता है और आमतौर पर प्रत्येक नाम संकल्प सेवा (और कई बार करते हैं) संकल्प के अन्य स्तरों के अंदर लग सकता है। जैसा dnsmasq(आम तौर पर एक प्रकाश DNS सर्वर 127.0.0.1:53, या ::1:53(या दोनों)) आमतौर पर पढ़ता है और शामिल /etc/hostsफ़ाइल सामग्री। या जैसे systemd.resolver(एक मूल रिज़ॉल्वर जो केवल अन-डॉटेड नामों को हल करना चाहिए जैसे mycomputer) अपनी mycomputer.here.dev.शर्तों के तहत डॉटेड नामों ( ) के लिए सीधे DNS रिज़ॉल्यूशन कहता है ।

सामान्य तौर पर, सेवाओं को क्रम में कहा जाता है और पहला वह जो जीतता नहीं है और सही पते के रूप में स्वीकार किया जाता है। सामान्य मूल क्रम है: /etc/hosts(फ़ाइल), mDNS (अन-डॉटेड नाम), DNS, NIS, NIS +, LDAP। कुछ लिनक्स प्रणालियों में सेवा में कंप्यूटर के लिए एक अंतिम उपाय संकल्प होता हैhostnamemyhostname

उदाहरण के लिए, इस प्रणाली में (से cat /etc/nsswitch):

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

ध्यान दें कि बहुत पुराना (2.4 glibc और पुराने) orderप्रविष्टि में सेट/etc/host.conf के रूप में:

order hosts,bind,nis

केवल फ़ाइल (फ़ाइल /etc/hosts) नाम सेवा पर लागू होते हैं ।

एनआईएस और एलडीएपी से संबंधित इस (लिनक्स) क्लाइंट कंप्यूटर पर प्रभाव (आमतौर पर) इस्तेमाल किए गए DNS सर्वर (बाइंड, अनबाउंड, आदि) द्वारा नियंत्रित होते हैं।

इसलिए:

  1. यदि होस्टनाम को / etc / मेजबानों में हल किया जा सकता है, तो DNS होस्टनाम को हल करने के लिए / etc / मेजबानों के बाद DNS लागू करता है या पुनरावर्ती रूप से हल करने के लिए "hostname" के रूप में / etc / host द्वारा हल किए गए IP पते का इलाज करता है?

कोई नहीं।

यदि एक होस्टनाम में हल किया जा सकता है /etc/hosts, तो DNSलागू नहीं होता है (यदि फाइलें DNS से ​​पहले है)।

न ही सुलझा हुआ आईपी पता "होस्टनाम" के रूप में माना जाता है।

यह बस है: सुलझा हुआ पता।

ब्राउज़र

एक ब्राउज़र किसी नाम को हल करने के लिए किसी भी विधि का उपयोग कर सकता है (इसके बाद हल किए गए नामों के अपने कैश की जाँच की है)। केवल अगर यह एक प्रणाली प्रदान की विधि का उपयोग करता है तो ऊपर दिए गए आदेश लागू होते हैं। ब्राउज़र, किसी भी प्रोग्राम के रूप में, किसी भी DNS सर्वर से सीधे संपर्क करने का विकल्प चुन सकता है।

यदि सिस्टम ऑर्डर /etc/hostsपहले से है DNS, तो इसका मतलब है कि उस फाइल में एक प्रविष्टि DNSसंकल्प सेवा के लिए पूर्ववर्ती होगी ।

इसलिए:

  1. ... इसका मतलब यह है कि / आदि / होस्ट होस्टनामों को हल करने के लिए DNS को ओवरराइड करता है?

हां (यदि ब्राउज़र सिस्टम प्रदान किए गए रिज़ॉल्यूशन का उपयोग करता है)।

क्यों /etc/hostsफिर से लागू नहीं होता है, ताकि मैं वेबसाइट से कनेक्ट न कर सकूं?

केवल तब तक जब तक कि ब्राउज़र के आंतरिक कैश को साफ़ नहीं किया जाता (या यह उस समय के लिए) उस विशिष्ट नाम के लिए फिर से ब्राउज़र के बाहर खोजा गया नाम है।

यदि ब्राउज़र का कैश में नाम हल है, तो ब्राउज़र फिर से इसका उपयोग करता है।

कैश को साफ़ करने के लिए इसका उपयोग करें

या बस बंद करें (थोड़ी देर प्रतीक्षा करें) और ब्राउज़र को फिर से शुरू करें।

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