कौन /etc/resolv.conf पढ़ता है?


16

मेरा Centos 7 सर्वर डोमेन नामों को ठीक से हल नहीं करता है। जो कुछ मैं देख रहा हूं, आधुनिक लिनक्स प्रणालियों /etc/resolv.confमें अक्सर उसके साथ उत्पन्न होता है dhclient, dnsmasqया Network Manager

इस प्रकार मेरे पास आधुनिक लिनक्स में नेटवर्क स्टैक के बारे में एक सामान्य सैद्धांतिक प्रश्न है:

पढ़ने के लिए कौन जिम्मेदार है /etc/resolv.conf? डोमेन नाम संकल्प में कौन से खिलाड़ी (सेवा या कर्नेल सबसिस्टम) शामिल हैं?

SHORT ANSWER: Arch linux मैन्युअल का कहना है कि डोमेन नाम रिज़ॉल्यूशन का उच्च-स्तरीय कॉन्फ़िगरेशन में किया जाता है/etc/nsswitch.conf और नाम सेवा स्विच glibcएपीआई पर निर्भर करता है।

glibcnss-resolveDNS सर्वर को DNS अनुरोध भेजने के लिए फ़ंक्शन का उपयोग करता है।

आम तौर पर आधुनिक CentOS सिस्टम सेवा nss-resolve पर निर्भर करता है systemd-resolved । अगर /etc/resolv.confऐसा कुछ उत्पन्न होता है dhclient-script, तो systemd-resolvedइसे पढ़ता है और एक संगतता मोड में काम करता है, BINDDNS क्लाइंट जैसे पुराने सिस्टम के व्यवहार का अनुकरण करता है।

जवाबों:


20

डीएनएस क्लाइंट लाइब्रेरी करते हैं।

C पुस्तकालयों में DNS क्लाइंट होते हैं जो DNS प्रोटोकॉल में नाम-से-पता लुकअप को लपेटते हैं और उन्हें क्वेरी रिज़ॉल्यूशन के सभी गंभीर कार्य करने के लिए प्रॉक्सी DNS सर्वर को सौंपते हैं। इन DNS क्लाइंट्स की संख्या बहुत अधिक है। जो आपके ऑपरेटिंग सिस्टम के मुख्य C रनटाइम लाइब्रेरी में है, वह संभवतः ISC के BIND से होगा। लेकिन डैनियल जे। बर्नस्टीन की dnsलाइब्रेरी से दूसरों के लिए सी-एरीज़ से लेकर एडन तक का पूरा भार है।

यद्यपि उनमें से कई में अपने स्वयं के मूल कॉन्फ़िगरेशन तंत्र शामिल हैं, उनके पास आमतौर पर एक BIND लाइब्रेरी संगतता मोड होता है जहां वे पढ़ते हैं resolv.conf, जो ISC के BIND C क्लाइंट लाइब्रेरी के लिए कॉन्फ़िगरेशन फ़ाइल है।

एनएसएस इसके शीर्ष पर स्तरित है, और इसके द्वारा कॉन्फ़िगर किया गया है nsswitch.conf। आंतरिक रूप से एनएसएस लुकअप कर सकने वाली चीजों में से एक डीएनएस क्लाइंट है, और nsswitch.confसी लाइब्रेरी में एनएसएस कोड द्वारा यह निर्धारित करने के लिए पढ़ा जाता है कि डीएनएस क्लाइंट को लुकअप कहां और कहां सौंपी गई है और विभिन्न प्रतिक्रियाओं से कैसे निपटना है।

(नाम सेवा कैश D nmon, nscd के कारण इस विचार में थोड़ी जटिलता है। लेकिन यह बस C लाइब्रेरी में एक अतिरिक्त अपर-लेयर क्लाइंट जोड़ता है, जो एक स्थानीय सर्वर के लिए एक idiosyncratic प्रोटोकॉल बोलता है, जो इसके बदले में कार्य करता है। DNS क्लाइंट DNS प्रोटोकॉल को प्रॉक्सी DNS सर्वर पर बोल रहा है। systemd-resolvedइसी तरह की जटिलताओं को जोड़ता है।)

systemd-resolved, NetworkManager, connman, dhcpcd, resolvconf, और दूसरों को स्विच डीएनएस ग्राहकों को BIND DNS क्लाइंट विन्यास फाइल मक्खी पर भिन्न प्रॉक्सी डीएनएस सर्वर से बात करने के लिए समायोजित करें। यह इस उत्तर के लिए गुंजाइश से बाहर है, खासकर जब से इस WWW साइट पर बहुत सारे उत्तर हैं जो पहले से ही बीजान्टिन विवरणों के साथ काम कर रहे हैं जिसमें इस तरह के तंत्र शामिल हैं।

यूनिक्स दुनिया में चीजों को करने का अधिक पारंपरिक तरीका प्रॉक्सी DNS सर्वर को या तो मशीन पर या लैन पर चलाना है। इसलिए फ्रीबीएसडी मैनुअल सामान्य रूप से कॉन्फ़िगर किए गए सिस्टम के बारे में क्या कहता है, जहां resolv.confयूनिक्स सिस्टम एडमिनिस्ट्रेटर के मैचों की अनुपस्थिति में डीएनएस क्लाइंट लाइब्रेरी की डिफ़ॉल्ट कार्रवाई सामान्य रूप से होती है, जो 127.0.0.1 पर सुनने वाला प्रॉक्सी DNS सर्वर है। (के लिए फ्रीबीएसडी मैनुअल resolv.confवास्तव में डोको है जो आईएससी के बंड से भी निकलता है, और निश्चित रूप से यह भी पाया जा सकता है कि जहां बिंड डीएनएस क्लाइंट लाइब्रेरी को अन्य स्थानों जैसे जीएनयू सी लाइब्रेरी में शामिल किया गया है।)

आगे की पढाई


7

बेहतर FreeBSD मैन पेज से, resolv.conf :

 The resolver configuration file contains information that is read by the
 resolver routines the first time they are invoked by a process.

 On a normally configured system this file should not be necessary.  The
 only name server to be queried will be on the local machine, the domain
 name is determined from the host name, and the domain search path is
 constructed from the domain name.

1

फ़ाइल /etc/resolv.confको * libc कॉल द्वारा पढ़ा जाता है जो होस्ट नाम रिज़ॉल्यूशन निष्पादित करता है। यह मुख्य रूप से getaddrinfoऔर पदावनत है gethostbyname

यदि इन कार्यों को एक डीएनएस नाम दिया जाता है, तो वे इन चीजों को निम्न क्रम में करते हैं:

  1. होस्ट नाम को स्थानीय रूप से हल करने का प्रयास करें, जो पढ़ने से है /etc/hosts
  2. यदि यह विफल रहता है, तो सूचीबद्ध DNS सर्वरों को क्वेरी करें /etc/resolv.conf
  3. यदि यह भी विफल रहता है, तो होस्ट नाम हल नहीं किया जा सकता है।

चूंकि आप dnsmasq का उल्लेख करते हैं : यह एक DNS सर्वर है जो स्थानीय रूप से चलता है। इसलिए, कई आधुनिक लिनक्स डिस्ट्रोस पर , /etc/resolv.confकेवल यही इंगित करता है 127.0.0.1(यह वह जगह है जहां स्थानीय dnsmasq सुनता है)। dnsmasq तो प्रश्नों को अग्रेषित करने के लिए कॉन्फ़िगर किया गया है इंटरनेट DNS सर्वर; dnsmasq इंटरनेट से कनेक्ट होने पर नेटवर्क मैनेजर द्वारा कॉन्फ़िगर किया गया है।


वे सिस्टम कॉल नहीं हैं, वे * libc फ़ंक्शंस हैं।
जोशुआली

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