
Tvrtka Cloudflare predstavila javne DNS adrese:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
Tvrdimo da se koristi politika «Privacy first», tako da korisnici mogu biti sigurni u sadržaj svojih upita.
Služba je zanimljiva jer osim običnog DNS-a omogućava korištenje tehnologija DNS-over-TLS i DNS-over-HTTPS, što će značajno otežati davateljima usluga da prisluškuju vaše upite na putu — i prikupljaju statistiku, nadgledaju, upravljaju oglašavanjem. Cloudflare tvrdi da je datum objave (1. travnja 2018., ili 04/01 u američkoj notaciji) izabran slučajno: na koji bi dan u godini inače predstavili «četiri jedinice»?
Budući da je publika Habr tehnički potkovana, tradicionalni odjeljak «zašto je DNS potreban?» stavit ću na kraj posta, a ovdje ću iznijeti praktičnije korisne stvari:
Kako koristiti novu uslugu?
Najjednostavnije — u svom DNS klijentu (ili kao upstream u postavkama vašeg lokalnog DNS poslužitelja) navedite gornje adrese DNS-poslužitelja.Ima li smisla zamijeniti uobičajene vrijednosti Googleovih DNS (8.8.8.8 itd.), ili malo manje rasprostranjenih Yandexovih javnih DNS poslužitelja (77.88.8.8 i sličnih) sa poslužiteljima od Cloudflare — odluka je na vama, ali novima u prilog govori grafikon brzina odgovora, prema kojoj Cloudflare radi brže od svih konkurenata (dodajem: mjerenja su napravljena od strane treće usluge, a brzina do konkretnog klijenta, naravno, može se razlikovati).

Mnogo je zanimljivije raditi s novim načinima, u kojima zahtjev odlazi na server šifriranoj vezi (u stvari, odgovor se vraća kroz istu), spomenutim DNS-over-TLS i DNS-over-HTTPS. Nažalost, «iz kutije» oni nisu podržani (autori vjeruju da je to «za sada»), ali organizirati njihovu upotrebu u svom softveru (ili čak na vlastitu opremu) nije teško:
DNS over HTTPS (DoH)
Kao što naziv sugerira, komunikacija se odvija preko HTTPS kanala, što podrazumijeva
- postojanje točke prizemljenja (endpoint) — ona se nalazi na adresi https://cloudflare-dns.com/dns-query, i
- klijenta koji može slati zahtjeve i primati odgovore.
Zahtjevi mogu biti ili u DNS Wireformat formatu, definiranim u RFC1035 (slanje HTTP metodama POST i GET), ili u JSON formatu (koristi se HTTP metoda GET). Osobno mi je ideja obavljanja DNS upita putem HTTP zahtjeva djelovala neočekivano, no postoji razuman razlog za to: takav zahtjev će proći kroz mnoge sustave filtriranja prometa, a analizirati odgovore je dovoljno jednostavno, dok je formirati zahtjeve još lakše. Za sigurnost odgovaraju poznate biblioteke i protokoli.
Primjeri zahtjeva, direktno iz dokumentacije:
GET zahtjev u DNS Wireformat formatu
$ curl -v "https://cloudflare-dns.com/dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" | hexdump
* Koristeći HTTP2, server podržava višekratnu upotrebu
* Stanje veze se promijenilo (HTTP/2 potvrđeno)
* Kopiranje HTTP/2 podataka iz stream bafera u bafer veze nakon nadogradnje: len=0
* Koristeći 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: */*
* Stanje veze se promijenilo (MAX_CONCURRENT_STREAMS ažurirano)!
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
* Veza #0 s hostom cloudflare-dns.com ostavljena netaknuta
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
* Veza #0 s hostom cloudflare-dns.com ostavljena netaknuta
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 s korištenjem JSON-a
$ 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 je da rijetki (ako uopće i jedan) kućni usmjerivač zna raditi s DNS-om na ovaj način, no to ne znači da podrška neće doći sutra — zanimljivo je da ovdje možemo realizirati rad s DNS-om unutar vlastite aplikacije (kao što već namjerava učiniti Mozilla, upravo na serverima Cloudflare).
DNS over TLS
Po defaultu, DNS zahtjevi se šalju bez enkripcije. DNS over TLS je način slanja zahtjeva preko zaštićene veze. Cloudflare podržava DNS over TLS na standardnom portu 853, kao što je propisano RFC7858. Pri tome se koristi certifikat izdan za host cloudflare-dns.com, a podržavaju se TLS 1.2 i TLS 1.3.
Uspostavljanje veze i rad protokola odvijaju se otprilike ovako:
- Prije uspostavljanja veze, DNS klijent pohranjuje kodirani u base64 SHA256 hash TLS certifikata cloudflare-dns.com (poznat kao SPKI)
- DNS klijent uspostavlja TCP vezu s cloudflare-dns.com:853
- DNS klijent inicira postupak TLS handshake-a
- Tijekom TLS handshake-a, host cloudflare-dns.com prikazuje svoj TLS certifikat.
- Kada je TLS veza uspostavljena, DNS klijent može slati DNS zahtjeve preko zaštićenog kanala, što sprječava prisluškivanje i falsificiranje zahtjeva i odgovora.
- Svi DNS zahtjevi poslani preko TLS veze moraju biti u skladu sa specifikacijom za slanje DNS-a preko TCP-a.
Primjer zahtjeva putem DNS over TLS:
$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com
;; DEBUG: Upit za vlasnika(example.com.), klasa(1), tip(1), server(1.1.1.1), port(853), protokol(TCP)
;; DEBUG: TLS, importirano 170 sustavnih certifikata
;; DEBUG: TLS, primljena hijerarhija certifikata:
;; 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, preskočen provjera certifikata PIN
;; DEBUG: TLS, Certifikat je pouzdan.
;; TLS sesija (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:
;; Verzija: 0; flags: ; UDP veličina: 1536 B; ext-rcode: NOERROR
;; PADDING: 408 B
;; PITANJE SEKCIJA:
;; example.com. IN A
;; ODGOVOR SEKCIJA:
example.com. 2347 IN A 93.184.216.34
;; Primljeno 468 B
;; Vrijeme 2018-03-31 15:20:57 PDT
;; Od 1.1.1.1@853(TCP) u 12.6 ms
Ova opcija se čini boljom za lokalne DNS poslužitelje koji opslužuju potrebe lokalne mreže ili jednog korisnika. Međutim, podrška standarda nije najbolja, ali — nadamo se!
Dva riječi objašnjenja, o čemu se radi
Skraćenica DNS se šifrira kao Domena Name Service (tako da je izraz "DNS servis" pomalo redundantan, u skraćenici već postoji riječ "servis"), i koristi se za rješavanje jednostavnog zadatka — razumjeti koji je IP adresa za određeno ime hosta. Svaki put kada osoba klikne na link ili unese adresu u adresnu traku preglednika (recimo, nešto poput "https://habrahabr.ru/post/346430/«), računalo pokušava razumjeti kojem serveru treba poslati zahtjev za dobivanje sadržaja stranice. U slučaju habrahabr.ru, odgovor od DNS-a će sadržavati IP adresu web servera: 178.248.237.68, i tada će se preglednik pokušati povezati sa serverom na toj IP adresi.
Server DNS, primivši zahtjev „koja je IP adresa hosta pod imenom habrahabr.ru?“, utvrđuje zna li išta o navedenom hostu. Ako ne, šalje zahtjev drugim DNS serverima širom svijeta, i korak po korak pokušava doći do odgovora na postavljeno pitanje. Na kraju, kada se pronađe konačni odgovor, pronađeni podaci šalju se klijentu koji čeka, a također se čuvaju u predmemoriji samog DNS servera, što će omogućiti brže odgovaranje na slična pitanja sljedeći put.
Uobičajeni problem je, prvo, što se podaci DNS zahtjeva prenose u otvorenom obliku (što omogućava svima koji imaju pristup prometu da izdvoje DNS zahtjeve i odgovore te ih analiziraju za svoje svrhe; to omogućava ciljanje oglasa s preciznošću za klijenta DNS, što nije zanemarivo!). Drugo, neki internet provajderi (nećemo imenovati, ali nisu najmaleniji) imaju tendenciju prikazivanja reklama umjesto određenih traženih stranica (što se realizira vrlo jednostavno: umjesto navedene IP adrese za zahtjev za ime hosta habranabr.ru, korisniku se nasumično vraća adresa web servera provajdera, gdje se prikazuje stranica s reklamama). Treće, postoje provajderi internet pristupa koji implementiraju mehanizam izvršavanja zahtjeva za blokiranje određenih web stranica, zamjenjujući pravilne DNS odgovore o IP adresama blokiranih web resursa s IP adresom svog servera, koji sadrži stranice s obavijestima (kao rezultat, pristup takvim web stranicama postaje znatno otežan), ili s adresom svog proxy servera koji filtrira.
Ovde je verovatno potrebno postaviti sliku sa stranice http://1.1.1.1/, koja služi za opisivanje povezivanja s uslugom. Autori su, očigledno, potpuno sigurni u kvalitetu rada svog DNS-a (iako je teško očekivati drugačije od Cloudflare-a):

Možete shvatiti tvrtku Cloudflare, kreatora usluge: oni zarađuju svoj kruh održavajući i razvijajući jednu od najpopularnijih CDN mreža na svijetu (među funkcijama je ne samo distribucija sadržaja, već i hosting DNS zona), i iz želje tih, koji nisu previše upućeni, poučavati one, koga ne poznaju, o tome, gdje ići u globalnoj mreži, često pate od blokiranja adresa svojih servera od strane nećemo govoriti o tome tko — tako da prisutnost DNS-a koji nije pod utjecajem "vikanja, zvižduka i beleške", za tvrtku znači manju štetu njihovom poslovanju. A tehničke prednosti (sitnica, ali draga: naime, za klijente besplatnog DNS-a Cloudflare ažuriranje DNS zapisa resursa smještenih na DNS serverima tvrtke bit će trenutna) čine korištenje opisanog servisa još zanimljivijim.
Samo registrirani korisnici mogu sudjelovati u anketi. Prijavite se, molimo.
Hoćete li koristiti novu uslugu?
- Da, samo ga postavljam u OS i/ili na routeru
- Da, i koristit ću nove protokole (DNS preko HTTPs i DNS preko TLS-a)
- Ne, dovoljno mi je trenutnih servera (to je javni davatelj: Google, Yandex i dr.)
- Ne, čak ni ne znam što trenutno koristim
- Koristim svoje rekurzivne DNS s SSL tunelom do njih
Glasalo je 693 korisnika. 191 korisnik se suzdržao.
Izvor: habr.com
