DNS এর জন্য নিরাপদ পরিবহন

প্রথাগত ডিএনএস প্রশ্ন এবং উত্তরগুলি এনক্রিপশন ছাড়াই UDP বা TCP-এর মাধ্যমে পাঠানো হয়, যা তাদের নজরদারি, স্পুফিং এবং ডিএনএস-ভিত্তিক ইন্টারনেট ফিল্টারিংয়ের বিষয় করে তোলে। Google পাবলিক ডিএনএস-এর মতো পাবলিক রেজোলিউরদের কাছ থেকে ক্লায়েন্টদের প্রতিক্রিয়া বিশেষ করে এটির জন্য ঝুঁকিপূর্ণ, কারণ বার্তাগুলি অনেক নেটওয়ার্কের মধ্য দিয়ে যেতে পারে, যখন পুনরাবৃত্ত সমাধানকারী এবং প্রামাণিক নাম সার্ভারের মধ্যে বার্তাগুলি প্রায়ই অতিরিক্ত সুরক্ষা অন্তর্ভুক্ত করে।

এই সমস্যাগুলি সমাধান করার জন্য, 2016 সালে আমরা HTTPS (এখন DoH বলা হয়) এর উপর DNS চালু করেছি যা HTTPS এবং QUIC-এর উপর এনক্রিপ্ট করা DNSSEC-বৈরীকরণ DNS রেজোলিউশন অফার করে। এবং 2019 সালে, আমরা Android প্রাইভেট DNS বৈশিষ্ট্য দ্বারা ব্যবহৃত TLS (DoT) স্ট্যান্ডার্ডের জন্য DNS-এর জন্য সমর্থন যোগ করেছি

DoH এবং DoT ক্লায়েন্ট এবং সমাধানকারীদের মধ্যে গোপনীয়তা এবং নিরাপত্তা বাড়ায়, DNSSEC-এর Google পাবলিক DNS বৈধতাকে পরিপূরক করে DNSSEC-স্বাক্ষরিত ডোমেনের জন্য এন্ড-টু-এন্ড প্রমাণীকৃত DNS প্রদান করে। Google পাবলিক DNS-এর সাথে, আমরা DoH এবং DoT ক্লায়েন্ট উভয়ের জন্য দ্রুত, ব্যক্তিগত, এবং নিরাপদ DNS রেজোলিউশন প্রদান করতে প্রতিশ্রুতিবদ্ধ।

TLS সংস্করণ এবং ক্রিপ্টো স্যুট সমর্থিত

Google পাবলিক DNS DoH এবং DoT উভয়ের জন্য TLS 1.2 এবং TLS 1.3 সমর্থন করে; TLS বা SSL এর কোনো পূর্ববর্তী সংস্করণ সমর্থিত নয়। শুধুমাত্র ফরোয়ার্ড নিরাপত্তা সহ সাইফার স্যুট এবং অতিরিক্ত ডেটা (AEAD) সহ প্রমাণীকৃত এনক্রিপশন সমর্থিত। Qualys SSL Labs সমর্থিত সাইফার স্যুটগুলির বর্তমান সেট দেখায়৷

শেষবিন্দু

Google পাবলিক DNS DoH এবং DoT-এর জন্য নিম্নলিখিত এন্ডপয়েন্ট ব্যবহার করে:

DoT (পোর্ট 853) dns.google

DoH (পোর্ট 443) URI টেমপ্লেট

  • RFC 8484 – https://dns.google/dns-query{?dns}

    • পোস্টের জন্য URLটি হল শুধু https://dns.google/dns-query এবং HTTP অনুরোধের মূল অংশ হল কন্টেন্ট টাইপ অ্যাপ্লিকেশন/dns-message সহ বাইনারি UDP DNS পেলোড।
    • পাওয়ার জন্য এটি হল https://dns.google/dns-query?dns= BASE64URL_OF_QUERY
  • JSON API – https://dns.google/resolve{?name}{&type,cd,do,…}

    • আরও GET প্যারামিটার JSON API পৃষ্ঠায় বর্ণনা করা হয়েছে। শুধুমাত্র name পরামিতি প্রয়োজন.

ক্লায়েন্ট

এমন অনেকগুলি ক্লায়েন্ট অ্যাপ্লিকেশন রয়েছে যা DoT বা DoH ব্যবহার করে

  • অ্যান্ড্রয়েড 9 (পাই) "প্রাইভেট ব্রাউজিং" বৈশিষ্ট্য – DoT
  • ইন্ট্রা (অ্যান্ড্রয়েড অ্যাপ) - DoH

dnsprivacy.org ওয়েবসাইটটি DoT এবং DoH-এর জন্য অন্যান্য ক্লায়েন্টদের তালিকা করে, কিন্তু এগুলোর জন্য সাধারণত মাঝারিভাবে প্রযুক্তিগত কনফিগারেশন প্রয়োজন।

কমান্ড লাইন উদাহরণ

নিম্নলিখিত কমান্ড-লাইন উদাহরণগুলি প্রকৃত ক্লায়েন্টে ব্যবহারের উদ্দেশ্যে নয় এবং সাধারণভাবে উপলব্ধ ডায়াগনস্টিক সরঞ্জামগুলি ব্যবহার করে নিছক চিত্র।

DoT

নিম্নলিখিত কমান্ডগুলির জন্য Knot DNS kdig 2.3.0 বা পরবর্তী সংস্করণ প্রয়োজন; 2.7.4 বা পরবর্তীতে, TLS 1.3 দ্বারা প্রয়োজনীয় SNI পাঠাতে +tls‑sni মন্তব্য করুন।

kdig -d +noall +answer @dns.google example.com \
  +tls-ca +tls-hostname=dns.google # +tls-sni=dns.google
;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(dns.google), port(853), protocol(TCP)
;; DEBUG: TLS, imported 312 system certificates
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=California,L=Mountain View,O=Google LLC,CN=dns.google
;; DEBUG:      SHA-256 PIN: lQXSLnWzUdueQ4+YCezIcLa8L6RPr8Wgeqtxmw1ti+M=
;; DEBUG:  #2, C=US,O=Google Trust Services,CN=Google Internet Authority G3
;; DEBUG:      SHA-256 PIN: f8NnEFZxQ4ExFOhSN7EiFWtiudZQVD2oY60uauV/n78=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.

;; ANSWER SECTION:
example.com.            2046    IN      A       93.184.216.34
kdig -d +noall +answer @dns.google example.com \
  +tls-pin=f8NnEFZxQ4ExFOhSN7EiFWtiudZQVD2oY60uauV/n78= \
  # +tls-sni=dns.google
;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(dns.google), port(853), protocol(TCP)
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=California,L=Mountain View,O=Google LLC,CN=dns.google
;; DEBUG:      SHA-256 PIN: lQXSLnWzUdueQ4+YCezIcLa8L6RPr8Wgeqtxmw1ti+M=
;; DEBUG:  #2, C=US,O=Google Trust Services,CN=Google Internet Authority G3
;; DEBUG:      SHA-256 PIN: f8NnEFZxQ4ExFOhSN7EiFWtiudZQVD2oY60uauV/n78=, MATCH
;; DEBUG: TLS, skipping certificate verification

;; ANSWER SECTION:
example.com.            5494    IN      A       93.184.216.34

DoH

আরএফসি 8484 পোস্ট

এই কমান্ডের Base64Url এনকোড করা স্ট্রিং হল ডিএনএস বার্তা dig +noedns example.test A দ্বারা প্রেরিত ডিএনএস আইডি ফিল্ড শূন্যে সেট করে, যেমন RFC 8484 বিভাগ 4.1 দ্বারা সুপারিশ করা হয়েছে। শেল কমান্ডটি কনটেন্ট-টাইপ application/dns-message ব্যবহার করে বাইনারি ডেটা বডি কন্টেন্ট হিসেবে সেই DNS কোয়েরি পাঠায়।

echo AAABAAABAAAAAAAAB2V4YW1wbGUEdGVzdAAAAQAB | base64 --decode |
 curl -is --data-binary @- -H 'content-type: application/dns-message' \
   https://dns.google/dns-query
HTTP/2 200
strict-transport-security: max-age=31536000; includeSubDomains; preload
access-control-allow-origin: *
date: Wed, 29 May 2019 19:37:16 GMT
expires: Wed, 29 May 2019 19:37:16 GMT
cache-control: private, max-age=19174
content-type: application/dns-message
server: HTTP server (unknown)
content-length: 45
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"

RFC 8484 GET

এই কমান্ডের Base64Url এনকোড করা স্ট্রিং হল ডিএনএস বার্তাটি dig +noedns example.com A দ্বারা প্রেরিত ডিএনএস আইডি ক্ষেত্রটি শূন্যে সেট করে। এই ক্ষেত্রে এটি স্পষ্টভাবে URL এ পাস করা হয়.

curl -i https://dns.google/dns-query?dns=AAABAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE
HTTP/2 200
strict-transport-security: max-age=31536000; includeSubDomains; preload
access-control-allow-origin: *
date: Wed, 29 May 2019 19:37:16 GMT
expires: Wed, 29 May 2019 19:37:16 GMT
cache-control: private, max-age=19174
content-type: application/dns-message
server: HTTP server (unknown)
content-length: 45
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"

JSON পান

এটি DoH এর জন্য JSON API ব্যবহার করে।

curl -i 'https://dns.google/resolve?name=example.com&type=a&do=1'
HTTP/2 200
strict-transport-security: max-age=31536000; includeSubDomains; preload
access-control-allow-origin: *
date: Thu, 30 May 2019 02:46:46 GMT
expires: Thu, 30 May 2019 02:46:46 GMT
cache-control: private, max-age=10443
content-type: application/x-javascript; charset=UTF-8
server: HTTP server (unknown)
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"
accept-ranges: none
vary: Accept-Encoding

{"Status": 0,"TC": false,"RD": true,"RA": true,"AD": true,"CD": false,"Question":[ {"name": "example.com.","type": 1}],"Answer":[ {"name": "example.com.","type": 1,"TTL": 10443,"data": "93.184.216.34"},{"name": "example.com.","type": 46,"TTL": 10443,"data": "a 8 2 86400 1559899303 1558087103 23689 example.com. IfelQcO5NqQIX7ZNKI245KLfdRCKBaj2gKhZkJawtJbo/do+A0aUvoDM5A7EZKcF/j8SdtyfYWj/8g91B2/m/WOo7KyZxIC918R1/jvBRYQGreDL+yutb1ReGc6eUHX+NKJIYqzfal+PY7tGotS1Srn9WhBspXq8/0rNsEnsSoA="}],"Additional":[]}

IP ঠিকানা URL-এর জন্য TLS 1.3 এবং SNI

TLS 1.3 এর জন্য ক্লায়েন্টদের সার্ভার নেম আইডেন্টিফিকেশন (SNI) প্রদান করতে হবে।

SNI এক্সটেনশন নির্দিষ্ট করে যে SNI তথ্য একটি DNS ডোমেইন (এবং একটি IP ঠিকানা নয়):

"হোস্টনাম"-এ সার্ভারের সম্পূর্ণ যোগ্য DNS হোস্টনাম রয়েছে, যা ক্লায়েন্ট দ্বারা বোঝা যায়। হোস্টনাম একটি ট্রেলিং ডট ছাড়া ASCII এনকোডিং ব্যবহার করে একটি বাইট স্ট্রিং হিসাবে উপস্থাপন করা হয়। এটি RFC5890- এ সংজ্ঞায়িত A-লেবেল ব্যবহারের মাধ্যমে আন্তর্জাতিক ডোমেন নামের সমর্থনের অনুমতি দেয়। DNS হোস্টনামগুলি কেস-সংবেদনশীল। হোস্টনামের তুলনা করার অ্যালগরিদম RFC5890, বিভাগ 2.3.2.4- এ বর্ণিত হয়েছে।

আক্ষরিক IPv4 এবং IPv6 ঠিকানাগুলি "হোস্টনাম"-এ অনুমোদিত নয়৷

এই প্রয়োজনীয়তাগুলি DoH বা DoT অ্যাপ্লিকেশনগুলির জন্য পূরণ করা কঠিন হতে পারে যারা TLS 1.3-এ নিরাপত্তা উন্নতির সুবিধা নিতে চায়৷ Google পাবলিক DNS বর্তমানে TLS 1.3 সংযোগ গ্রহণ করে যেগুলি SNI প্রদান করে না, কিন্তু ভবিষ্যতে আমাদের অপারেশনাল বা নিরাপত্তার কারণে এটি পরিবর্তন করতে হতে পারে।

SNI সম্পর্কিত DoT বা DoH অ্যাপ্লিকেশনগুলির জন্য আমাদের সুপারিশগুলি নিম্নরূপ:

  1. Google পাবলিক DNS DoT বা DoH পরিষেবার যেকোনো সংযোগের জন্য dns.google হোস্টনামটি SNI হিসাবে পাঠান।
  2. যদি কোন হোস্টনাম পাওয়া না যায় (উদাহরণস্বরূপ, সুবিধাবাদী DoT করে এমন একটি অ্যাপ্লিকেশনে), আইপি ঠিকানাটি ফাঁকা না রেখে SNI-তে পাঠানোই ভালো।
  3. IPv6 ঠিকানাগুলি Host হেডারে [2001:db8:1234::5678] বন্ধনী আকারে উপস্থিত হওয়া উচিত, কিন্তু SNI তে বন্ধনী ছাড়াই।

DNS রেসপন্স ট্রাঙ্কেশন

যদিও Google পাবলিক ডিএনএস সাধারণত DoT এবং DoH প্রশ্নের উত্তরগুলিকে ছেঁটে দেয় না, তবে দুটি পরিস্থিতি থাকে যখন এটি করে:

  1. Google পাবলিক ডিএনএস যদি প্রামাণিক নাম সার্ভার থেকে সম্পূর্ণ এবং ছাঁটাই না করা প্রতিক্রিয়া পেতে না পারে তবে এটি প্রতিক্রিয়াতে TC পতাকা সেট করে।

  2. যে ক্ষেত্রে DNS প্রতিক্রিয়া (বাইনারী DNS বার্তা আকারে) TCP DNS বার্তাগুলির জন্য 64 KiB সীমা অতিক্রম করবে, Google পাবলিক DNS TC (ছাঁটা) পতাকা সেট করতে পারে যদি RFC মানগুলির জন্য এটি করার প্রয়োজন হয়।

যাইহোক, এই ক্ষেত্রে, ক্লায়েন্টদের প্লেইন TCP বা অন্য কোন পরিবহন ব্যবহার করে পুনরায় চেষ্টা করার প্রয়োজন নেই, কারণ ফলাফল একই হবে।