Uslugu iz Cloudflarea susrećemo na adresama 1.1.1.1 i 1.0.0.1, ili “javna DNS polica je stigla!”

Uslugu iz Cloudflarea susrećemo na adresama 1.1.1.1 i 1.0.0.1, ili “javna DNS polica je stigla!”

Tvrtka Cloudflare predstavio javni DNS na adresama:

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

Kaže se da je politika "Privatnost na prvom mjestu" kako bi korisnici mogli biti mirni oko sadržaja svojih zahtjeva.

Usluga je zanimljiva po tome što, osim uobičajenog DNS-a, pruža mogućnost korištenja tehnologija DNS-over-TLS и DNS-over-HTTPS, što će uvelike spriječiti pružatelje da prisluškuju vaše zahtjeve na putu zahtjeva – te prikupljati statistiku, pratiti, upravljati oglašavanjem. Cloudflare tvrdi da datum objave (1. travnja 2018. ili 04. travnja u američkoj notaciji) nije odabran slučajno: koji drugi dan u godini će biti predstavljene "četiri jedinice"?

Budući da je Habrova publika tehnički potkovana, tradicionalni odjeljak "zašto vam je potreban DNS?" Stavit ću ga na kraj posta, ali ovdje ću navesti više praktično korisnih stvari:

Kako koristiti novu uslugu?

Najjednostavnije je navesti gore navedene adrese DNS poslužitelja u vašem DNS klijentu (ili kao uzvodno u postavkama lokalnog DNS poslužitelja koji koristite). Ima li smisla zamijeniti uobičajene vrijednosti Google DNS (8.8.8.8 itd.), ili nešto rjeđe Yandex javni DNS poslužitelji (77.88.8.8 i njima slični) poslužiteljima iz Cloudflarea - oni će odlučiti umjesto vas, ali govori u ime početnika raspored brzina odziva, prema kojoj je Cloudflare brži od svih konkurenata (pojasnit ću: mjerenja je izvršio servis treće strane, a brzina do određenog klijenta, naravno, može se razlikovati).

Uslugu iz Cloudflarea susrećemo na adresama 1.1.1.1 i 1.0.0.1, ili “javna DNS polica je stigla!”

Puno je zanimljivije raditi s novim modovima u kojima zahtjev leti prema poslužitelju preko šifrirane veze (zapravo, preko nje se vraća odgovor), spomenutim DNS-over-TLS i DNS-over-HTTPS. Nažalost, nisu podržani "iz kutije" (autori vjeruju da je to "još"), ali nije teško organizirati njihov rad u vašem softveru (pa čak ni na hardveru):

DNS preko HTTP-a (DoH)

Kao što naziv govori, komunikacija se odvija preko HTTPS kanala, što znači

  1. prisutnost točke slijetanja (krajnja točka) - nalazi se na adresi https://cloudflare-dns.com/dns-queryI
  2. klijent koji može slati zahtjeve i primati odgovore.

Zahtjevi mogu biti u DNS Wireformat formatu definiranom u RFC1035 (poslano metodama POST i GET HTTP), ili u JSON formatu (metodom GET HTTP). Za mene osobno, ideja postavljanja DNS zahtjeva putem HTTP zahtjeva činila se neočekivanom, ali u njoj postoji racionalno zrno: takav zahtjev će proći mnoge sustave za filtriranje prometa, raščlanjivanje odgovora je prilično jednostavno, a generiranje zahtjeva još lakše. Za sigurnost su odgovorne uobičajene knjižnice i protokoli.

Zatražite primjere, izravno iz dokumentacije:

GET zahtjev u formatu 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

POST zahtjev u formatu 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
* 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

Isto, ali koristeći 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"
    }
  ]
}

Očito, rijetki (ako barem jedan) kućni usmjerivač može raditi s DNS-om na ovaj način, ali to ne znači da se podrška neće pojaviti sutra - i, zanimljivo, ovdje možemo prilično implementirati rad s DNS-om u našoj aplikaciji (kao što je već napravit će Mozillu, samo na Cloudflare poslužiteljima).

DNS preko TLS-a

Prema zadanim postavkama, DNS upiti se prenose bez enkripcije. DNS preko TLS-a način je da ih pošaljete putem sigurne veze. Cloudflare podržava DNS preko TLS-a na standardnom priključku 853 kako je propisano RFC7858. Ovo koristi certifikat izdan za cloudflare-dns.com host, TLS 1.2 i TLS 1.3 su podržani.

Uspostavljanje veze i rad prema protokolu ide otprilike ovako:

  • Prije uspostavljanja DNS veze, klijent pohranjuje base64 kodiran SHA256 hash TLS certifikata cloudflare-dns.com (zvan SPKI)
  • DNS klijent uspostavlja TCP vezu na cloudflare-dns.com:853
  • DNS klijent inicira TLS rukovanje
  • Tijekom procesa TLS rukovanja, cloudflare-dns.com host predstavlja svoj TLS certifikat.
  • Nakon što se uspostavi TLS veza, DNS klijent može slati DNS zahtjeve preko sigurnog kanala, što sprječava prisluškivanje i lažiranje zahtjeva i odgovora.
  • Svi DNS upiti poslani preko TLS veze moraju biti u skladu s slanje DNS-a preko TCP-a.

Primjer zahtjeva putem DNS-a preko TLS-a:

$ 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

Čini se da ova opcija najbolje funkcionira za lokalne DNS poslužitelje koji služe potrebama lokalne mreže ili jednog korisnika. Istina, s podrškom standarda nije baš dobro, ali - nadajmo se!

Dvije riječi objašnjenja o čemu se razgovara

Skraćenica DNS je kratica za Domain Name Service (tako da je reći "DNS usluga" donekle suvišno, kratica već sadrži riječ "usluga"), a koristi se za rješavanje jednostavnog zadatka - razumjeti koju IP adresu ima određeno ime hosta. Svaki put kada osoba klikne vezu ili unese adresu u adresnu traku preglednika (recimo nešto poput "https://habrahabr.ru/post/346430/"), ljudsko računalo pokušava otkriti kojem poslužitelju poslati zahtjev za preuzimanje sadržaja stranice. U slučaju habrahabr.ru, odgovor DNS-a sadržavat će naznaku IP adrese web poslužitelja: 178.248.237.68, a zatim će preglednik već pokušati kontaktirati poslužitelj s navedenom IP adresom.

Zauzvrat, DNS poslužitelj, primivši zahtjev "koja je IP adresa hosta pod nazivom habrahabr.ru?", utvrđuje zna li nešto o navedenom hostu. Ako nije, postavlja zahtjev drugim DNS poslužiteljima u svijetu i, korak po korak, pokušava otkriti odgovor na postavljeno pitanje. Kao rezultat toga, nakon pronalaska konačnog odgovora, pronađeni podaci se šalju klijentu koji ih još čeka, plus se pohranjuju u predmemoriju samog DNS poslužitelja, što će vam omogućiti da sljedeći put puno brže odgovorite na slično pitanje.

Čest problem je da se, prvo, podaci o DNS upitu prenose u čistom obliku (što svakome tko ima pristup protoku prometa daje mogućnost da izolira DNS upite i odgovore koje prima, a zatim ih analizira za vlastite potrebe; to daje mogućnost preciznog ciljanja oglasa za DNS klijenta, što je dosta!). Drugo, neki ISP-ovi (nećemo upirati prstom, ali ne oni najmanji) skloni su prikazivati ​​oglase umjesto jedne ili druge tražene stranice (što se vrlo jednostavno implementira: umjesto navedene IP adrese za upit habranabr.ru ime hosta, slučajna osoba. Dakle, vraća se adresa web poslužitelja pružatelja usluga, gdje se poslužuje stranica koja sadrži oglas). Treće, postoje davatelji pristupa internetu koji implementiraju mehanizam za ispunjavanje zahtjeva za blokiranje pojedinačnih stranica zamjenom ispravnih DNS odgovora o IP adresama blokiranih web resursa s IP adresom njihovog poslužitelja koji sadrži stub stranice (kao rezultat, pristup takve stranice osjetno kompliciranije), ili na adresu vašeg proxy poslužitelja koji vrši filtriranje.

Ovo bi vjerojatno trebala biti slika sa stranice. http://1.1.1.1/, koristi se za opisivanje veze s uslugom. Čini se da su autori prilično sigurni u kvalitetu svog DNS-a (međutim, teško je očekivati ​​nešto drugo od Cloudflarea):

Uslugu iz Cloudflarea susrećemo na adresama 1.1.1.1 i 1.0.0.1, ili “javna DNS polica je stigla!”

Cloudflare, tvorca usluge, možemo u potpunosti razumjeti: oni zarađuju svoj kruh održavajući i razvijajući jednu od najpopularnijih CDN mreža na svijetu (čije funkcije uključuju ne samo distribuciju sadržaja, već i hosting DNS zona), a zbog želja onih, koji nije dobro upućen, pouči one koga ne poznaju, za to gdje ići u globalnoj mreži, često pate od blokiranja adresa svojih poslužitelja nemojmo reći tko - dakle imati DNS na koji ne utječu "vici, zvižduci i škrabotine" za tvrtku znači manje štete za njihovo poslovanje. A tehničke prednosti (sitnica, ali lijepo: posebno za klijente besplatnog DNS Cloudflarea, ažuriranje DNS zapisa resursa koji se nalaze na DNS poslužiteljima tvrtke bit će trenutno) čine korištenje usluge opisane u postu još zanimljivijom.

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Hoćete li koristiti novu uslugu?

  • Da, jednostavnim navođenjem u OS-u i/ili na usmjerivaču

  • Da, i koristit ću nove protokole (DNS preko HTTP-a i DNS preko TLS-a)

  • Ne, imam dovoljno trenutnih poslužitelja (ovo je javni pružatelj: Google, Yandex itd.)

  • Ne, ne znam ni što trenutno koristim

  • Koristim svoj rekurzivni DNS sa SSL tunelom do njih

693 korisnika je glasalo. 191 korisnik je bio suzdržan.

Izvor: www.habr.com

Dodajte komentar