Se službou od Cloudflare se setkáváme na adresách 1.1.1.1 a 1.0.0.1, neboli „dorazila veřejná police DNS!“

Se službou od Cloudflare se setkáváme na adresách 1.1.1.1 a 1.0.0.1, neboli „dorazila veřejná police DNS!“

Společnost Cloudflare prezentovány veřejné DNS na adresách:

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

Tvrdí se, že se používá zásada „Soukromí na prvním místě“, aby si uživatelé mohli být jisti obsahem svých požadavků.

Služba je zajímavá tím, že kromě běžného DNS poskytuje možnost využívat technologie DNS-over-TLS и DNS-over-HTTPS, což výrazně zabrání poskytovatelům odposlouchávat vaše požadavky na cestě požadavků – a shromažďovat statistiky, monitorovat a spravovat reklamu. Cloudflare tvrdí, že datum oznámení (1. dubna 2018 nebo 04/01 v americké notaci) nebylo vybráno náhodou: ve který jiný den v roce by byly „čtyři jednotky“ představeny?

Protože Habrovo publikum je technicky zdatné, tradiční sekce „proč potřebujeme DNS?“ Dám to na konec příspěvku a zde nastíním další prakticky užitečné věci:

Jak používat novou službu?

Nejjednodušší je zadat výše uvedené adresy serverů DNS ve vašem klientovi DNS (nebo jako upstream v nastavení místního serveru DNS, který používáte). Má smysl nahrazovat obvyklé hodnoty? Google DNS (8.8.8.8 atd.), nebo o něco méně časté Veřejné servery DNS Yandex (77.88.8.8 a jim podobné) na servery od Cloudflare - rozhodnou za vás, ale to mluví za začátečníka jízdní řád rychlost odpovědí, podle které Cloudflare funguje rychleji než všichni konkurenti (upřesním: měření provedla služba třetí strany a rychlost konkrétnímu klientovi se samozřejmě může lišit).

Se službou od Cloudflare se setkáváme na adresách 1.1.1.1 a 1.0.0.1, neboli „dorazila veřejná police DNS!“

Mnohem zajímavější je práce s novými režimy, ve kterých požadavek letí na server přes šifrované spojení (ve skutečnosti se přes něj vrací odpověď), zmíněný DNS-over-TLS a DNS-over-HTTPS. Bohužel nejsou po vybalení podporovány (autoři se domnívají, že je to „zatím“), ale organizovat jejich práci ve vašem softwaru (nebo dokonce na vašem hardwaru) není obtížné:

DNS přes HTTPs (DoH)

Jak název napovídá, komunikace probíhá přes HTTPS kanál, což znamená

  1. přítomnost přistávacího bodu (koncového bodu) - nachází se na https://cloudflare-dns.com/dns-queryA
  2. klient, který může odesílat požadavky a přijímat odpovědi.

Požadavky mohou být buď ve formátu DNS Wireformat definovaném v RFC1035 (odesláno pomocí metod POST a GET HTTP), nebo ve formátu JSON (pomocí metody GET HTTP). Pro mě osobně se myšlenka vytváření DNS dotazů prostřednictvím požadavků HTTP zdála neočekávaná, ale je v tom racionální zrno: takový požadavek projde mnoha systémy filtrování provozu, analýza odpovědí je poměrně jednoduchá a generování požadavků je ještě jednodušší. Za bezpečnost jsou zodpovědné známé knihovny a protokoly.

Příklady dotazů přímo z dokumentace:

Požadavek GET ve formátu 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

Požadavek POST ve formátu 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

Totéž, ale pomocí 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"
    }
  ]
}

Je zřejmé, že málokterý (pokud vůbec nějaký) domácí router umí s DNS takto pracovat, ale to neznamená, že se podpora neobjeví zítra – a zajímavé je, že zde práci s DNS můžeme snadno implementovat do naší aplikace (jak již bylo uvedeno se chystá udělat Mozillu, pouze na serverech Cloudflare).

DNS přes TLS

Ve výchozím nastavení jsou dotazy DNS odesílány bez šifrování. DNS over TLS je způsob, jak je odeslat přes zabezpečené připojení. Cloudflare podporuje DNS přes TLS na standardním portu 853, jak je předepsáno RFC7858. Používá certifikát vydaný pro hostitele cloudflare-dns.com, jsou podporovány TLS 1.2 a TLS 1.3.

Navázání spojení a práce s protokolem probíhá asi takto:

  • Před navázáním připojení k DNS si klient uloží hash SHA64 s kódováním base256 certifikátu TLS cloudflare-dns.com (nazývaného SPKI).
  • Klient DNS naváže připojení TCP k cloudflare-dns.com:853
  • Klient DNS zahájí proceduru handshake TLS
  • Během handshake TLS hostitel cloudflare-dns.com předloží svůj certifikát TLS.
  • Jakmile je navázáno připojení TLS, klient DNS může odesílat dotazy DNS přes zabezpečený kanál, který zabraňuje odposlechu a padělání požadavků a odpovědí.
  • Všechny požadavky DNS odeslané přes připojení TLS musí odpovídat specifikaci podle odesílání DNS přes TCP.

Příklad požadavku přes DNS přes 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

Tato volba se zdá být vhodnější pro lokální DNS servery sloužící potřebám lokální sítě nebo jednoho uživatele. Pravda, podpora standardu není příliš dobrá, ale doufejme!

Dvě slova na vysvětlení toho, o čem mluvíme

Zkratka DNS znamená Domain Name Service (takže říkat „služba DNS“ je poněkud nadbytečné; zkratka již obsahuje slovo „service“) a používá se k vyřešení jednoduchého úkolu - pochopit, jakou IP adresu má konkrétní název hostitele. Pokaždé, když někdo klikne na odkaz nebo zadá adresu (řekněme něco jako „https://habrahabr.ru/post/346430/"), počítač osoby se snaží zjistit, na který server má odeslat požadavek na přijetí obsahu stránky. V případě habrahabr.ru bude odpověď z DNS obsahovat údaj o IP adrese webového serveru: 178.248.237.68 a prohlížeč se poté pokusí kontaktovat server se zadanou IP adresou.

DNS server poté, co obdrží požadavek „jaká je IP adresa hostitele s názvem habrahabr.ru?“, zjistí, zda ví něco o zadaném hostiteli. Pokud ne, zadá dotaz na jiné servery DNS na světě a krok za krokem se pokusí najít odpověď na položenou otázku. Výsledkem je, že po nalezení konečné odpovědi jsou nalezená data odeslána stále čekajícímu klientovi a navíc jsou uložena v mezipaměti samotného DNS serveru, což vám příště umožní odpovědět na podobnou otázku mnohem rychleji.

Častým problémem je, že za prvé, data dotazů DNS jsou odesílána v čistém stavu (což umožňuje komukoli s přístupem k toku provozu izolovat dotazy DNS a výsledné odpovědi a poté je analyzovat pro své vlastní účely; to umožňuje přesně cílit reklamu na klienta DNS, a to je opravdu hodně!). Za druhé, někteří poskytovatelé internetu (nebudeme ukazovat prstem, ale ne ti nejmenší) mají tendenci zobrazovat reklamu místo jedné nebo druhé požadované stránky (což je implementováno velmi jednoduše: místo zadané IP adresy pro požadavek na název hostitele habranabr.ru náhodné osobě Tímto způsobem je vrácena adresa webového serveru poskytovatele, na kterém se zobrazuje stránka obsahující inzerát). Za třetí, existují poskytovatelé přístupu k internetu, kteří implementují mechanismus pro splnění požadavků na blokování jednotlivých stránek tím, že nahradí správné odpovědi DNS o IP adresách blokovaných webových zdrojů IP adresou jejich serveru obsahujícího stub stránky (v důsledku toho bude přístup k takové stránky se znatelně zkomplikují), nebo na adresu vašeho proxy serveru, který provádí filtrování.

Asi byste sem měli dát obrázek z webu http://1.1.1.1/, který slouží k popisu připojení ke službě. Autoři jsou zjevně zcela přesvědčeni o kvalitě svého DNS (od Cloudflare je však těžké očekávat něco jiného):

Se službou od Cloudflare se setkáváme na adresách 1.1.1.1 a 1.0.0.1, neboli „dorazila veřejná police DNS!“

Cloudflare, tvůrce služby, lze zcela pochopit: vydělávají si na chleba podporou a rozvojem jedné z nejpopulárnějších sítí CDN na světě (jejíž funkce zahrnují nejen distribuci obsahu, ale také hostování DNS zón) a, kvůli touze těch, kdo toho moc neví, učit je koho neznají, k tomu kam jít na globální síti poměrně často trpí blokováním adres svých serverů nebudeme říkat kdo - takže mít DNS, které není ovlivněno „výkřiky, pískáním a klikyháky“, znamená pro společnost menší poškození jejich podnikání. A technické výhody (malá věc, ale pěkná: zejména pro klienty bezplatného DNS Cloudflare bude aktualizace DNS záznamů zdrojů hostovaných na serverech DNS společnosti okamžitá) činí používání služby popsané v příspěvku ještě zajímavějším .

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Budete novou službu využívat?

  • Ano, stačí to zadat v OS a/nebo na routeru

  • Ano a budu používat nové protokoly (DNS přes HTTPs a DNS přes TLS)

  • Ne, mám dostatek aktuálních serverů (toto je veřejný poskytovatel: Google, Yandex atd.)

  • Ne, ani nevím, co teď používám

  • Používám vlastní rekurzivní DNS s tunelem SSL před nimi

693 uživatelé hlasovali. 191 uživatel se zdržel hlasování.

Zdroj: www.habr.com

Přidat komentář