नकारात्मक डीएनएस कैशिंग आमतौर पर कितने समय तक रहता है?


44

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


जवाबों:


60

नकारात्मक कैशिंग के लिए टीटीएल मनमाना नहीं है। यह SOA रिकॉर्ड से उस ज़ोन के शीर्ष पर लिया जाता है जिसमें अनुरोधित रिकॉर्ड होता था, उसका अस्तित्व था। उदाहरण के लिए:

example.org.    IN      SOA     master-ns1.example.org. Hostmaster.example.org. (
            2012091201 43200 1800 1209600 86400 )

SOA रिकॉर्ड ("86400") में अंतिम मान ग्राहकों द्वारा नकारात्मक परिणामों को कैश करने के लिए कहा जाता है example.org.

यदि कोई ग्राहक अनुरोध करता है doesnotexist.example.org., तो यह परिणाम को 86400 सेकंड के लिए कैश करेगा।


1
@MarcusAdams ... और एक ग्राहक SERVFAIL पर किसी भी रिकॉर्ड को नकारात्मक-कैश नहीं करेगा। SOA रिकॉर्ड में TTL वास्तव में, नकारात्मक कैशिंग के लिए उपयोग किया जाता है। यही कारण है कि SOA रिकॉर्ड NXDOMAIN उत्तरों में निर्मित होता है।
सेलडा

3
@MarcusAdams सही। यदि आपको एक SERVFAIL मिलता है तो आपको SOA और न ही TTL नहीं मिलता है। आपके लिए नकारात्मक-कैश का कोई जवाब नहीं है। यदि इसके बजाय आपको एक टीएएल के साथ एक SOA मिलता है, तो आपको एक NXDOMAIN मिलता है। आप नकारात्मक-कैश करेंगे जो TTL की अवधि के लिए प्रतिक्रिया करते हैं।
सेलडा

डीएनएस आरबीएल उपयोगकर्ताओं के लिए बेयरट्रैप: चूंकि आरबीएल उत्तर न्यूनतम होते हैं (और डीएनएस सर्वर कार्यान्वयन संभवतः गैर-अनुरूपण), आपको एनएक्सडोमैन उत्तर के साथ एसओए नहीं मिल सकता है। इसका मतलब यह हो सकता है कि आपका DNS कैश NXDOMAIN (यानी गैर-स्पैमर्स) को कैश नहीं करता है: - /
mr.spuratic

यह वास्तव में है MIN(SOA TTL, SOA.MINIMUM), बस नहीं SOA.MINIMUM। (देखें tools.ietf.org/html/rfc2308#section-5 )
हकान Lindqvist

12

यह "नकारात्मक क्वेरी" की आपकी सटीक परिभाषा पर निर्भर करता है, लेकिन किसी भी स्थिति में, यह rfc2308 में लिखा जाता है «डीएनएस क्वेरी (डीएनएस NCACHE) की नकारात्मक कैशिंग» :


NXDOMAIN

  • यदि संकल्प सफल होता है, और परिणाम होता है NXDOMAIN, तो प्रतिक्रिया एक SOAरिकॉर्ड के साथ आएगी , जिसमें NXDOMAINटीटीएल (पारंपरिक रूप से MINIMUMक्षेत्र के रूप में जाना जाता है ) शामिल होगा। rfc2308#section-4

SERVFAIL

  • यदि रिज़ॉल्यूशन सफल नहीं है, और टाइमआउट ( SERVFAIL) में परिणाम होता है , तो यह बिल्कुल भी कैश नहीं किया जा सकता है, और सभी परिस्थितियों में 5 मिनट से अधिक समय तक कैश नहीं होना चाहिए। rfc2308#section-7.1

    ध्यान दें कि पूर्ण स्वीकार्य 5 मिनट के लिए इस तरह के परिणामों को कैशिंग करना एक क्लाइंट के अनुभव को कम करने का एक शानदार तरीका है कि उनके कैश सर्वर को कभी-कभी संक्षिप्त कनेक्टिविटी मुद्दों को पीड़ित करना चाहिए (और प्रभावी रूप से इसे इनकार करने योग्य सेवा-प्रवर्धन के लिए आसानी से कमजोर कर सकता है) जहां डाउनटाइम के कुछ सेकंड के परिणामस्वरूप डीएनएस के कुछ हिस्से पूरे पांच मिनट तक डाउन रहेंगे)।

    BIND से पहले 9.9.6-S1 (2014 में जारी), जाहिर है, SERVFAILबिल्कुल भी कैश नहीं किया गया था। a878301(2014-09-04)

    उदाहरण के लिए, आपके प्रश्न के समय और 2014 से पहले जारी किए गए BIND के सभी संस्करणों में, BIND पुनरावर्ती रिज़ॉल्वर DID SERVFAILबिल्कुल भी कैश नहीं है , यदि उपरोक्त प्रतिबद्ध और प्रलेखन 9.9.6-S1 में पहले परिचय के बारे में माना जाता है ।

    नवीनतम BIND में, डिफ़ॉल्ट servfail-ttlहै 1s, और सेटिंग को 30s(RFC- अनिवार्य छत के स्थान पर 300s) की छत तक हार्डकोड किया गया है । 90174e6(2015/10/17)

    इसके अलावा, निम्नलिखित मामले पर कुछ उल्लेखनीय उद्धरण हैं:

    SERVFAIL प्रतिक्रियाओं के कैशिंग के परिणामों में कुछ ऐसी स्थितियाँ शामिल हैं, जहाँ इसे ग्राहक के अनुभव के लिए हानिकारक माना जाता था, विशेषकर तब जब SERVFAIL के ग्राहक को प्रस्तुत किए जाने के कारण क्षणिक थे और एक ऐसे परिदृश्य से जहाँ क्वेरी की तत्काल पुनः प्राप्ति होगी। अधिक उचित कार्रवाई।

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


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


1

इस विषय को समर्पित एक RFC है: RFC 2308 - DNS Queries (DNS NCACHE) की नकारात्मक कैशिंग

पढ़ने के लिए प्रासंगिक अनुभाग 5 है - कैशिंग नकारात्मक उत्तर जो बताता है:

सामान्य उत्तरों की तरह नकारात्मक उत्तरों को जीने का समय (TTL) होता है। जैसा कि उत्तर खंड में कोई रिकॉर्ड नहीं है जिस पर यह टीटीएल लागू किया जा सकता है, टीटीएल को किसी अन्य विधि द्वारा किया जाना चाहिए। यह उत्तर के प्राधिकरण अनुभाग में क्षेत्र से SOA रिकॉर्ड को शामिल करके किया जाता है। जब आधिकारिक सर्वर इस रिकॉर्ड को बनाता है तो इसका टीटीएल न्यूनतम SOA.MINIMUM फ़ील्ड और SOA के TTL से लिया जाता है। यह टीटीएल एक सामान्य कैश्ड उत्तर के समान तरीके से घटता है और शून्य (0) तक पहुंचने पर कैश्ड नकारात्मक उत्तर को इंगित करता है कि फिर से उपयोग नहीं किया जाना चाहिए।

सबसे पहले SOA.MINIMUMRFC में वर्णित SOA TTL को पहचानने देता है । रिकॉर्ड प्रकार से पहले टीटीएल संख्या है IN( 900नीचे उदाहरण में सेकंड)। जबकि न्यूनतम रिकॉर्ड में अंतिम क्षेत्र है ( 86400नीचे उदाहरण में सेकंड)।

$ dig serverfault.com soa @ns-1135.awsdns-13.org +noall +answer +multiline

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> serverfault.com soa @ns-1135.awsdns-13.org +noall +answer +multiline
;; global options: +cmd
serverfault.com.    900 IN SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. (
                1          ; serial
                7200       ; refresh (2 hours)
                900        ; retry (15 minutes)
                1209600    ; expire (2 weeks)
                86400      ; minimum (1 day)
                )

अब कुछ उदाहरणों को देखते हैं, यह serverfault.comक्षेत्र चित्रमय है क्योंकि इसमें दो अलग-अलग प्रदाताओं से आधिकारिक सर्वर हैं जो अलग-अलग कॉन्फ़िगर किए गए हैं।

इस serverfault.comक्षेत्र के लिए आधिकारिक नेमवर्कर्स ढूंढने दें :

$ host -t ns serverfault.com
serverfault.com name server ns-860.awsdns-43.net.
serverfault.com name server ns-1135.awsdns-13.org.
serverfault.com name server ns-cloud-c1.googledomains.com.
serverfault.com name server ns-cloud-c2.googledomains.com.

उसके बाद SOA रिकॉर्डर का उपयोग करके SOA रिकॉर्ड की जाँच करें:

$ dig serverfault.com soa @ns-1135.awsdns-13.org | grep 'ANSWER SECTION' -A 1
;; ANSWER SECTION:
serverfault.com.    900 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

इससे हम देख सकते हैं कि SOA रिकॉर्ड का 900TTL सेकंड है जबकि नकारात्मक TTL मान 86400सेकंड है। SOA TTL मान 900कम है, इसलिए हम इस मान का उपयोग करने की अपेक्षा करते हैं।

अब यदि हम एक गैर-मौजूद डोमेन के लिए एक आधिकारिक सर्वर को क्वेरी करते हैं, तो हमें उत्तर के बिना और प्राधिकरण प्राधिकरण में SOA रिकॉर्ड के साथ प्रतिक्रिया प्राप्त करनी चाहिए:

$ dig nxdomain.serverfault.com @ns-1135.awsdns-13.org

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> nxdomain.serverfault.com @ns-1135.awsdns-13.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 51948
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nxdomain.serverfault.com.  IN  A

;; AUTHORITY SECTION:
serverfault.com.    900 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 125 msec
;; SERVER: 205.251.196.111#53(205.251.196.111)
;; WHEN: Tue Aug 20 15:49:47 NZST 2019
;; MSG SIZE  rcvd: 135

जब एक पुनरावर्ती (कैशिंग) रिज़ॉल्वर को यह उत्तर मिलता है तो यह SOA रिकॉर्ड को पार्स कर देगा AUTHORITY SECTIONऔर इस रिकॉर्ड के TTL का उपयोग यह निर्धारित करने के लिए करेगा कि यह कितने समय तक नकारात्मक परिणाम (इस मामले में 900सेकंड) को कैश करना चाहिए ।

अब Google नेमवेर के साथ समान प्रक्रिया का पालन करें:

$ dig serverfault.com soa @ns-cloud-c2.googledomains.com | grep 'ANSWER SECTION' -A 1
;; ANSWER SECTION:
serverfault.com.    21600   IN  SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300

आप देख सकते हैं कि Google नेमसर्वरों के पास SOA TTL और नकारात्मक TTL मान दोनों के लिए अलग-अलग मान हैं। इस मामले में नकारात्मक TTL 300SOA TTL की तुलना में कम है 21600। इसलिए प्रतिक्रिया देते AUTHORITY SECTIONसमय Google सर्वर को SOA रिकॉर्ड में निम्न मान का उपयोग करना चाहिए NXDOMAIN:

$ dig nxdomain.serverfault.com @ns-cloud-c2.googledomains.com

; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> nxdomain.serverfault.com @ns-cloud-c2.googledomains.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 25920
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;nxdomain.serverfault.com.  IN  A

;; AUTHORITY SECTION:
serverfault.com.    300 IN  SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300

;; Query time: 130 msec
;; SERVER: 216.239.34.108#53(216.239.34.108)
;; WHEN: Tue Aug 20 16:05:24 NZST 2019
;; MSG SIZE  rcvd: 143

जैसा कि अपेक्षित था कि NXDOMAINप्रतिक्रिया में SOA रिकॉर्ड का TTL 300सेकंड है।

ऊपर दिए गए उदाहरण से यह भी पता चलता है कि एक ही क्वेरी के विभिन्न उत्तर प्राप्त करना कितना आसान है। एक व्यक्तिगत कैचिंग रिज़ॉल्वर का उपयोग करने पर समाप्त होने वाला उत्तर आधिकारिक नामर्ज़र से नीचे दिया गया था।

अपने परीक्षण में मैंने यह भी देखा है कि कुछ पुनरावर्ती (कैशिंग) रिज़ॉल्वर AUTHORITY SECTIONएसओए रिकॉर्ड के साथ एक बाद के अनुरोधों के लिए एक डीटीआरईटी के साथ वापस नहीं आते हैं जबकि अन्य करते हैं।

उदाहरण के लिए क्लाउडफ्लेयर रिज़ॉल्वर करता है (टीटीएल मान को घटाता है):

$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    674 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    668 IN  SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

जबकि AWS VPC में डिफ़ॉल्ट रिज़ॉल्वर केवल पहले अनुरोध पर एक प्राधिकरण अनुभाग के साथ जवाब देगा:

$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com.    300 IN  SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1 | wc -l
0

नोट: यह उत्तर NXDOMAINउत्तरों के व्यवहार को संबोधित करता है।

शब्दावली:

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