आंतरिक नेटवर्क के लिए BIND में कुछ DNS प्रविष्टियों को ओवरराइड करना


39

मेरे पास एक आंतरिक नेटवर्क है जिसमें DNS सर्वर चल रहा है, जो एक एकल प्रवेश द्वार के माध्यम से इंटरनेट से जुड़ा है। मेरा डोमेन "example.com" एक बाहरी DNS प्रदाता द्वारा प्रबंधित है। उस डोमेन की कुछ प्रविष्टियाँ, "host1.example.com" और "host2.example.com" कहती हैं, साथ ही शीर्ष-स्तरीय प्रविष्टि "example.com", गेटवे के सार्वजनिक IP पते को इंगित करती हैं।

मैं आंतरिक नेटवर्क पर स्थित होस्ट्स को "host1.example.com", "host2.example.com" और "example.com" को गेटवे के बजाय आंतरिक IP पते पर हल करना चाहूंगा। अन्य होस्ट जैसे "otherhost.example.com" को अभी भी बाहरी DNS प्रदाता द्वारा हल किया जाना चाहिए।

मैं "Host1.example.com" और "host2.example.com" के लिए BIND में दो एकल-एंट्री ज़ोन को परिभाषित करके, host1 और host2 प्रविष्टियों के लिए ऐसा करने में सफल रहा। हालाँकि, यदि मैं "example.com" के लिए एक ज़ोन जोड़ता हूं, तो उस डोमेन के सभी क्वेरीज़ मेरे स्थानीय DNS सर्वर द्वारा हल किए जाते हैं, और उदाहरण के लिए "otherhost.example.com" को किसी त्रुटि के कारण क्वेरी करते हैं।

क्या यह संभव है कि किसी डोमेन की केवल कुछ प्रविष्टियों को ओवरराइड करने के लिए BIND को कॉन्फ़िगर किया जाए और बाकी को फिर से हल किया जाए?


इसी तरह के सवाल: serverfault.com/questions/8694/…
मिकीबी

1
"क्या किसी डोमेन की केवल कुछ प्रविष्टियों को ओवरराइड करने के लिए BIND को कॉन्फ़िगर करना संभव है?" नहीं, BIND के साथ नहीं। एक उपडोमेन का उपयोग करें।
बोर्त्ज़मेयर

1
अनबाउंड वास्तव में वही करता है जो मैंने पूछा था, इसलिए मैं स्वीकार किए गए उत्तर के रूप में अलनीतक का उत्तर निर्धारित कर रहा हूं। लेकिन अंत में, मैं bortzmeyer की सलाह का पालन करने जा रहा हूं और डोमेन प्रविष्टि को ओवरराइड नहीं कर रहा हूं । सभी उत्तरों के लिए धन्यवाद!
रेमी ब्लैंक

1
बिंद अब इसे रिस्पांस पॉलिसी जोन के साथ कर सकता है। मेरा जवाब नीचे देखें। अनबाउंड जैसे अन्य समाधान CNAMEs को ओवरराइड नहीं कर सकते हैं। बिंद में नीति क्षेत्रों के साथ, आपको उप-डोमेन करने की ज़रूरत नहीं है; आप अपनी इच्छानुसार व्यक्तिगत रिकॉर्ड को ओवरराइड कर सकते हैं।
फ्लोरिन आंद्रेई

जवाबों:


18

सबसे अच्छी विधि 9.8.1 या नए में प्रतिक्रिया नीति क्षेत्र के माध्यम से है। यह आपको मनमाने ढंग से क्षेत्रों में एकल रिकॉर्ड को ओवरराइड करने की अनुमति देता है (और इसके लिए कोई संपूर्ण उप-डोमेन बनाने की आवश्यकता नहीं है, केवल एकल रिकॉर्ड जिसे आप बदलना चाहते हैं), यह आपको CNAMEs को ओवरराइड करने की अनुमति देता है, आदि जैसे अनबाउंड अन्य समाधान CNAMEs को बाधित नहीं कर सकते हैं। ।

https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html


संपादित करें: चलो यह ठीक से करते हैं। मैं ऊपर दिए गए ट्यूटोरियल के आधार पर मैंने जो भी किया है, उसे दस्तावेज़ित करूँगा।

माई ओएस रास्पबेरी पाई के लिए रास्पियन 4.4 है, लेकिन तकनीक को डेबियन और उबंटू पर किसी भी बदलाव के बिना काम करना चाहिए, या अन्य प्लेटफार्मों पर कम से कम बदलाव के साथ।

उस जगह पर जाएं जहां आपकी बिंद कॉन्फिग फाइल आपके सिस्टम पर रखी गई हैं - यहां यह है /etc/binddb.rpzनिम्नलिखित सामग्री के साथ एक फ़ाइल में बनाएँ :

$TTL 60
@            IN    SOA  localhost. root.localhost.  (
                          2015112501   ; serial
                          1h           ; refresh
                          30m          ; retry
                          1w           ; expiry
                          30m)         ; minimum
                   IN     NS    localhost.

localhost       A   127.0.0.1

www.some-website.com    A        127.0.0.1

www.other-website.com   CNAME    fake-hostname.com.

यह क्या करता है?

  • यह www.some-website.comनकली पते के साथ आईपी ​​पते को ओवरराइड करता है 127.0.0.1, प्रभावी रूप से लूपबैक पते पर उस साइट के लिए सभी ट्रैफ़िक भेज रहा है
  • यह www.other-website.comएक अन्य साइट के लिए यातायात भेजता है जिसे कहा जाता हैfake-hostname.com

कुछ भी जो एक बिंद ज़ोन फ़ाइल में जा सकता है आप यहाँ उपयोग कर सकते हैं।

इन परिवर्तनों को सक्रिय करने के लिए कुछ और चरण हैं:

named.conf.localइस अनुभाग को संपादित करें और जोड़ें:

zone "rpz" {
  type master;
  file "/etc/bind/db.rpz";
};

ऊपर लिंक किया गया ट्यूटोरियल आपको अधिक सामान जोड़ने के लिए कहता है, zone "rpz" { }लेकिन यह सरल सेटअपों में आवश्यक नहीं है - जो मैंने यहां दिखाया है वह आपके स्थानीय रिज़ॉल्वर पर काम करने के लिए न्यूनतम है।

संपादित करें named.conf.optionsऔर कहीं options { }अनुभाग में response-policyविकल्प जोड़ें :

options {
  // bunch
  // of
  // stuff
  // please
  // ignore

  response-policy { zone "rpz"; };
}

अब बिंद पुनः आरंभ करें:

service bind9 restart

बस। नेमसेवर को अब उन रिकॉर्ड्स को ओवरराइड करना शुरू कर देना चाहिए।

यदि आपको परिवर्तन करने की आवश्यकता है db.rpz, तो बस संपादित करें , फिर से बिंद को पुनः आरंभ करें।

बोनस: यदि आप DNS क्वेरीज़ को लॉग इन करना चाहते हैं, तो आप कार्यवाही पर नज़र रख सकते हैं, संपादित कर सकते हैं named.conf.localऔर सुनिश्चित कर सकते हैं कि एक loggingखंड है जिसमें ये कथन शामिल हैं:

logging {
    // stuff
    // already
    // there

    channel my_syslog {
        syslog daemon;
        severity info;
    };
    category queries { my_syslog; };
};

बिंद फिर से शुरू करें और यह बात है।

बिंद चल रही मशीन पर इसका परीक्षण करें:

dig @127.0.0.1 www.other-website.com. any

यदि आप किसी भिन्न मशीन पर खुदाई करते हैं तो @ 127.0.0.1 के बजाय @ @-ip-ip-of-Bind- सर्वर का उपयोग करें

मैंने जिस वेबसाइट पर काम कर रहा था, उसके लिए CNAME को ओवरराइड करने के लिए बड़ी सफलता के साथ इस तकनीक का उपयोग किया है, इसे एक नए AWS लोड बैलेंसर में भेज रहा हूं जिसे मैं अभी परीक्षण कर रहा था। एक रास्पबेरी पाई को बिंद को चलाने के लिए इस्तेमाल किया गया था, और आरपीआई को वाईफाई राउटर के रूप में कार्य करने के लिए भी कॉन्फ़िगर किया गया था - इसलिए डिवाइसेस को एसएसआई पर चलने वाले एसएसआईडी से कनेक्ट करके मुझे डीएनएस ओवरराइड मिलेगा जो मुझे परीक्षण के लिए आवश्यक था।


1
कृपया ध्यान दें कि BIND RPZ वास्तव में (अभी तक) प्रति qtYPE आधार पर एकल रिकॉर्ड को ओवरराइड नहीं कर सकता है - यह किसी विशेष स्वामी के नाम के सभी रिकॉर्ड को ओवरराइड करेगा । इसका मतलब है कि यदि आप किसी डोमेन के लिए A रिकॉर्ड को ओवरराइड करना चाहते हैं, लेकिन उदाहरण के लिए MX रिकॉर्ड नहीं, तो आप नहीं कर सकते। आपको MX रिकॉर्ड RPZ ज़ोन में भी डालना होगा, और इसे वास्तविक ज़ोन के साथ सिंक में रखना होगा।
एल्निटैक

2
जैसे आपने किया, उसे तोड़ने के लिए धन्यवाद। बहुत उपयोगी।
स्रुफेल

क्या कोई कैविएट हैं? मैं इसे एक pfsense पर करने की कोशिश कर रहा हूं, लेकिन मैं किसी भी परिणाम को "नकली" नहीं कर सकता, यह अभी भी वास्तविक पते की रिपोर्ट करता है। मेरा मानना ​​है कि मैंने पत्र के निर्देशों का पालन किया है।
11

@ यह काम करना चाहिए। मैंने पोस्ट संपादित की है और परिवर्तनों के परीक्षण के लिए एक सुझाव जोड़ा है।
फ्लोरिन आंद्रेई

@ Lf के लिए इस पैकेज को GUI में बनाया गया है, जो कि लगभग एक साल के लिए बनाया गया है, इसलिए विन्यास के साथ मिलाना आवश्यक नहीं होना चाहिए। ओपी: आरपीजेड के साथ कुछ अन्य चीजों का उल्लेख करने के लायक हो सकता है जैसे कि NXDOMAIN के साथ उत्तर देना या केवल प्रतिक्रिया छोड़ना।
miken32

21

अनबाउंड पुनरावर्ती डीएनएस सर्वर व्यक्तिगत संसाधन रिकॉर्ड को ओवरराइड करने की क्षमता है।

को देखो local-zoneऔर local-dataमें विन्यास सेटिंग्स मैनुअल , जैसे:

local-zone: "example.com." transparent
local-data: "foo.example.com. IN A 192.168.1.1"

transparentपर सेटिंग local-zoneइसके साथ की आपूर्ति नहीं की किसी भी नाम के लिए सामान्य पुनरावर्ती लुकअप करने के लिए कहता है local-data


1
लगता है कि वास्तव में मैं क्या करना चाहता हूँ, धन्यवाद। मैं आज रात अनबाउंड पर पढ़ूंगा।
रेमी ब्लैंक

दूसरी ओर, इसका ज्ञान काफी संदिग्ध है। एक internal.example.com डोमेन होने से यह स्पष्ट हो जाएगा।
bortzmeyer

@Bortzmeyer - तुम सही हो सकता है, लेकिन मुझे लगता है नहीं Wouter सिर्फ मनोरंजन के लिए में रख ;-)
एल्निटैक

3
@bortzmeyer, कभी-कभी कोई विकल्प नहीं होता है। उदाहरण: SBS 2008 में एक LAN LAN होना चाहिए, फिर भी इसे बाहरी IP का उपयोग करके बाहर से पहुंचाना होगा जो कि राउटर अग्रेषित कर रहा है। Microsoft SBS पर दो नेटवर्क कार्ड की अनुमति नहीं देता है, और न ही दो IP एक ही कार्ड पर कॉन्फ़िगर किए जाते हैं। यदि स्थानीय सर्वर DNS नाम को बाहरी IP में हल करते हैं, तो राउटर को LAN IP के लिए DNAT और SNAT दोनों करने की आवश्यकता होती है, और फिर SBS पर लॉग राउटर के IP से होने के लिए सभी एक्सेस दिखाएगा, और यह सिर्फ गलत है। मैं unboundअपने राउटर पर स्थापित करूंगा, मुझे लगता है कि समाधान ज्यादा बेहतर है।
कॉसमैन प्रुंड

यह प्रश्न का उत्तर नहीं देता है, क्योंकि यह प्रश्न BIND के लिए विशिष्ट है।
बज़्मैन

4

आप "dnsmasq" में देखना चाह सकते हैं, जो आपको ट्विकिंग रिज़ॉल्यूशन के साथ कुछ बहुत ही चतुर चीजें करने की अनुमति देता है।


धन्यवाद, अच्छी टिप। बहुत बुरा dnsmasq पुनरावर्ती संकल्प नहीं करता है, इसलिए मुझे अभी भी उसके लिए दूसरे पोर्ट पर BIND चलाना होगा (मेरे ISP के DNS सर्वर परतदार हैं)।
रेमी ब्लैंक

4

आप जो खोज रहे हैं वह DNS को विभाजित करता है, जिसे वेबपीडिया द्वारा परिभाषित किया गया है:

एक विभाजित DNS बुनियादी ढांचे में, आप एक ही डोमेन के लिए दो ज़ोन बनाते हैं, एक आंतरिक नेटवर्क द्वारा उपयोग किया जाता है, दूसरा बाहरी नेटवर्क द्वारा उपयोग किया जाता है। स्प्लिट डीएनएस आंतरिक होस्ट को नाम रिज़ॉल्यूशन के लिए एक आंतरिक डोमेन नाम सर्वर के लिए निर्देशित करता है और बाहरी होस्ट नाम के रिज़ॉल्यूशन के लिए एक बाहरी डोमेन नाम सर्वर को निर्देशित किया जाता है।

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

DNS सर्वर कार्यान्वयन आपके द्वारा उपयोग किए जाने के बावजूद इसे लागू किया जा सकता है। अधिकांश सेटअपों में, आपके पास एक DNS सर्वर होगा जो बाहरी नेटवर्क का कार्य करता है, और एक अलग आंतरिक नेटवर्क का कार्य करता है। BIND के साथ, संभवतः अन्य कार्यान्वयनों के रूप में, आप name.conf फ़ाइल के ज़ोन अनुभाग के भीतर "अनुमति-क्वेरी" कथन के उपयोग के माध्यम से एक ही सर्वर पर ज़ोन के दोनों संस्करण रख सकते हैं।

BIND पर एक और संभावना (और मैंने कभी यह कोशिश नहीं की) आंतरिक DNS सर्वर पर आपके example.com डोमेन को केवल आपके द्वारा आंतरिक रूप से रिकॉर्ड किए गए रिकॉर्ड के साथ सेट करना होगा। फिर, "पहले" तर्क ("आगे" के साथ संयोजन में) के साथ एक "आगे" बयान सेट करें। सिद्धांत रूप में, यह बाहरी DNS सर्वर से पूछेगा (जैसा कि उत्तर के लिए "फ़ॉरवर्डर्स" में सेट किया गया है, जिसमें आपके आंतरिक रिकॉर्ड नहीं होंगे और विफलता की प्रतिक्रिया वापस कर देंगे। फिर, आंतरिक सर्वर अपने आप को एक उत्तर के लिए देखेगा। नहीं) यकीन है कि अगर काम करेगा, लेकिन यह एक विचार है।


दो ज़ोन फ़ाइलों को सिंक में रखना जटिल होगा, क्योंकि बाहरी एक गतिशील डीएनएस क्लाइंट के माध्यम से अपडेट किया जाता है। मैं हालांकि आगे के बयान पर पढ़ूंगा। पारितोषिक के लिए धन्यवाद।
रेमी ब्लैंक

नहीं, BIND अग्रेषण काम नहीं करेगा, यह केवल अज्ञात डोमेन के लिए होगा लेकिन आंतरिक नाम सर्वर को example.com के बारे में पता होगा, यह इसके लिए आधिकारिक होगा।
बोर्ट्ज़मेयर

1
यदि मैं दस्तावेज़ीकरण को सही ढंग से पढ़ रहा हूं, तो एक ज़ोन अनुभाग के भीतर "आगे पहले" बयान को बंड को बाहर जाना चाहिए और एक आधिकारिक स्थानीय डोमेन के लिए भी फारवर्डर पर एक उत्तर की तलाश करनी चाहिए, फिर स्थानीय जानकारी का उपयोग केवल तभी करें जब वह कर सकता है ' टी फारवर्डर से जवाब मिलता है।
जस्टिन स्कॉट

यदि आप एक वैश्विक "आगे पहले" डालते हैं, तो यह प्रश्नों को फारवर्डर को भेजेगा और यदि उत्तर नहीं दिया गया है, तो वह क्वेरी का उत्तर देने का प्रयास करेगा '(डॉक से) लेकिन यदि यह एक प्रतिक्रिया प्राप्त करता है, तो यह स्वयं को हल करने का प्रयास नहीं करेगा। यह बहुत अच्छा होगा यदि आप इसे हल करने के लिए बाध्य कर सकते हैं यदि प्रतिक्रिया आधिकारिक नहीं है या भले ही यह एक NXDOMAIN है, लेकिन यह कोशिश नहीं करेगा कि यह फारवर्डर से प्रतिक्रिया प्राप्त करता है।
पाब्लो मार्टिनेज

3

BIND में मुझे वांछित होस्ट नाम का उपयोग करके एक ज़ोन को परिभाषित करके यह परिणाम मिलता है। यदि आप केवल कुछ मेजबानों को ओवरराइड करना चाहते हैं तो दृष्टिकोण ठीक है।

मेरा क्षेत्र घोषणा इस तरह दिखता है:

zone "override.example.com" {
        type master;
        notify no;
        file "zone-config/override.example.com";
};

मेरा क्षेत्र परिभाषा इस तरह दिखता है:

$TTL 4H
@       IN      SOA     ns.override.example.com.    root.override.example.com. (
                        2009072215      ; Serial
                        3600            ; Refresh
                        600             ; Retry
                        604800          ; Expire
                        3600    )       ; Minimum
;
                NS      ns
        IN      NS      ns.override.example.com.
        IN      A       192.168.1.100
ns      IN      A       192.168.1.100

इसलिए यदि मैं इंट्रानेट DNS और ISP DNS पर example.com की क्वेरी करता हूं तो मुझे एक ही आईपी मिलता है, लेकिन अगर मैं ओवरराइड करता हूं। xample.com अगर इंट्रानेट डीएनएस (प्राथमिक) सुलभ हो तो मुझे अलग परिणाम मिलते हैं।


2

आप पहले से ही सही रास्ते पर हैं।

अपने आंतरिक DNS सर्वरों पर, आपको "example.com" के ठीक नीचे प्रत्येक अपवाद होस्ट के लिए एक ज़ोन को परिभाषित करने की आवश्यकता होगी। इन अपवादों को कम करने के लिए, सभी आंतरिक मशीनों को "hosta.internal.example.com" नाम देना आम बात है, क्योंकि DNS सर्वर बाहरी DNS सर्वरों को अधिकांश प्रश्न भेजते हैं, लेकिन "आंतरिक .example.com" क्षेत्र के लिए आधिकारिक है। (एक बार जब आप एक छोटे से संचालन को पार कर लेते हैं, तो आमतौर पर एक युगल DNS सर्वर होता है, जिसके लिए ग्राहकों को निर्देशित किया जाता है और एक अलग आधिकारिक DNS होता है, जो उन सर्वरों को "internal.example.com" के लिए निर्देशित किया जाता है।)

आमतौर पर, यह केवल तब होता है जब एक मेजबान को बाहरी और आंतरिक रूप से दोनों को पुन: प्राप्त करना चाहिए जो आपके द्वारा वर्णित अपवादों को निर्मित करता है। फिर भी, आप बाहर से "host1.example.com" और अंदर से "host1.internal.example.com" का उपयोग करना चाह सकते हैं। आंतरिक होस्ट "internal.example.com" के नामों को देखने के लिए कॉन्फ़िगर किए गए हैं। ऐसी स्थितियां हैं जो आप पहले से ही कर रहे हैं वह उपयुक्त है, जैसे कि सर्वर के लिए प्रमाणपत्र "host1.example.com" के रूप में सर्वर की पहचान करता है, इस स्थिति में आप चाहते हैं कि वह नाम हो जिससे ग्राहक कनेक्ट होते हैं।


हां, "host1.example.com" होस्ट के लिए, यह पहले से ही अच्छी तरह से काम कर रहा है। मुश्किल हिस्सा शीर्ष स्तर के "example.com" को उसी तरह से हैंडल कर रहा है ...
रेमी ब्लैंक

2

Dnsmasq का उपयोग करें यह वास्तविक आसान बनाता है। http://www.thekelleys.org.uk/dnsmasq/doc.html dns सर्वर के रूप में कार्य करता है, लेकिन स्थानीय sns सर्वर से उत्तर प्राप्त करता है। अच्छी बात यह है कि आप ज़ोन फ़ाइलों के साथ खिलवाड़ किए बिना एकल डोमेन रिकॉर्ड को ओवरराइड कर सकते हैं


2

तथ्य की बात के रूप में एक और है, भले ही शायद थोड़ा अलग हो, ऐसा करने का तरीका। मेरे पास एक ही स्थिति है, मेरे पास एक डोमेन है जो बाहरी और आंतरिक रूप से उपयोग किया जाता है, और मेरे पास बाहरी स्थिर और गतिशील होस्ट हैं। केवल वास्तव में दर्दनाक वाले बाहरी गतिशील हैं। समाधान संभवतः सबसे सुंदर नहीं है, लेकिन एक छोटी स्क्रिप्ट के साथ लागू करने योग्य है। ज्यादातर मैं अपने गतिशील DNS प्रदाता के एपीआई के साथ अपनी खुद की गतिशील DNS स्क्रिप्ट कर रहा हूं, मैं क्रोन द्वारा इस स्क्रिप्ट को चलाता हूं, हर 5 मिनट में:

1) मेरा बाहरी आईपी प्राप्त करें। क्या यह बदल गया है? बाहर जाने का कोई मार्ग नहीं।

2) बदल आईपी, नए आईपी पते के साथ dyndns- प्रदाता के एपीआई कॉल,

3) बाहरी आईपी के साथ db.mydomain.com को सीड करें

4) बाँध को फिर से शुरू करें।

मेरे घरेलू नेटवर्क के लिए बहुत मज़बूती से काम करता है


एक ही प्रक्रिया मेरे द्वारा की गई। हमारे विकी चुपके नाम सर्वर में विवरण प्राप्त करें । लेकिन dyn.dev.shahed.bizवर्ल्ड वाइड से हल करने में असमर्थ ! क्या आप कृपया इस समस्या को हल करने में हमारी मदद करेंगे?
एमडी शाहिद हुसैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.