Бид Cloudflare-ийн үйлчилгээг 1.1.1.1 ба 1.0.0.1 хаягуудаар хүлээн авдаг, эсвэл "нийтийн DNS тавиур ирлээ!"

Бид Cloudflare-ийн үйлчилгээг 1.1.1.1 ба 1.0.0.1 хаягуудаар хүлээн авдаг, эсвэл "нийтийн DNS тавиур ирлээ!"

Cloudflare компани танилцуулсан нийтийн DNS хаягууд:

  • 1.1.1.1
  • 1.0.0.1
  • 2606: 4700: 4700 1111 ::
  • 2606: 4700: 4700 1001 ::

Энэхүү бодлого нь "Нууцлалын эхэнд" байх тул хэрэглэгчид өөрсдийн хүсэлтийн агуулгын талаар тайван байх боломжтой.

Энэхүү үйлчилгээ нь ердийн DNS-ээс гадна технологийг ашиглах боломжийг олгодогоороо сонирхолтой юм TLS дээр DNS и DNS-over-HTTPS, энэ нь үйлчилгээ үзүүлэгчдийг хүсэлтийн дагуу таны хүсэлтийг чагнахаас ихээхэн сэргийлж, статистик мэдээлэл цуглуулах, хяналт тавих, зар сурталчилгааг удирдах боломжтой. Cloudflare мэдэгдлийн огноог (1 оны 2018-р сарын 04, эсвэл Америкийн тэмдэглэгээгээр 01/XNUMX) санамсаргүй байдлаар сонгоогүй гэж мэдэгджээ: "Дөрвөн нэгж" -ийг жилийн өөр ямар өдөр танилцуулах вэ?

Хабрын үзэгчид техникийн мэдлэгтэй байдаг тул уламжлалт хэсэг "Яагаад танд DNS хэрэгтэй байна вэ?" Би үүнийг нийтлэлийн төгсгөлд оруулах болно, гэхдээ энд би илүү практик хэрэгтэй зүйлсийг дурдах болно:

Шинэ үйлчилгээг хэрхэн ашиглах вэ?

Хамгийн энгийн зүйл бол дээрх DNS серверийн хаягуудыг өөрийн DNS клиент дээрээ (эсвэл таны ашигладаг локал DNS серверийн тохиргоонд дээд талынх) зааж өгөх явдал юм. Ердийн утгыг солих нь утга учиртай юу Google DNS (8.8.8.8 гэх мэт), эсвэл арай бага тохиолддог Yandex нийтийн DNS серверүүд (77.88.8.8 болон бусадтай адил) Cloudflare-ийн серверүүд рүү - тэд таны өмнөөс шийдэх болно, гэхдээ эхлэгчдэд зориулж ярьдаг хуваарь хариу өгөх хурд, үүний дагуу Cloudflare нь бүх өрсөлдөгчдөөс илүү хурдан байдаг (би тодруулах болно: хэмжилтийг гуравдагч талын үйлчилгээ авсан бөгөөд тодорхой үйлчлүүлэгчийн хурд нь мэдээжийн хэрэг өөр өөр байж болно).

Бид Cloudflare-ийн үйлчилгээг 1.1.1.1 ба 1.0.0.1 хаягуудаар хүлээн авдаг, эсвэл "нийтийн DNS тавиур ирлээ!"

Хүсэлт нь шифрлэгдсэн холболтоор сервер рүү нисдэг (үнэндээ хариу нь түүгээр буцаж ирдэг), дурдсан DNS-over-TLS болон DNS-over-HTTPS зэрэг шинэ горимуудтай ажиллах нь илүү сонирхолтой юм. Харамсалтай нь тэдгээрийг "хайрцагнаас гадуур" дэмждэггүй (зохиогчид үүнийг "одоохондоо" гэж үздэг), гэхдээ тэдний ажлыг програм хангамж дээрээ (эсвэл бүр техник хангамж дээрээ) зохион байгуулах нь тийм ч хэцүү биш юм:

HTTP дээр DNS (DoH)

Нэрнээс нь харахад харилцаа холбоо HTTPS сувгаар явагддаг бөгөөд энэ нь гэсэн үг юм

  1. буух цэг (төгсгөлийн цэг) байгаа эсэх - энэ нь хаяг дээр байрладаг https://cloudflare-dns.com/dns-queryболон
  2. хүсэлт илгээж, хариу хүлээн авах боломжтой үйлчлүүлэгч.

Хүсэлтүүд нь тодорхойлогдсон DNS Wireformat форматтай байж болно RFC1035 (POST болон GET HTTP аргыг ашиглан илгээсэн), эсвэл JSON форматаар (GET HTTP аргыг ашиглан). Миний хувьд HTTP хүсэлтээр DNS хүсэлт гаргах санаа гэнэтийн байсан ч үүнд оновчтой үр тариа бий: ийм хүсэлт нь олон траффик шүүлтүүрийн системийг дамжуулдаг, хариултыг задлан шинжлэх нь маш энгийн бөгөөд хүсэлт гаргах нь бүр ч хялбар байдаг. Ердийн номын сан, протоколууд нь аюулгүй байдлыг хариуцдаг.

Баримт бичгээс шууд жишээ хүсэх:

DNS Wireformat форматаар хүсэлтийг хүлээн авна уу

$ curl -v "https://cloudflare-dns.com/dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" | hexdump
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7f968700a400)
GET /dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2
Host: cloudflare-dns.com
User-Agent: curl/7.54.0
Accept: */*

* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
HTTP/2 200
date: Fri, 23 Mar 2018 05:14:02 GMT
content-type: application/dns-udpwireformat
content-length: 49
cache-control: max-age=0
set-cookie: __cfduid=dd1fb65f0185fadf50bbb6cd14ecbc5b01521782042; expires=Sat, 23-Mar-19 05:14:02 GMT; path=/; domain=.cloudflare.com; HttpOnly
server: cloudflare-nginx
cf-ray: 3ffe69838a418c4c-SFO-DOG

{ [49 bytes data]
100    49  100    49    0     0    493      0 --:--:-- --:--:-- --:--:--   494
* Connection #0 to host cloudflare-dns.com left intact
0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 77
0000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00
0000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d8
0000030 22
0000031

DNS Wireformat форматаар POST хүсэлт

$ echo -n 'q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | base64 -D | curl -H 'Content-Type: application/dns-udpwireformat' --data-binary @- https://cloudflare-dns.com/dns-query -o - | hexdump

{ [49 bytes data]
100    49  100    49    0     0    493      0 --:--:-- --:--:-- --:--:--   494
* Connection #0 to host cloudflare-dns.com left intact
0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 77
0000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00
0000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d8
0000030 22
0000031

Үүнтэй адил боловч JSON ашиглаж байна

$ curl 'https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=example.com&type=AAAA'

{
  "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": 1069,
      "data": "93.184.216.34"
    }
  ]
}

Мэдээжийн хэрэг, ховор (дор хаяж нэг) гэрийн чиглүүлэгч нь DNS-тэй ийм байдлаар ажиллах боломжтой, гэхдээ энэ нь маргааш дэмжлэг үзүүлэхгүй гэсэн үг биш бөгөөд сонирхолтой нь энд бид DNS-тэй ажиллахыг програмдаа бүрэн хэрэгжүүлж чадна (хуучин шиг). Mozilla хийх гэж байна, зүгээр л Cloudflare серверүүд дээр).

TLS дээр DNS

Анхдагч байдлаар, DNS асуулга нь шифрлэлтгүйгээр дамждаг. TLS дээрх DNS нь тэдгээрийг аюулгүй холболтоор илгээх арга юм. Cloudflare стандартын дагуу 853 стандарт порт дээр TLS дээр DNS дэмждэг RFC7858. Энэ нь cloudflare-dns.com хостод олгосон гэрчилгээг ашигладаг бөгөөд TLS 1.2 болон TLS 1.3-ийг дэмждэг.

Холболт үүсгэж, протоколын дагуу ажиллах нь дараах байдалтай байна.

  • DNS холболт үүсгэхийн өмнө үйлчлүүлэгч cloudflare-dns.com-ийн TLS гэрчилгээний SHA64 хэшийг (SPKI гэж нэрлэдэг) base256 кодчилолд хадгалдаг.
  • DNS үйлчлүүлэгч cloudflare-dns.com:853 руу TCP холболт үүсгэсэн
  • DNS үйлчлүүлэгч TLS-ийн гар барилтыг эхлүүлнэ
  • TLS гар барих явцад cloudflare-dns.com хост TLS сертификатаа танилцуулдаг.
  • TLS холболт үүсгэсний дараа DNS үйлчлүүлэгч DNS хүсэлтийг аюулгүй сувгаар илгээх боломжтой бөгөөд энэ нь хүсэлт, хариултыг чагнаж, хууран мэхлэхээс сэргийлдэг.
  • TLS холболтоор илгээсэн бүх DNS асуулга нь дараах шаардлагыг хангасан байх ёстой TCP-ээр DNS илгээх.

TLS-ээр дамжуулан DNS-ээр дамжуулан хүсэлт гаргах жишээ:

$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com  example.com
;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP)
;; DEBUG: TLS, imported 170 system certificates
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=CA,L=San Francisco,O=Cloudflare, Inc.,CN=*.cloudflare-dns.com
;; DEBUG:      SHA-256 PIN: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc=
;; DEBUG:  #2, C=US,O=DigiCert Inc,CN=DigiCert ECC Secure Server CA
;; DEBUG:      SHA-256 PIN: PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.
;; TLS session (TLS1.2)-(ECDHE-ECDSA-SECP256R1)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 58548
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1

;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1536 B; ext-rcode: NOERROR
;; PADDING: 408 B

;; QUESTION SECTION:
;; example.com.             IN  A

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

;; Received 468 B
;; Time 2018-03-31 15:20:57 PDT
;; From 1.1.1.1@853(TCP) in 12.6 ms

Энэ сонголт нь дотоод сүлжээ эсвэл нэг хэрэглэгчийн хэрэгцээнд нийцэх локал DNS серверүүдэд хамгийн сайн ажилладаг бололтой. Үнэн бол стандартын дэмжлэгтэйгээр тийм ч сайн биш, гэхдээ - найдъя!

Ярилцлага юуны тухай болохыг хоёр үгээр тайлбарлав

DNS товчлол нь Домэйн Нэрийн Үйлчилгээ гэсэн үг юм ("DNS үйлчилгээ" гэдэг нь зарим талаараа шаардлагагүй, товчлол нь "үйлчилгээ" гэсэн үгийг агуулж байгаа) бөгөөд энгийн даалгаврыг шийдвэрлэхэд ашиглагддаг - тухайн хостын нэр ямар IP хаягтай болохыг ойлгоход ашигладаг. Хүн холбоос дээр дарах, эсвэл хөтчийн хаягийн мөрөнд хаяг оруулах болгонд ("https://habrahabr.ru/post/346430/"), хүний ​​компьютер хуудасны агуулгыг авах хүсэлтийг аль сервер рүү илгээхийг олохыг оролдож байна. Habrahabr.ru-ийн хувьд DNS-ийн хариулт нь вэб серверийн IP хаягийг агуулсан байх болно: 178.248.237.68, дараа нь хөтөч нь заасан IP хаягтай сервертэй холбогдохыг оролдох болно.

Хариуд нь DNS сервер нь "habrahabr.ru нэртэй хостын IP хаяг гэж юу вэ?" гэсэн хүсэлтийг хүлээн авснаар тухайн хостын талаар юу ч мэддэг эсэхийг тодорхойлдог. Үгүй бол энэ нь дэлхийн бусад DNS серверүүд рүү хүсэлт гаргаж, асуусан асуултын хариултыг алхам алхмаар олохыг хичээдэг. Үүний үр дүнд эцсийн хариултыг олсны дараа олсон өгөгдлийг хүлээж байгаа үйлчлүүлэгч рүү илгээхээс гадна DNS серверийн кэшэд хадгалагдах бөгөөд энэ нь дараагийн удаа ижил төстэй асуултанд илүү хурдан хариулах боломжийг олгоно.

Нийтлэг асуудал бол эхлээд DNS асуулгын өгөгдлийг тодорхой байдлаар дамжуулдаг (энэ нь замын хөдөлгөөний урсгалд хандах боломжтой хэн бүхэнд DNS асуулга болон тэдний хүлээн авсан хариултыг тусгаарлаж, дараа нь тэдгээрийг өөрийн зорилгоор задлан шинжлэх боломжийг олгодог; энэ нь DNS үйлчлүүлэгчийн хувьд зар сурталчилгааг нарийвчлалтай чиглүүлэх чадвар нь маш их юм!). Хоёрдугаарт, зарим ISP-үүд (бид хуруугаараа хуруугаараа заадаггүй, гэхдээ хамгийн жижиг нь биш) нэг эсвэл өөр хүссэн хуудасны оронд зар харуулах хандлагатай байдаг (энэ нь маш энгийн байдлаар хэрэгждэг: habranabr.ru-ийн асуулгад заасан IP хаягийн оронд). хостын нэр, санамсаргүй хүн Тиймээс, зар сурталчилгааг агуулсан хуудас үйлчлэх үйлчилгээ үзүүлэгчийн вэб серверийн хаягийг буцаана). Гуравдугаарт, хаагдсан вэб нөөцийн IP хаягийн талаарх зөв DNS хариултыг stub хуудсуудыг агуулсан серверийнхээ IP хаягаар солих замаар бие даасан сайтуудыг хаах шаардлагыг биелүүлэх механизмыг хэрэгжүүлдэг интернетийн үйлчилгээ үзүүлэгчид байдаг (үр дүнд нь Ийм сайтууд нь мэдэгдэхүйц илүү төвөгтэй) эсвэл шүүлтүүрийг гүйцэтгэдэг прокси серверийн хаяг руу илгээнэ үү.

Энэ нь магадгүй сайтаас авсан зураг байх ёстой. http://1.1.1.1/, үйлчилгээний холболтыг тодорхойлоход ашигладаг. Зохиогчид өөрсдийн DNS-ийн чанарт бүрэн итгэлтэй байгаа бололтой (гэхдээ Cloudflare-ээс өөр зүйл хүлээхэд хэцүү):

Бид Cloudflare-ийн үйлчилгээг 1.1.1.1 ба 1.0.0.1 хаягуудаар хүлээн авдаг, эсвэл "нийтийн DNS тавиур ирлээ!"

Үйлчилгээг бүтээгч Cloudflare-ийг бүрэн ойлгож болно: тэд дэлхийн хамгийн алдартай CDN сүлжээнүүдийн нэгийг (зөвхөн контент түгээхээс гадна DNS бүсүүдийг байршуулах функцийг агуулдаг) хадгалж, хөгжүүлснээр хоолоо олдог. тэдний хүсэл, хэн сайн мэдэхгүй байна, тэдэнд заа тэд хэнийг мэдэхгүй, үүнд хаашаа явах дэлхийн сүлжээнд серверийнхээ хаягийг хааснаас болж ихэвчлэн зовдог хэнийг нь хэлэхээ больё - Тиймээс компанийн хувьд "хашгирах, шүгэлдэх, сараачлах" зэрэгт өртөөгүй DNS-тэй байх нь тэдний бизнест хохирол багатай гэсэн үг юм. Техникийн давуу талууд (ялангуяа, гэхдээ сайхан: DNS Cloudflare үнэгүй үйлчлүүлэгчдийн хувьд компанийн DNS сервер дээр байрлуулсан нөөцийн DNS бүртгэлийг даруй шинэчлэх болно) нь нийтлэлд тайлбарласан үйлчилгээг ашиглахыг илүү сонирхолтой болгодог.

Зөвхөн бүртгэлтэй хэрэглэгчид санал асуулгад оролцох боломжтой. Нэвтрэх, гуйя.

Та шинэ үйлчилгээг ашиглах уу?

  • Тийм ээ, үүнийг зүгээр л үйлдлийн систем болон / эсвэл чиглүүлэгч дээр зааж өгснөөр

  • Тийм ээ, би шинэ протоколуудыг ашиглах болно (HTTPS дээр DNS, TLS дээр DNS)

  • Үгүй ээ, надад хангалттай серверүүд байгаа (энэ нь нийтийн үйлчилгээ үзүүлэгч: Google, Yandex гэх мэт).

  • Үгүй ээ, би яг одоо юу хэрэглэж байгаагаа ч мэдэхгүй байна

  • Би тэдэнд SSL туннел бүхий рекурсив DNS-ээ ашигладаг

693 хэрэглэгч санал өгсөн. 191 хэрэглэгч түдгэлзсэн.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх