एचटीटीपीएस पर डीएनएस के लिए JSON एपीआई (DoH)

पहले, बेहतर सेटिंग का इस्तेमाल करने के लिए वेब पर आधारित ऐप्लिकेशन को ब्राउज़र एक्सटेंशन की ज़रूरत होती थी डीएनएस की सुविधाएं, जैसे कि DANE, डीएनएस-एसडी सेवा डिस्कवरी या इन्हें हल करने के लिए भी ऐसा किया जा सकता है आईपी पतों के अलावा अन्य किसी भी ईमेल पते का इस्तेमाल कर सकते हैं – जैसे कि MX रिकॉर्ड. डीएनएसएसईसी पर आधारित सुविधाओं का इस्तेमाल करने के लिए, जैसे कि SSHFP रिकॉर्ड, ऐसे कोई भी एक्सटेंशन को डीएनएसएसईसी की पुष्टि खुद करनी होगी, क्योंकि हो सकता है कि ब्राउज़र या ओएस ऐसा न कर पाए.

साल 2016 से, Google की सार्वजनिक डीएनएस सेवा ने डीएनएसएसईसी के साथ, DoH के लिए वेब-फ़्रेंडली एपीआई उपलब्ध कराया है पुष्टि के लिए जिसे ब्राउज़र या ओएस कॉन्फ़िगरेशन या एक्सटेंशन की ज़रूरत नहीं होती. सामान्य जीईटी क्वेरी पैरामीटर और JSON रिस्पॉन्स, क्लाइंट को सामान्य वेब एपीआई का इस्तेमाल करके नतीजे पाएं. साथ ही, डीएनएस मैसेज फ़ॉर्मैट की इस तरह की जानकारी से बचें डोमेन नेम के लिए पॉइंटर कंप्रेस करना.

डीओएच के बारे में जानकारी पाने के लिए, डीओएच से जुड़े दस्तावेज़ का सामान्य पेज देखें आम तौर पर, एचटीटीपी हेडर, रीडायरेक्ट हैंडलिंग, निजता के सबसे सही तरीके, और एचटीटीपी स्टेटस कोड.

सुरक्षित परिवहन पेज पर DoH के लिए curl कमांड लाइन के उदाहरण और DoH और डीएनएस ओवर के लिए सामान्य जानकारी TLS (DoT) जैसे, TLS सहायता और डीएनएस काट-छांट.

JSON API की खास बातें

सभी एपीआई कॉल, एचटीटीपी GET अनुरोध हैं. डुप्लीकेट पैरामीटर के मामले में, सिर्फ़ पहली वैल्यू का इस्तेमाल किया जाता है.

काम करने वाले पैरामीटर

नाम

स्ट्रिंग, ज़रूरी है

सिर्फ़ ज़रूरी पैरामीटर. आरएफ़सी 4343 बैकस्लैश एस्केप स्वीकार किए जाते हैं.

  • बैकस्लैश एस्केप को बदलने के बाद, लंबाई 1 और के बीच होनी चाहिए 253 (अगर मौजूद हो, तो वैकल्पिक ट्रेलिंग बिंदु को अनदेखा करना).
  • सभी लेबल (बिंदुओं के बीच के नाम के हिस्से) 1 से 63 बाइट लंबे होने चाहिए.
  • .example.com, example..com या खाली स्ट्रिंग जैसे अमान्य नाम मिलते हैं 400 गलत अनुरोध.
  • बिना ASCII वाले वर्ण punycode में होने चाहिए (xn--qxam, ελ नहीं).
टाइप

स्ट्रिंग, डिफ़ॉल्ट: 1

RR टाइप को [1, 65535] में संख्या या कैननिकल स्ट्रिंग के तौर पर दिखाया जा सकता है (केस-इनसेंसिटिव, जैसे कि A या aaaa). 'किसी भी' के लिए 255 का इस्तेमाल किया जा सकता है लेकिन ध्यान रखें कि यह एक नहीं है A और AAAA या MX, दोनों रिकॉर्ड के लिए क्वेरी भेजने की जगह इस्तेमाल करना. आधिकारिक नाम सर्वर को ऐसी क्वेरी के लिए सभी रिकॉर्ड नहीं लौटाने चाहिए; कुछ जवाब नहीं देते और अन्य (जैसे cloudflare.com) सिर्फ़ HINFO दिखाते हैं.

cd

बूलियन, डिफ़ॉल्ट: false

सीडी (जांच की जा रही है) फ़्लैग. डीएनएसएसईसी की पुष्टि की सुविधा को बंद करने के लिए, cd=1 या cd=true का इस्तेमाल करें; डीएनएसएसईसी की पुष्टि करने की सुविधा को चालू करने के लिए, cd=0, cd=false या कोई cd पैरामीटर नहीं इस्तेमाल करें.

आइटम

स्ट्रिंग, डिफ़ॉल्ट: खाली

पसंदीदा कॉन्टेंट टाइप का विकल्प. इसमें बाइनरी डीएनएस मैसेज पाने के लिए ct=application/dns-message का इस्तेमाल करें JSON टेक्स्ट की जगह रिस्पॉन्स एचटीटीपी बॉडी. JSON टेक्स्ट का साफ़ तौर पर अनुरोध करने के लिए, ct=application/x-javascript का इस्तेमाल करें. कॉन्टेंट टाइप की अन्य वैल्यू को नज़रअंदाज़ किया जाता है और डिफ़ॉल्ट JSON कॉन्टेंट दिखाया जाता है.

do

बूलियन, डिफ़ॉल्ट: false

ऐसा करें (डीएनएसएसईसी ओके) फ़्लैग. डीएनएसएसईसी रिकॉर्ड (RRSIG, NSEC, NSEC3) को शामिल करने के लिए, do=1 या do=true का इस्तेमाल करें; डीएनएसएसईसी रिकॉर्ड को छोड़ने के लिए, do=0, do=false या किसी do पैरामीटर का इस्तेमाल न करें.

ऐप्लिकेशन को हमेशा किसी भी डीएनएसएसईसी को हैंडल करना चाहिए और अगर ज़रूरी हो, तो इसे अनदेखा करना चाहिए रिकॉर्ड करते हैं, क्योंकि अन्य तरीकों में वे हमेशा शामिल हो सकते हैं, साथ ही, हम आने वाले समय में JSON के रिस्पॉन्स का डिफ़ॉल्ट तरीका बदल सकते हैं. (बाइनरी डीएनएस मैसेज के जवाब हमेशा डीओ फ़्लैग की वैल्यू के हिसाब से होते हैं.)

edns_client_subnet

स्ट्रिंग, डिफ़ॉल्ट: खाली

edns0-client-subnet का विकल्प. फ़ॉर्मैट, सबनेट मास्क वाला आईपी पता होता है. उदाहरण: 1.2.3.4/24, 2001:700:300::/48.

अगर निजता से जुड़ी समस्याओं की वजह से, डीएनएस-ओवर-एचटीटीपीएस का इस्तेमाल किया जा रहा है, तो आपके आईपी पते का कोई भी हिस्सा, आधिकारिक नाम सर्वर को भेजा जाएगा भौगोलिक स्थान की सटीक जानकारी के लिए, edns_client_subnet=0.0.0.0/0 का इस्तेमाल करें. Google की सार्वजनिक डीएनएस सेवा आम तौर पर, नेटवर्क की अनुमानित जानकारी भेजती है (आम तौर पर, आपके IPv4 पते के आखिरी हिस्से को शून्य किया जाता है).

random_padding

स्ट्रिंग, अनदेखा किया गया

इस पैरामीटर की वैल्यू को अनदेखा किया जाता है. उदाहरण: XmkMw~o_mgP2pf.gpw-Oi5dK.

ऐसे एपीआई क्लाइंट जो साइड-चैनल निजता हमले को लेकर चिंतित हैं. इसमें वे एचटीटीपीएस जीईटी अनुरोधों के पैकेट साइज़ का इस्तेमाल करके, इसका इस्तेमाल रैंडम डेटा के साथ पैडिंग अनुरोधों के अनुसार समान आकार. यूआरएल को गलत तरीके से समझने के लिए, पैडिंग वर्णों पर पाबंदी लगाएं को असुरक्षित यूआरएल वर्णों में बदल दें: अपर और लोअर केस के अक्षर, अंक, हाइफ़न, पीरियड, अंडरस्कोर, और टिल्ड.

JSON में डीएनएस रिस्पॉन्स

सफल जवाब (यहां जोड़ी गई टिप्पणियां, असल जवाबों में मौजूद नहीं हैं):

{
  "Status": 0,  // NOERROR - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question":
  [
    {
      "name": "apple.com.",  // FQDN with trailing dot
      "type": 1              // A - Standard DNS RR type
    }
  ],
  "Answer":
  [
    {
      "name": "apple.com.",   // Always matches name in the Question section
      "type": 1,              // A - Standard DNS RR type
      "TTL": 3599,            // Record's time-to-live in seconds
      "data": "17.178.96.59"  // Data for A - IP address as text
    },
    {
      "name": "apple.com.",
      "type": 1,
      "TTL": 3599,
      "data": "17.172.224.47"
    },
    {
      "name": "apple.com.",
      "type": 1,
      "TTL": 3599,
      "data": "17.142.160.59"
    }
  ],
  "edns_client_subnet": "12.34.56.78/0"  // IP address / scope prefix-length
}

इनके लिए आरएफ़सी 7871 (ईडीएनएस क्लाइंट सबनेट) देखें इसमें “स्कोप प्रीफ़िक्स की लंबाई” के बारे में जानकारी दी गई है. साथ ही, यह भी बताया गया है कि इससे कैश मेमोरी पर क्या असर पड़ता है.

गड़बड़ी की जांच से जुड़ी जानकारी:

{
  "Status": 2,  // SERVFAIL - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question":
  [
    {
      "name": "dnssec-failed.org.",  // FQDN with trailing dot
      "type": 1                      // A - Standard DNS RR type
    }
  ],
  "Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/."
}

एम्बेड किए गए कोट और नाम सर्वर एट्रिब्यूशन के साथ SPF और TXT रिकॉर्ड:

{
  "Status": 0,  // NOERROR - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question": [
    {
      "name": "*.dns-example.info.",  // FQDN with trailing dot
      "type": 99                      // SPF - Standard DNS RR type
    }
  ],
  "Answer": [
    {
      "name": "*.dns-example.info.",   // Always matches name in Question
      "type": 99,                      // SPF - Standard DNS RR type
      "TTL": 21599,                    // Record's time-to-live in seconds
      "data": "\"v=spf1 -all\""        // Data for SPF - quoted string
    }
  ],
  "Comment": "Response from 216.239.38.110"
  // Uncached responses are attributed to the authoritative name server
}

{
  "Status": 0,  // NOERROR - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question": [
    {
      "name": "s1024._domainkey.yahoo.com.", // FQDN with trailing dot
      "type": 16                             // TXT - Standard DNS RR type
    }
  ],
  "Answer": [
    {
      "name": "s1024._domainkey.yahoo.com.", // Always matches Question name
      "type": 16,                            // TXT - Standard DNS RR type
      "data": "\"k=rsa;  p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm\"\"JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;\""
      // Data for TXT - multiple quoted strings
    }
  ],
}

डीएनएस स्ट्रिंग

सभी TXT रिकॉर्ड, एक JSON स्ट्रिंग के तौर पर एन्कोड किए जाते हैं. इसमें लंबे TXT रिकॉर्ड भी इस्तेमाल होते हैं रिकॉर्ड प्रारूप जैसे आरएफ़सी 4408 (SPF) या आरएफ़सी 4871 (DKIM).

ईडीएनएस

सामान्य Eडीएनएस एक्सटेंशन मैकेनिज़्म काम नहीं करता. ईडीएनएस क्लाइंट सबनेट विकल्प (edns-client-subnet) जीईटी अनुरोध और JSON के रिस्पॉन्स में टॉप लेवल फ़ील्ड.