HTTPS (DoH) এর উপর DNS এর জন্য JSON API

পূর্বে, ওয়েব-ভিত্তিক অ্যাপ্লিকেশনগুলির জন্য উন্নত DNS বৈশিষ্ট্যগুলি যেমন DANE , DNS-SD পরিষেবা আবিষ্কার বা এমনকি IP ঠিকানাগুলি ছাড়া অন্য কিছুর সমাধান করার জন্য ব্রাউজার এক্সটেনশনের প্রয়োজন ছিল - যেমন MX রেকর্ড। SSHFP রেকর্ডের মতো DNSSEC-নির্ভর বৈশিষ্ট্যগুলি ব্যবহার করার জন্য, এই ধরনের যেকোনো এক্সটেনশনকে DNSSEC নিজেদেরই যাচাই করতে হবে, কারণ ব্রাউজার বা OS তা নাও করতে পারে।

2016 সাল থেকে, Google পাবলিক DNS DNSSEC বৈধতা সহ DoH-এর জন্য একটি ওয়েব-বান্ধব API অফার করেছে যার জন্য ব্রাউজার বা OS কনফিগারেশন বা এক্সটেনশনের প্রয়োজন নেই। সাধারণ GET ক্যোয়ারী প্যারামিটার এবং JSON প্রতিক্রিয়া ক্লায়েন্টদের সাধারণ ওয়েব API ব্যবহার করে ফলাফল পার্স করতে এবং ডোমেন নামের জন্য পয়েন্টার কম্প্রেশনের মতো জটিল DNS বার্তা বিন্যাস বিবরণ এড়াতে দেয়।

সাধারণভাবে DoH সম্পর্কে তথ্যের জন্য সাধারণ DoH ডকুমেন্টেশন পৃষ্ঠাটি দেখুন, যেমন HTTP হেডার, রিডাইরেক্ট হ্যান্ডলিং, গোপনীয়তার সেরা অনুশীলন এবং HTTP স্ট্যাটাস কোড।

সিকিউর ট্রান্সপোর্টস পৃষ্ঠায় DoH-এর জন্য curl কমান্ড লাইন উদাহরণ রয়েছে এবং TLS (DoT) এর উপর DoH এবং DNS-এর জন্য সাধারণ তথ্য রয়েছে, যেমন TLS সমর্থন এবং DNS ছেঁটে ফেলা।

JSON API স্পেসিফিকেশন

সমস্ত API কল হল HTTP GET অনুরোধ৷ ডুপ্লিকেট প্যারামিটারের ক্ষেত্রে, শুধুমাত্র প্রথম মান ব্যবহার করা হয়।

সমর্থিত পরামিতি

নাম

স্ট্রিং, প্রয়োজনীয়

শুধুমাত্র প্রয়োজনীয় প্যারামিটার। RFC 4343 ব্যাকস্ল্যাশ এস্কেপ গ্রহণ করা হয়।

  • দৈর্ঘ্য (ব্যাকস্ল্যাশ এস্কেপ প্রতিস্থাপনের পরে) অবশ্যই 1 থেকে 253 এর মধ্যে হতে হবে (উপস্থিত থাকলে একটি ঐচ্ছিক ট্রেলিং ডট উপেক্ষা করে)।
  • সমস্ত লেবেল (বিন্দুর মধ্যে নামের অংশগুলি) 1 থেকে 63 বাইট দীর্ঘ হতে হবে৷
  • .example.com , example..com বা খালি স্ট্রিং এর মত অবৈধ নাম 400 খারাপ অনুরোধ পান।
  • নন-ASCII অক্ষরগুলিকে punycoded করা উচিত ( xn--qxam , ελ নয়)।
টাইপ

স্ট্রিং, ডিফল্ট: 1

RR টাইপকে [1, 65535] বা ক্যানোনিকাল স্ট্রিং (কেস-সংবেদনশীল, যেমন A বা aaaa ) এ একটি সংখ্যা হিসাবে উপস্থাপন করা যেতে পারে। আপনি 'যেকোনো' প্রশ্নের জন্য 255 ব্যবহার করতে পারেন তবে সচেতন থাকুন যে এটি A এবং AAAA বা MX রেকর্ড উভয়ের জন্য প্রশ্ন পাঠানোর প্রতিস্থাপন নয় । প্রামাণিক নাম সার্ভারের এই ধরনের প্রশ্নের জন্য সমস্ত রেকর্ড ফেরত দিতে হবে না; কেউ কেউ সাড়া দেয় না, এবং অন্যরা (যেমন cloudflare.com) শুধুমাত্র HINFO ফেরত দেয়।

সিডি

বুলিয়ান, ডিফল্ট: false

সিডি (অক্ষম পরীক্ষা করা) পতাকা। DNSSEC বৈধতা নিষ্ক্রিয় করতে cd=1 , অথবা cd=true ব্যবহার করুন; DNSSEC বৈধতা সক্ষম করতে cd=0 , cd=false , বা no cd প্যারামিটার ব্যবহার করুন।

ct

স্ট্রিং, ডিফল্ট: খালি

পছন্দসই সামগ্রী প্রকার বিকল্প। JSON পাঠ্যের পরিবর্তে প্রতিক্রিয়া HTTP বডিতে একটি বাইনারি DNS বার্তা পেতে ct=application/dns-message ব্যবহার করুন। JSON পাঠ্যের জন্য স্পষ্টভাবে অনুরোধ করতে ct=application/x-javascript ব্যবহার করুন। অন্যান্য বিষয়বস্তুর প্রকার মান উপেক্ষা করা হয় এবং ডিফল্ট JSON সামগ্রী ফেরত দেওয়া হয়।

করতে

বুলিয়ান, ডিফল্ট: false

DO (DNSSEC OK) পতাকা। DNSSEC রেকর্ড অন্তর্ভুক্ত করতে do=1 , অথবা do=true ব্যবহার করুন (RRSIG, NSEC, NSEC3); DNSSEC রেকর্ড বাদ দিতে do=0 , do=false বা no do প্যারামিটার ব্যবহার করুন।

অ্যাপ্লিকেশনগুলিকে সর্বদা JSON প্রতিক্রিয়াগুলিতে কোনও DNSSEC রেকর্ডগুলি পরিচালনা করা উচিত (এবং প্রয়োজনে উপেক্ষা করা উচিত) কারণ অন্যান্য প্রয়োগগুলি সর্বদা সেগুলি অন্তর্ভুক্ত করতে পারে এবং আমরা ভবিষ্যতে JSON প্রতিক্রিয়াগুলির জন্য ডিফল্ট আচরণ পরিবর্তন করতে পারি৷ (বাইনারী DNS বার্তার প্রতিক্রিয়া সর্বদা DO পতাকার মানকে সম্মান করে।)

edns_client_subnet

স্ট্রিং, ডিফল্ট: খালি

edns0-ক্লায়েন্ট-সাবনেট বিকল্প। বিন্যাস হল একটি সাবনেট মাস্ক সহ একটি IP ঠিকানা। উদাহরণ: 1.2.3.4/24 , 2001:700:300::/48

আপনি যদি গোপনীয়তার উদ্বেগের কারণে DNS-ওভার-HTTPS ব্যবহার করেন এবং ভৌগলিক অবস্থান নির্ভুলতার জন্য আপনার IP ঠিকানার কোনো অংশ প্রামাণিক নাম সার্ভারে পাঠানো না চান, edns_client_subnet=0.0.0.0/0 ব্যবহার করুন। Google পাবলিক DNS সাধারণত আনুমানিক নেটওয়ার্ক তথ্য পাঠায় (সাধারণত আপনার IPv4 ঠিকানার শেষ অংশকে শূন্য করে)।

এলোমেলো_প্যাডিং

স্ট্রিং, উপেক্ষা করা

এই প্যারামিটারের মান উপেক্ষা করা হয়। উদাহরণ: XmkMw~o_mgP2pf.gpw-Oi5dK

HTTPS GET অনুরোধের প্যাকেট আকার ব্যবহার করে সম্ভাব্য পার্শ্ব-চ্যানেল গোপনীয়তা আক্রমণ সম্পর্কে উদ্বিগ্ন API ক্লায়েন্টরা র্যান্ডম ডেটা সহ প্যাডিং অনুরোধের মাধ্যমে সমস্ত অনুরোধকে ঠিক একই আকারের করতে এটি ব্যবহার করতে পারে। URL-এর ভুল ব্যাখ্যা রোধ করতে, প্যাডিং অক্ষরগুলিকে অসংরক্ষিত URL অক্ষরগুলিতে সীমাবদ্ধ করুন: বড়- এবং ছোট হাতের অক্ষর, সংখ্যা, হাইফেন, পিরিয়ড, আন্ডারস্কোর এবং টিল্ড।

JSON-এ DNS প্রতিক্রিয়া

একটি সফল প্রতিক্রিয়া (এখানে যোগ করা মন্তব্যগুলি প্রকৃত প্রতিক্রিয়াগুলিতে উপস্থিত নয়):

{
  "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
}

"স্কোপ প্রিফিক্স-লেংথ" এবং এটি কীভাবে ক্যাশিংকে প্রভাবিত করে সে সম্পর্কে বিশদ বিবরণের জন্য RFC 7871 (EDNS ক্লায়েন্ট সাবনেট) দেখুন।

ডায়গনিস্টিক তথ্য সহ একটি ব্যর্থ প্রতিক্রিয়া:

{
  "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
    }
  ],
}

DNS স্ট্রিং

RFC 4408 (SPF) বা RFC 4871 (DKIM) এর মতো দীর্ঘ TXT রেকর্ড ফরম্যাটের ব্যবহার সহ সমস্ত TXT রেকর্ডগুলি একক JSON স্ট্রিং হিসাবে এনকোড করা হয়েছে।

EDNS

সাধারণ EDNS এক্সটেনশন মেকানিজম সমর্থিত নয়। EDNS ক্লায়েন্ট সাবনেট বিকল্প (edns-client-subnet) হল GET অনুরোধের একটি প্যারামিটার এবং JSON প্রতিক্রিয়াতে একটি শীর্ষ স্তরের ক্ষেত্র৷