Biz Cloudflare xizmatini 1.1.1.1 va 1.0.0.1 manzillarida yoki "ommaviy DNS shelfi keldi!"

Biz Cloudflare xizmatini 1.1.1.1 va 1.0.0.1 manzillarida yoki "ommaviy DNS shelfi keldi!"

Cloudflare kompaniyasi taqdim manzillardagi umumiy DNS:

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

Foydalanuvchilar o‘z so‘rovlari mazmuni haqida xotirjam bo‘lishlari uchun siyosat “birinchi navbatda Maxfiylik” deb aytiladi.

Xizmat odatiy DNS-ga qo'shimcha ravishda texnologiyalardan foydalanish imkoniyatini taqdim etishi bilan qiziq TLS orqali DNS и HTTPS orqali DNS, bu provayderlarning so'rovlar yo'lida sizning so'rovlaringizni tinglashiga to'sqinlik qiladi - va statistik ma'lumotlarni to'playdi, kuzatib boradi, reklamani boshqaradi. Cloudflare e'lon sanasi (1 yil 2018 aprel yoki Amerika yozuvida 04/01) tasodifan tanlanmaganligini da'vo qilmoqda: yilning yana qaysi kuni "to'rt birlik" taqdim etiladi?

Xabrning auditoriyasi texnik jihatdan yaxshi bo'lganligi sababli, an'anaviy bo'lim "sizga nima uchun DNS kerak?" Men buni postning oxiriga qo'yaman, lekin bu erda men amaliy jihatdan foydaliroq narsalarni aytib beraman:

Yangi xizmatdan qanday foydalanish kerak?

Eng oddiy narsa, yuqoridagi DNS server manzillarini DNS mijozingizda (yoki siz foydalanadigan mahalliy DNS server sozlamalarida yuqori oqim sifatida) belgilashdir. Odatiy qiymatlarni almashtirish mantiqiymi Google DNS (8.8.8.8 va boshqalar), yoki biroz kamroq tarqalgan Yandex umumiy DNS serverlari (77.88.8.8 va shunga o'xshash boshqalar) Cloudflare serverlariga - ular siz uchun qaror qiladi, lekin yangi boshlanuvchilar uchun gapiradi dastur javob tezligi, unga ko'ra Cloudflare barcha raqobatchilardan tezroq (aniqlik kiritaman: o'lchovlar uchinchi tomon xizmati tomonidan olingan va ma'lum bir mijoz uchun tezlik, albatta, farq qilishi mumkin).

Biz Cloudflare xizmatini 1.1.1.1 va 1.0.0.1 manzillarida yoki "ommaviy DNS shelfi keldi!"

So'rov shifrlangan ulanish (aslida javob u orqali qaytariladi), yuqorida aytib o'tilgan DNS-over-TLS va DNS-over-HTTPS orqali serverga uchadigan yangi rejimlar bilan ishlash ancha qiziqroq. Afsuski, ular "qutidan tashqarida" qo'llab-quvvatlanmaydi (mualliflar buni "hali" deb hisoblashadi), lekin ularning ishini dasturiy ta'minotingizda (yoki hatto uskunangizda) tashkil qilish qiyin emas:

HTTP orqali DNS (DoH)

Nomidan ko'rinib turibdiki, aloqa HTTPS kanali orqali amalga oshiriladi, ya'ni

  1. qo'nish nuqtasi (so'nggi nuqta) mavjudligi - u manzilda joylashgan https://cloudflare-dns.com/dns-queryva
  2. so'rov yuborishi va javob olishi mumkin bo'lgan mijoz.

So'rovlar DNS Wireformat formatida belgilangan bo'lishi mumkin RFC1035 (POST va GET HTTP usullari yordamida yuboriladi) yoki JSON formatida (GET HTTP usuli yordamida). Shaxsan men uchun HTTP so'rovlari orqali DNS so'rovlarini amalga oshirish g'oyasi kutilmagan bo'lib tuyuldi, ammo unda oqilona don bor: bunday so'rov ko'plab trafik filtrlash tizimlaridan o'tadi, javoblarni tahlil qilish juda oddiy va so'rovlarni yaratish yanada osonroq. Odatiy kutubxonalar va protokollar xavfsizlik uchun javobgardir.

To'g'ridan-to'g'ri hujjatlardan misollar so'rang:

DNS Wireformat formatida so'rovni oling

$ 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 formatida POST so'rovi

$ 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

Xuddi shunday, lekin JSON-dan foydalanish

$ 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"
    }
  ]
}

Shubhasiz, kamdan-kam uchraydigan (agar kamida bitta) uy routeri DNS bilan shu tarzda ishlashi mumkin, ammo bu ertaga qo'llab-quvvatlash paydo bo'lmaydi degani emas - va qizig'i, bu erda biz DNS bilan ishlashni dasturimizda amalga oshirishimiz mumkin (allaqachon bo'lgani kabi) Mozilla yaratmoqchi, faqat Cloudflare serverlarida).

TLS orqali DNS

Odatiy bo'lib, DNS so'rovlari shifrlashsiz uzatiladi. TLS orqali DNS - bu ularni xavfsiz ulanish orqali yuborishning bir usuli. Cloudflare, belgilanganidek, standart 853 portida TLS orqali DNS-ni qo'llab-quvvatlaydi RFC7858. Bu cloudflare-dns.com xosti uchun berilgan sertifikatdan foydalanadi, TLS 1.2 va TLS 1.3 qo'llab-quvvatlanadi.

Ulanishni o'rnatish va protokolga muvofiq ishlash quyidagicha bo'ladi:

  • DNS ulanishini o'rnatishdan oldin mijoz cloudflare-dns.com ning TLS sertifikatining (SPKI deb ataladi) SHA64 xesh kodlangan base256 kodini saqlaydi.
  • DNS mijozi cloudflare-dns.com:853 ga TCP ulanishini o'rnatadi
  • DNS mijozi TLS suhbatini boshlaydi
  • TLS bilan qoʻl siqish jarayonida cloudflare-dns.com xosti oʻzining TLS sertifikatini taqdim etadi.
  • TLS ulanishi o'rnatilgandan so'ng, DNS mijozi DNS so'rovlarini xavfsiz kanal orqali yuborishi mumkin, bu so'rovlar va javoblarni tinglash va soxtalashtirishning oldini oladi.
  • TLS ulanishi orqali yuborilgan barcha DNS so'rovlari quyidagilarga mos kelishi kerak TCP orqali DNS yuborish.

TLS orqali DNS orqali so'rovga misol:

$ 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

Ushbu parametr mahalliy tarmoq yoki bitta foydalanuvchi ehtiyojlariga xizmat qiluvchi mahalliy DNS serverlar uchun eng yaxshi ishlaydi. To'g'ri, standart qo'llab-quvvatlash bilan juda yaxshi emas, lekin - umid qilaylik!

Suhbat nima haqida ekanligini ikkita so'z bilan tushuntirish

DNS qisqartmasi Domen nomi xizmatini anglatadi (shuning uchun "DNS xizmati" degani biroz ortiqcha, qisqartma allaqachon "xizmat" so'zini o'z ichiga oladi) va oddiy vazifani hal qilish uchun ishlatiladi - ma'lum bir xost nomining IP manzilini tushunish uchun. Biror kishi har safar havolani bosganda yoki brauzerning manzil satriga manzilni kiritganda (aytaylik, "https://habrahabr.ru/post/346430/"), inson kompyuteri sahifa mazmunini olish uchun qaysi serverga so'rov yuborish kerakligini aniqlashga harakat qilmoqda. Habrahabr.ru bo'lsa, DNS-dan javob veb-serverning IP-manzilini o'z ichiga oladi: 178.248.237.68 va keyin brauzer allaqachon ko'rsatilgan IP-manzil bilan server bilan bog'lanishga harakat qiladi.

O'z navbatida, DNS server "habrahabr.ru nomli xostning IP-manzili nima?" Degan so'rovni qabul qilib, ko'rsatilgan xost haqida biror narsa bilishini aniqlaydi. Agar yo'q bo'lsa, u dunyodagi boshqa DNS serverlariga so'rov yuboradi va bosqichma-bosqich berilgan savolga javob topishga harakat qiladi. Natijada, yakuniy javobni topgandan so'ng, topilgan ma'lumotlar hali ham ularni kutayotgan mijozga yuboriladi, bundan tashqari u DNS serverining keshida saqlanadi, bu sizga keyingi safar shunga o'xshash savolga tezroq javob berishga imkon beradi.

Umumiy muammo shundaki, birinchi navbatda DNS so'rovi ma'lumotlari aniq uzatiladi (bu trafik oqimiga kirish huquqiga ega bo'lgan har bir kishiga DNS so'rovlarini va ular olgan javoblarni ajratish va keyin ularni o'z maqsadlari uchun tahlil qilish imkoniyatini beradi; bu DNS mijozi uchun reklamalarni aniqlik bilan yo'naltirish qobiliyati, bu juda ko'p!). Ikkinchidan, ba'zi Internet-provayderlar (biz barmoqlar bilan ishora qilmaymiz, lekin eng kichiklari emas) u yoki bu so'ralgan sahifa o'rniga reklamalarni ko'rsatishga moyildirlar (bu juda sodda tarzda amalga oshiriladi: habranabr.ru so'rovi uchun belgilangan IP-manzil o'rniga). xost nomi, tasodifiy shaxs Shunday qilib, provayderning veb-serverining manzili qaytariladi, bu erda reklamani o'z ichiga olgan sahifa taqdim etiladi). Uchinchidan, Internetga kirish provayderlari mavjud bo'lib, ular bloklangan veb-resurslarning IP-manzillari to'g'risidagi to'g'ri DNS javoblarini o'z serverining IP-manziliga almashtirish orqali alohida saytlarni blokirovka qilish talablarini bajarish mexanizmini amalga oshiradilar (natijada, kirish sahifalari mavjud). bunday saytlar sezilarli darajada murakkabroq) yoki filtrlashni amalga oshiradigan proksi-serveringiz manziliga.

Bu, ehtimol, saytdan olingan rasm bo'lishi kerak. http://1.1.1.1/, xizmatga ulanishni tasvirlash uchun ishlatiladi. Mualliflar o'zlarining DNS sifatiga juda ishonganga o'xshaydi (ammo, Cloudflare-dan boshqa hech narsa kutish qiyin):

Biz Cloudflare xizmatini 1.1.1.1 va 1.0.0.1 manzillarida yoki "ommaviy DNS shelfi keldi!"

Xizmatni yaratuvchisi bo‘lgan Cloudflare-ni to‘liq tushunish mumkin: ular o‘z nonini dunyodagi eng mashhur CDN tarmoqlaridan birini (nafaqat kontentni tarqatishni, balki DNS zonalarini joylashtirishni ham o‘z ichiga oladi) saqlash va rivojlantirish orqali ishlab topishadi va shu tufayli. bularning xohishi, kim yaxshi bilmaydi, ularni o'rgating ular kimni tanimaydilar, bunga qayerga borish kerak global tarmoqda ko'pincha o'z serverlarining manzillarini blokirovka qilishdan aziyat chekishadi kimligini aytmaylik - shuning uchun kompaniya uchun "qichqiriqlar, hushtaklar va qoralamalar" ta'sir qilmaydigan DNSga ega bo'lish ularning biznesiga kamroq zarar etkazishini anglatadi. Va texnik afzalliklari (arzimas, ammo yoqimli: xususan, bepul DNS Cloudflare mijozlari uchun kompaniyaning DNS serverlarida joylashgan resurslarning DNS yozuvlarini bir zumda yangilash) postda tasvirlangan xizmatdan foydalanishni yanada qiziqarli qiladi.

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Yangi xizmatdan foydalanasizmi?

  • Ha, uni OS va / yoki routerda ko'rsatish orqali

  • Ha, va men yangi protokollardan foydalanaman (HTTPS orqali DNS va TLS orqali DNS)

  • Yo'q, menda yetarlicha joriy serverlar bor (bu ommaviy provayder: Google, Yandex va boshqalar).

  • Yo'q, men hozir nima ishlatayotganimni ham bilmayman

  • Men ularga SSL tunnel bilan rekursiv DNS-dan foydalanaman

693 ta foydalanuvchi ovoz berdi. 191 foydalanuvchi betaraf qoldi.

Manba: www.habr.com

a Izoh qo'shish