Storitev Cloudflare srečamo na naslovih 1.1.1.1 in 1.0.0.1 ali "javna DNS polica je prispela!"

Storitev Cloudflare srečamo na naslovih 1.1.1.1 in 1.0.0.1 ali "javna DNS polica je prispela!"

Podjetje Cloudflare predstavljeno javni DNS na naslovih:

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

Politika naj bi bila »Zasebnost na prvem mestu«, tako da so lahko uporabniki mirni glede vsebine svojih zahtev.

Storitev je zanimiva, ker poleg običajnega DNS-ja omogoča uporabo tehnologij DNS prek TLS и DNS-over-HTTPS, ki bo močno onemogočila ponudnikom, da bi na poti zahtevkov prisluškovali vašim zahtevam – in zbirali statistiko, spremljali, upravljali oglaševanje. Cloudflare trdi, da datum napovedi (1. april 2018 ali 04/01 v ameriški notaciji) ni bil izbran naključno: kateri drugi dan v letu bodo predstavljene "štiri enote"?

Ker je Habrovo občinstvo tehnično podkovano, tradicionalni razdelek "zakaj potrebujete DNS?" Dal ga bom na konec objave, tukaj pa bom navedel bolj praktično uporabne stvari:

Kako uporabljati novo storitev?

Najpreprostejša stvar je, da zgornje naslove strežnika DNS določite v svojem odjemalcu DNS (ali kot navzgor v nastavitvah lokalnega strežnika DNS, ki ga uporabljate). Ali je smiselno zamenjati običajne vrednosti Google DNS (8.8.8.8, itd.) ali nekoliko manj pogosto Javni DNS strežniki Yandex (77.88.8.8 in drugi podobni) na strežnike Cloudflare - oni se bodo odločili namesto vas, vendar govori za začetnika urnik hitrost odziva, po kateri je Cloudflare hitrejši od vseh konkurentov (pojasnim: meritve je opravila storitev tretje osebe, hitrost do določenega odjemalca pa se seveda lahko razlikuje).

Storitev Cloudflare srečamo na naslovih 1.1.1.1 in 1.0.0.1 ali "javna DNS polica je prispela!"

Precej bolj zanimivo je delo z novimi načini, v katerih zahteva leti do strežnika prek šifrirane povezave (pravzaprav se prek nje vrne odgovor), omenjeni DNS-over-TLS in DNS-over-HTTPS. Na žalost niso podprti "izven škatle" (avtorji menijo, da je to "še"), vendar ni težko organizirati njihovega dela v vaši programski opremi (ali celo na strojni opremi):

DNS prek HTTP-jev (DoH)

Kot že ime pove, komunikacija poteka preko kanala HTTPS, kar pomeni

  1. prisotnost pristajalne točke (končne točke) - nahaja se na naslovu https://cloudflare-dns.com/dns-queryIn
  2. odjemalec, ki lahko pošilja zahteve in prejema odgovore.

Zahteve so lahko bodisi v formatu DNS Wireformat, ki je definiran v RFC1035 (poslano z metodama POST in GET HTTP) ali v formatu JSON (z metodo GET HTTP). Zame osebno se je ideja o postavljanju zahtev DNS prek zahtev HTTP zdela nepričakovana, vendar je v njej racionalno zrno: takšna zahteva bo prešla številne sisteme za filtriranje prometa, razčlenjevanje odgovorov je precej preprosto, ustvarjanje zahtev pa še lažje. Za varnost so odgovorne običajne knjižnice in protokoli.

Zahtevajte primere neposredno iz dokumentacije:

Zahteva GET v 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

Zahteva POST v 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

Enako, vendar z uporabo 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čitno lahko redki (če vsaj en) domači usmerjevalnik dela z DNS na ta način, vendar to ne pomeni, da se podpora ne bo pojavila jutri - in, zanimivo, tukaj lahko delo z DNS povsem implementiramo v našo aplikacijo (kot že bo naredil Mozillo, samo na strežnikih Cloudflare).

DNS prek TLS

Privzeto se poizvedbe DNS prenašajo brez šifriranja. DNS prek TLS je način, da jih pošljete prek varne povezave. Cloudflare podpira DNS prek TLS na standardnih vratih 853, kot je predpisano RFC7858. To uporablja potrdilo, izdano za gostitelja cloudflare-dns.com, podprta sta TLS 1.2 in TLS 1.3.

Vzpostavljanje povezave in delo po protokolu poteka nekako takole:

  • Preden vzpostavi povezavo DNS, odjemalec shrani zgoščeno vrednost SHA64, kodirano base256, potrdila TLS cloudflare-dns.com (imenovano SPKI)
  • Odjemalec DNS vzpostavi povezavo TCP z cloudflare-dns.com:853
  • Odjemalec DNS sproži rokovanje TLS
  • Med postopkom rokovanja TLS gostitelj cloudflare-dns.com predstavi svoje potrdilo TLS.
  • Ko je povezava TLS vzpostavljena, lahko odjemalec DNS pošilja zahteve DNS po varnem kanalu, kar preprečuje prisluškovanje in ponarejanje zahtev in odgovorov.
  • Vse poizvedbe DNS, poslane prek povezave TLS, morajo biti skladne z pošiljanje DNS preko TCP.

Primer zahteve prek DNS preko TLS:

$ 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

Zdi se, da ta možnost najbolje deluje za lokalne strežnike DNS, ki služijo potrebam lokalnega omrežja ali posameznega uporabnika. Res je, da s podporo standarda ni zelo dobro, vendar - upajmo!

Dve besedi razlage o čem teče pogovor

Okrajšava DNS je kratica za Domain Name Service (zato je beseda "DNS storitev" nekoliko odveč, okrajšava že vsebuje besedo "storitev") in se uporablja za rešitev preproste naloge - razumeti, kakšen IP naslov ima določeno ime gostitelja. Vsakič, ko oseba klikne povezavo ali vnese naslov v naslovno vrstico brskalnika (recimo nekaj takega kot "https://habrahabr.ru/post/346430/«), človeški računalnik poskuša ugotoviti, kateremu strežniku poslati zahtevo za pridobitev vsebine strani. V primeru habrahabr.ru bo odgovor DNS vseboval navedbo naslova IP spletnega strežnika: 178.248.237.68, nato pa bo brskalnik že poskušal vzpostaviti stik s strežnikom z navedenim naslovom IP.

Po drugi strani strežnik DNS, ko prejme zahtevo "kakšen je naslov IP gostitelja z imenom habrahabr.ru?", ugotovi, ali ve kaj o določenem gostitelju. Če ne, pošlje zahtevo drugim DNS strežnikom na svetu in korak za korakom poskuša ugotoviti odgovor na zastavljeno vprašanje. Posledično se najdeni podatki po iskanju končnega odgovora pošljejo odjemalcu, ki ga še čaka, poleg tega pa se shranijo v predpomnilnik samega DNS strežnika, kar vam bo omogočilo, da naslednjič odgovorite na podobno vprašanje veliko hitreje.

Pogosta težava je, da se najprej podatki o poizvedbah DNS prenašajo v čistem stanju (kar vsem, ki imajo dostop do prometa, omogoča, da izolirajo poizvedbe DNS in odgovore, ki jih prejmejo, ter jih nato razčlenijo za lastne namene; to daje zmožnost ciljanja oglasov z natančnostjo za odjemalca DNS, kar je precej!). Drugič, nekateri internetni ponudniki (ne bomo kazali s prstom, vendar ne najmanjši) ponavadi prikazujejo oglase namesto ene ali druge zahtevane strani (kar se izvaja precej preprosto: namesto navedenega naslova IP za zahtevo gostitelja habranabr.ru ime, naključna oseba Tako se vrne naslov spletnega strežnika ponudnika, kjer je stran z oglasom servirana). Tretjič, obstajajo ponudniki dostopa do interneta, ki izvajajo mehanizem za izpolnjevanje zahtev za blokiranje posameznih spletnih mest tako, da pravilne odgovore DNS o IP naslovih blokiranih spletnih virov zamenjajo z IP naslovom svojega strežnika, ki vsebuje škrbine (posledično dostop do takšna spletna mesta opazno bolj zapletena) ali na naslov vašega proxy strežnika, ki izvaja filtriranje.

To bi verjetno morala biti slika s spletnega mesta. http://1.1.1.1/, ki se uporablja za opis povezave s storitvijo. Zdi se, da so avtorji precej prepričani v kakovost svojega DNS (vendar je od Cloudflare težko pričakovati kaj drugega):

Storitev Cloudflare srečamo na naslovih 1.1.1.1 in 1.0.0.1 ali "javna DNS polica je prispela!"

Cloudflare, ustvarjalca storitve, lahko popolnoma razumemo: služijo si kruh z vzdrževanjem in razvojem enega najbolj priljubljenih omrežij CDN na svetu (katere funkcije vključujejo ne le distribucijo vsebine, ampak tudi gostovanje con DNS) in zaradi želja tistih, ki ni dobro seznanjen, nauči jih ki jih ne poznajo, na to kam iti v globalnem omrežju pogosto trpi zaradi blokiranja naslovov svojih strežnikov ne povejmo kdo - torej imeti DNS, na katerega ne vplivajo "kriki, žvižgi in čečkanja", za podjetje pomeni manjšo škodo za njihov posel. In tehnične prednosti (malenkost, a lepo: predvsem za odjemalce brezplačnega DNS Cloudflare bo posodobitev DNS zapisov virov, ki gostujejo na DNS strežnikih podjetja, še bolj zanimiva uporaba storitve, opisane v objavi.

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Boste uporabljali novo storitev?

  • Da, tako da ga preprosto določite v OS in / ali na usmerjevalniku

  • Da, in uporabil bom nove protokole (DNS prek HTTP in DNS prek TLS)

  • Ne, imam dovolj trenutnih strežnikov (to je javni ponudnik: Google, Yandex itd.)

  • Ne, sploh ne vem, kaj trenutno uporabljam

  • Uporabljam svoj rekurzivni DNS s tunelom SSL do njih

Glasovali so 693 uporabniki. 191 uporabnik se je vzdržal.

Vir: www.habr.com

Dodaj komentar