
Compania Cloudflare paraqiti DNS publik në adresat:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
Pretendohet se përdoret politika "Privacy first", kështu që përdoruesit mund të ndihen të qetë për përmbajtjen e kërkesave të tyre.
Shërbimi është interesant sepse përveç DNS-të të zakonshëm ofron mundësinë për të përdorur teknologjitë DNS-over-TLS dhe DNS-over-HTTPS, që do ta pengojë shumë ofruesit të spiunojnë kërkesat tuaja gjatë rrugës — dhe të mbledhin statistika, ndjekin, menaxhojnë reklamën. Cloudflare pretendon se data e njoftimit (1 prill 2018, ose 04/01 në notacionin amerikan) u zgjodh jo rastësisht: në cilin tjetër ditë të vitit do të paraqiteshin "katër njësi"?
Duke qenë se audience e Habra është teknologjikisht e arsimuar, seksioni tradicional "pse është e nevojshme DNS?" do ta vendos nën fund të postës, dhe këtu do të shpreh gjëra më praktike:
Si ta përdorim shërbimin e ri?
Më e thjeshtë — në klientin tuaj të DNS (ose si upstream në cilësimet e serverit tuaj lokal të DNS) specifikoni adresat e DNS-së të mësipërmetë serverëve. Ka kuptim të zëvendësoni vlerat e zakonshme e DNS-të të Google (8.8.8.8 etj.), ose ndoshta pak më pak të zakonshme serverët publik të DNS-së të Yandex (77.88.8.8 dhe të ngjashëm) në serverët nga Cloudflare — do t'ju zgjidhin, por për fillestarët flet grafiku i shpejtësive të përgjigjeve, sipas të cilit Cloudflare punon më shpejt se të gjithë konkurrentët (do të sqaroj: matjet janë kryer nga një shërbim i tretë, dhe shpejtësia deri te klienti specifik, sigurisht, mund të ndryshojë).

Më interesante është puna me modet e reja, në të cilat kërkesa dërgohet server në një lidhje të enkriptuar (efektikisht, përgjigjja kthehet po në të), të përmendura si DNS-over-TLS dhe DNS-over-HTTPS. Fatkeqësisht, "nga kutia" ato nuk mbështeten (autorët besojnë se është "për tani"), por të organizohet puna e tyre në softuerin tuaj (ose madje edhe në harduerin tuaj) nuk është e vështirë:
DNS mbi HTTPs (DoH)
Siç sugjeron emri, komunikimi ndodh mbi një kanal HTTPS, që nënkupton
- praninë e një pike përfundimi (endpoint) — ajo ndodhet në adresën https://cloudflare-dns.com/dns-query, dhe
- klientin që di të dërgojë kërkesa dhe të marrë përgjigje.
Kërkesat mund të jenë ose në formatin DNS Wireformat, të përcaktuar në RFC1035 (dërgohet me metodat HTTP POST dhe GET), ose në formatin JSON (përdoret metoda HTTP GET). Personalish, ideja për të bërë kërkesa DNS përmes kërkesave HTTP më dukej e papritur, megjithatë ka një arsyetim të arsyeshëm: një kërkesë e tillë do të kalojë shumë sisteme filtrimi të trafikut, analizimi i përgjigjeve është mjaft i thjeshtë, dhe formimi i kërkesave është edhe më i lehtë. Sigurinë e ofrojnë bibliotekat dhe protokollet e njohura.
Shembuj kërkesash, direkt nga dokumentacioni:
Kërkesë GET në formatin DNS Wireformat
$ curl -v "https://cloudflare-dns.com/dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" | hexdump
* Përdorimi i HTTP2, serveri mbështet përdorimin shumëfish
* Gjendja e lidhjes u ndryshua (HTTP/2 e konfirmuar)
* Kopjimi i të dhënave HTTP/2 në tamponin e lidhjes pas azhurnimit: len=0
* Përdorimi i ID-së së Stream: 1 (handle i lehtë 0x7f968700a400)
GET /dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2
Host: cloudflare-dns.com
User-Agent: curl/7.54.0
Accept: */*
* Gjendja e lidhjes u ndryshua (MAX_CONCURRENT_STREAMS e azhurnuar)!
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
* Lidhja #0 me hostin cloudflare-dns.com u la e pandryshuar
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
POST-requests në formatin DNS Wireformat
$ 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
* Lidhja #0 me hostin cloudflare-dns.com u la e pandryshuar
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
Po e njëjta, por duke përdorur 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"
}
]
}
Mundësi të dukshme është që shumë rralla (nëse jo asnjë) routerë shtëpiakë funksionojnë kështu me DNS, por kjo nuk do të thotë se mbështetje nuk do të shfaqet nesër — dhe që është interesante, këtu ne mund të realizojmë funksionimin me DNS në aplikacionin tonë (siç tashmë planifikon të bëjë Mozilla, pikërisht në serverët Cloudflare).
DNS mbi TLS
Në parazgjedhje, kërkesat DNS dërgohen pa enkriptim. DNS mbi TLS është një mënyrë për t'i dërguar ato mbi një lidhje të sigurt. Cloudflare mbështet DNS mbi TLS në portin standard 853, siç parashikohet nga RFC7858. Në këtë rast përdoret një certifikatë, e cila është lëshuar për hostin cloudflare-dns.com, dhe mbështeten TLS 1.2 dhe TLS 1.3.
Establishimi i lidhjes dhe funksionimi i protokollit ndodhin pak a shumë kështu:
- Para se të krijohet lidhja me DNS, klienti ruan hash-in e certifikatës TLS të cloudflare-dns.com të koduar në base64 (e quajtur SPKI)
- Klienti DNS krijon një lidhje TCP me cloudflare-dns.com:853
- Klienti DNS inicion procedurën e dorëzimit TLS
- Gjatë procesit të TLS handshake, hosti cloudflare-dns.com paraqet certifikatën e tij TLS.
- Sapo të vendoset lidhja TLS, klienti DNS mund të dërgojë kërkesat DNS përmes kanalit të sigurt, duke parandaluar përgjuarjen dhe falsifikimin e kërkesave dhe përgjigjeve.
- Të gjitha kërkesat DNS të dërguara përmes lidhjes TLS duhet të përmbushin specifikimin për dërgimin e DNS përmes TCP.
Shembuj i kërkesës përmes DNS over TLS:
$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com
;; DEBUG: Kërkesë për pronarin (example.com.), klasën (1), llojin (1), serverin (1.1.1.1), portin (853), protokollin (TCP)
;; DEBUG: TLS, importoi 170 certifikata të sistemit
;; DEBUG: TLS, mori hierarkinë e certifikatave:
;; 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, duke anashkaluar kontrollin e PIN të certifikatës
;; DEBUG: TLS, Certifikata është e besueshme.
;; Sesioni TLS (TLS1.2)-(ECDHE-ECDSA-SECP256R1)-(AES-256-GCM)
;; ->>HEADER<<- opcode: KËRKE; status: NOERROR; id: 58548
;; Flamuj: qr rd ra; KËRKE: 1; PËRGJIGJE: 1; AUTORITET: 0; SHTESË: 1
;; EDNS PSEUDOSECTION:
;; Versioni: 0; flamuj: ; madhësia e UDP: 1536 B; ext-rcode: NOERROR
;; PADDING: 408 B
;; SEXIONI I PYETJES:
;; example.com. IN A
;; PËRGJIGJE SEKRETI:
example.com. 2347 IN A 93.184.216.34
;; Marrë 468 B
;; Koha 2018-03-31 15:20:57 PDT
;; Nga 1.1.1.1@853(TCP) në 12.6 ms
Ky variant, duket se përshtatet më mirë për serverët DNS lokalë që shërbejnë nevojat e një rrjeti lokal ose të një përdoruesi. E vërtetë, mbështetja për standardin nuk është shumë e mirë, por — le të shpresojmë!
Dy fjalë shpjeguese për çfarë po flitet
Akronimi DNS zgjerohet si Domen Name Service (prandaj të flasësh për "shërbimin DNS" është disi e tepërt, pasi në akronim tashmë ka fjalën "shërbim"), dhe përdoret për të zgjidhur një detyrë të thjeshtë — të kuptojë se cili IP adresi i përket një emri hosti të caktuar. Çdo herë që një person klikon në një lidhje ose fut adresën në shiritin e adresës të shfletuesit (le të themi, diçka si "https://habrahabr.ru/post/346430/"), kompjuteri i personit përpiqet të kuptojë se në cilin server duhet t'i dërgojë kërkesën për përmbajtjen e faqes. Në rastin e habrahabr.ru, përgjigjja nga DNS do të përmbajë një tregim për adresën IP të serverit web: 178.248.237.68, dhe më pas shfletuesi do të përpiqet të lidhet me serverin me atë adresë IP.
Në anën tjetër, serveri DNS, kur merr një kërkesë "cili është IP adresa e hostit me emrin habrahabr.ru?", përcakton nëse ai di ndonjë informacion rreth këtij hosti. Nëse jo, ai bën një kërkesë te serverët e tjerë DNS në botë dhe, hap pas hapi, përpiqet të zbulojë përgjigjen për pyetjen e bërë. Si rezultat, pas gjetjes së përgjigjes përfundimtare, të dhënat e gjetura dërgohen klientit që ende po pret, plus ruhet në cache-në e serverit DNS, çka do të lejojë që herën tjetër të përgjigjet në një pyetje të tillë shumë më shpejt.
Një problem i zakonshëm është se, së pari, të dhënat e DNS kërkesave transmetohen në një formë të hapur (çfarë u jep të gjithëve që kanë akses në trafikun e rrjedhës mundësinë të nxjerrin kërkesat DNS dhe përgjigjet që marrin, dhe pastaj t'i analizojnë ato për qëllimet e tyre; kjo ofron mundësi për targetimin e reklamave me saktësi për klientin DNS, që është shumë e rëndësishme!). Së dyti, disa ofrues interneti (nuk do ta tregojmë gishtin, por nuk janë të vegjël) kanë tendencën të shfaqin reklama në vend të ndonjë faqeje të kërkuar (kjo realizohet shumë lehtë: në vend të IP adresës së specifikuar për kërkesën në emrin e hostit habranabr.ru, një person merr për rastësisht adresën e serverit të ofruesit, ku jepet një faqe që përmban reklama). Së treti, ekzistojnë ofrues të aksesit në internet që realizojnë mekanizmin e zbatimit të kërkesave për bllokimin e faqeve të caktuara, përmes zëvendësimit të përgjigjeve DNS të sakta për IP adresat e burimeve web të bllokuara me IP adresën e serverit të tyre, që përmban faqet e mbështetjes (si rezultat, qasja në këto faqe bëhet shumë më e vështirë), ose me adresën e serverit të tyre proxy, që realizon filtrimin.
Këtu, ndoshta, duhet të vendosni një imazh nga faqja http://1.1.1.1/, që shërben për të përshkruar lidhjen me shërbimin. Autoret, siç duket, janë plotësisht të sigurt në cilësinë e punës së DNS-it të tyre (për më tepër, është e vështirë të presësh ndonjë gjë tjetër nga Cloudflare):

Në të vërtetë, mund të kuptohet kompania Cloudflare, krijuesi i shërbimit: ata fitojnë jetesën e tyre duke mbështetur dhe zhvilluar një nga rrjetet CDN më të njohura në botë (mes funksioneve të saj — jo vetëm shpërndarjen e përmbajtjes, por edhe hostimin e zonave DNS), dhe, për shkak të dëshirës së atyre që nuk e kanë shumë idenë, për të mësuar ata që ata nuk i njohin, për atë ku të shkojnë në rrjetin global, shpesh vuajnë nga bllokimet e adresave të serverëve të tyre nga nuk do të themi se kush — prandaj, ekzistenca e DNS-it, që nuk ndikohet nga 'thirrjet, të kënduarit dhe shkrimet', për kompaninë do të thotë më pak dëme për biznesin e tyre. Dhe përfitimet teknike (çfarë detaji, por i këndshëm: për klientët e DNS-it falas të Cloudflare, përditësimi i regjistrimeve DNS të burimeve të vendosura në serverat DNS të kompanisë do të jetë momental) e bëjnë përdorimin e shërbimit të përshkruar në postim edhe më interesante.
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutemi.
A do ta përdorni shërbimin e ri?
- Po, thjesht duke e vendosur atë në OS dhe/ose në router
- Po, dhe do të përdor protokollet e reja (DNS mbi HTTPs dhe DNS mbi TLS)
- Jo, më mjaftojnë serverat aktualë (është ofrues publik: Google, Yandex, etj.)
- Jo, as nuk di çfarë po përdor tani
- Përdor DNS-të e mia rekurzive me tunel SSL deri te ato
693 përdorues votuan. 191 përdorues abstenuan.
Burimi: habr.com
