Uslugu Cloudflarea srećemo na adresama 1.1.1.1 i 1.0.0.1, ili „javna DNS polica je stigla!“

Uslugu Cloudflarea srećemo na adresama 1.1.1.1 i 1.0.0.1, ili „javna DNS polica je stigla!“

Cloudflare Company predstavljen javni DNS na adresama:

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

Za ovu politiku se kaže da je "Privatnost na prvom mjestu" kako bi korisnici mogli biti mirni u vezi sa sadržajem svojih zahtjeva.

Usluga je zanimljiva po tome što, pored uobičajenog DNS-a, pruža mogućnost korištenja tehnologija DNS-over-TLS и DNS preko HTTPS-a, što će u velikoj mjeri spriječiti provajdere da prisluškuju vaše zahtjeve na putu zahtjeva - i prikupljaju statistiku, prate, upravljaju oglašavanjem. Cloudflare tvrdi da datum objave (1. april 2018. ili 04/01 u američkoj notaciji) nije izabran slučajno: koji drugi dan u godini će biti predstavljene „četiri jedinice“?

Budući da je Habrova publika tehnički potkovana, tradicionalna rubrika "zašto vam treba DNS?" Staviću to na kraj posta, ali ovde ću navesti više praktičnih stvari:

Kako koristiti novu uslugu?

Najjednostavnije je da navedete gore navedene adrese DNS servera u vašem DNS klijentu (ili kao upstream u postavkama lokalnog DNS servera koji koristite). Ima li smisla zamijeniti uobičajene vrijednosti Google DNS (8.8.8.8, itd.), ili nešto rjeđe Yandex javni DNS serveri (77.88.8.8 i njima slični) serverima 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šila usluga treće strane, a brzina do određenog klijenta, naravno, može se razlikovati).

Uslugu Cloudflarea srećemo na adresama 1.1.1.1 i 1.0.0.1, ili „javna DNS polica je stigla!“

Mnogo je interesantnije raditi s novim modovima u kojima zahtjev leti do servera preko šifrovane veze (u stvari, odgovor se vraća preko nje), pomenutim 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 i na vašem hardveru):

DNS preko HTTPs (DoH)

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

  1. prisustvo tačke sletanja (krajnje tačke) - nalazi se na adresi https://cloudflare-dns.com/dns-queryi
  2. klijent koji može slati zahtjeve i primati odgovore.

Zahtjevi mogu biti u formatu DNS Wireformat definiranom u RFC1035 (poslano korištenjem POST i GET HTTP metoda) ili u JSON formatu (pomoću GET HTTP metode). Za mene lično, ideja o upućivanju DNS zahtjeva putem HTTP zahtjeva činila se neočekivanom, ali u tome postoji racionalno zrno: takav zahtjev će proći mnoge sisteme za filtriranje prometa, raščlanjivanje odgovora je prilično jednostavno, a generiranje zahtjeva još lakše. Uobičajene biblioteke i protokoli su odgovorni za sigurnost.

Zatražite primjere, direktno iz dokumentacije:

GET zahtjev u DNS Wireformat formatu

$ 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 DNS Wireformat formatu

$ 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čigledno, rijedak (ako barem jedan) kućni ruter može raditi sa 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 sa DNS-om u našoj aplikaciji (kao što je već napravit ću Mozilu, samo na Cloudflare serverima).

DNS preko TLS-a

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

Uspostavljanje veze i rad po protokolu ide otprilike ovako:

  • Prije uspostavljanja DNS veze, klijent pohranjuje base64 kodiran SHA256 hash TLS certifikata cloudflare-dns.com (nazvan SPKI)
  • DNS klijent uspostavlja TCP vezu sa cloudflare-dns.com:853
  • DNS klijent pokreće TLS rukovanje
  • Tokom TLS procesa rukovanja, cloudflare-dns.com domaćin predstavlja svoj TLS sertifikat.
  • Jednom kada 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 sa 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 servere koji služe potrebama lokalne mreže ili jednog korisnika. Istina, uz podršku standarda nije baš dobro, ali - nadajmo se!

Dvije riječi objašnjenja o čemu je razgovor

Skraćenica DNS je skraćenica od Domain Name Service (tako da je izgovor "DNS service" donekle suvišan, skraćenica već sadrži riječ "service"), a koristi se za rješavanje jednostavnog zadatka - da se shvati koju IP adresu ima određeno ime hosta. Svaki put kada osoba klikne na link, ili unese adresu u adresnu traku pretraživača (recimo, nešto poput "https://habrahabr.ru/post/346430/"), ljudski računar pokušava otkriti kojem serveru da pošalje zahtjev da dobije sadržaj stranice. U slučaju habrahabr.ru, odgovor DNS-a će sadržavati indikaciju IP adrese web servera: 178.248.237.68, a zatim će pretraživač već pokušati da kontaktira server sa navedenom IP adresom.

Zauzvrat, DNS server, nakon što je primio zahtjev „koja je IP adresa hosta po imenu habrahabr.ru?“, utvrđuje da li zna išta o navedenom hostu. Ako ne, postavlja zahtjev drugim DNS serverima u svijetu i, korak po korak, pokušava pronaći odgovor na postavljeno pitanje. Kao rezultat toga, po pronalaženju konačnog odgovora, pronađeni podaci se šalju klijentu koji ih još čeka, plus se pohranjuju u keš samog DNS servera, što će vam omogućiti da sljedeći put odgovorite na slično pitanje mnogo brže.

Uobičajeni problem je taj što se, prvo, podaci DNS upita prenose u čistom obliku (što svakome ko ima pristup protoku saobraćaja daje mogućnost da izoluje DNS upite i odgovore koje prima, a zatim ih raščlani za vlastite svrhe; ovo daje mogućnost preciznog ciljanja oglasa za DNS klijenta, što je dosta!). Drugo, neki ISP-ovi (nećemo upirati prstom, ali ne i najmanji) imaju tendenciju da prikazuju oglase umjesto jedne ili druge tražene stranice (što se implementira vrlo jednostavno: umjesto navedene IP adrese za upit od strane habranabr.ru ime hosta, nasumična osoba. Dakle, vraća se adresa web servera provajdera na kojem se servira stranica koja sadrži oglas). Treće, postoje provajderi pristupa Internetu koji implementiraju mehanizam za ispunjavanje zahtjeva za blokiranje pojedinačnih stranica zamjenom ispravnih DNS odgovora o IP adresama blokiranih web resursa IP adresom svog servera koji sadrži stub stranice (kao rezultat toga, pristup do takve stranice znatno složenije) ili na adresu vašeg proxy servera koji vrši filtriranje.

Ovo bi vjerovatno trebala biti slika sa stranice. http://1.1.1.1/, koji se koristi za opisivanje veze sa 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 Cloudflarea srećemo na adresama 1.1.1.1 i 1.0.0.1, ili „javna DNS polica je stigla!“

U potpunosti se može razumjeti Cloudflare, kreator servisa: oni zarađuju za kruh održavajući i razvijajući jednu od najpopularnijih CDN mreža na svijetu (koje funkcije uključuju ne samo distribuciju sadržaja, već i hostovanje DNS zona), a zbog želja onih, koji nije dobro upućen, nauči ih koga ne poznaju, za to gdje ići u globalnoj mreži, često pati od blokiranja adresa svojih servera da ne kažemo ko - pa imati DNS na koji ne utiču "vici, zvižduci i škrabotine" za kompaniju znači manje štete za njihovo poslovanje. A tehničke prednosti (sitnica, ali zgodna: posebno za klijente besplatnog DNS Cloudflarea, ažuriranje DNS zapisa resursa koji se nalaze na DNS serverima kompanije će biti trenutno) čine korištenje usluge opisane u postu još zanimljivijom.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Hoćete li koristiti novu uslugu?

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

  • Da, i ja ću koristiti nove protokole (DNS preko HTTPs-a i DNS preko TLS-a)

  • Ne, imam dovoljno trenutnih servera (ovo je javni provajder: Google, Yandex, itd.)

  • Ne, čak ni ne znam šta trenutno koristim

  • Koristim svoj rekurzivni DNS sa SSL tunelom do njih

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

izvor: www.habr.com

Dodajte komentar