
Společnost Cloudflare představila 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á politika „Privacy first“, takže uživatelé mohou mít klid ohledně obsahu svých dotazů.
Služba je zajímavá tím, že kromě běžného DNS nabízí možnost využívat technologie DNS-over-TLS a DNS-over-HTTPS, což významně ztíží poskytovatelům sledování vašich dotazů a sběr statistik, sledování a řízení reklamy. Cloudflare tvrdí, že datum oznámení (1. dubna 2018, nebo 04/01 v americké notaci) nebylo vybráno náhodně: v jaký jiný den roku představit „čtyři jedničky“?
Jelikož je publikum Habra technicky zdatné, tradiční sekci „proč potřebujeme DNS?“ umístím na konec příspěvku, a zde uvedu prakticky užitečnější informace:
Jak používat novou službu?
Nejjednodušší způsob — ve svém DNS klientovi (nebo jako upstream v nastavení vašeho používaného lokálního DNS serveru) uvedeme výše zmíněné adresy DNS-serverů. Má smysl nahradit obvyklé hodnoty google DNS (8.8.8.8 a podobně), nebo o něco méně rozšířené yandex veřejné DNS servery (77.88.8.8 a jim podobné) servery od Cloudflare — rozhodnete se vy, ale nováček na straně graf rychlostí odpovědí, podle které Cloudflare funguje rychleji než všichni konkurenti (upřesním: měření byla provedena třetí stranou, a rychlost k konkrétnímu klientovi se samozřejmě může lišit).

O mnoho zajímavější je práce s novými režimy, ve kterých dotaz odchází na server šifrovaném spojení (sám o sobě se odpověď vrací stejným způsobem), zmíněnými DNS-over-TLS a DNS-over-HTTPS. Bohužel, „z krabice“ nejsou podporovány (autoři věří, že to „zatím“), ale uspořádat jejich funkci ve vlastním softwaru (nebo dokonce na vlastní hardwaru) není těžké:
DNS over HTTPS (DoH)
Jak vyplývá z názvu, komunikace probíhá na vrchu HTTPS kanálu, což vyžaduje
- existenci koncového bodu (endpoint) — nachází se na adrese https://cloudflare-dns.com/dns-query, a
- klienta, který umí odesílat dotazy a přijímat odpovědi.
Dotazy mohou být buď ve formátu DNS Wireformat, definovaném v RFC1035 (odesílat pomocí HTTP metod POST a GET), nebo ve formátu JSON (používá se HTTP metoda GET). Pro mě osobně byla myšlenka provádět DNS dotazy pomocí HTTP dotazů nečekaná, ale má v sobě racionální jádro: takový dotaz projde mnoha systémy filtrování provozu, parsování odpovědí je dost jednoduché a vytváření dotazů je ještě snazší. O bezpečnost se starají obvyklé knihovny a protokoly.
Příklady dotazů přímo z dokumentace:
GET dotaz ve formátu DNS Wireformat
$ curl -v "https://cloudflare-dns.com/dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" | hexdump
* Používá se HTTP2, server podporuje opakované použití
* Stav připojení se změnil (HTTP/2 potvrzeno)
* Kopírování dat HTTP/2 do bufferu připojení po upgradu: len=0
* Používá se ID streamu: 1 (snadný handle 0x7f968700a400)
GET /dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2
Host: cloudflare-dns.com
User-Agent: curl/7.54.0
Accept: */*
* Stav připojení se změnil (MAX_CONCURRENT_STREAMS aktualizováno)!
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
* Připojení #0 k hostiteli cloudflare-dns.com zůstalo neporušené
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 dotaz 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
* Připojení #0 k hostiteli cloudflare-dns.com zůstalo neporušené
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
To samé, ale s použitím 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 raritní (pokud vůbec nějaký) domácí router umí takto pracovat s DNS, ale to neznamená, že podpora se nezjeví zítra — a co je zajímavé, zde můžeme zcela realizovat práci s DNS ve své aplikaci (jak už by chtěla udělat Mozilla, právě na serverech Cloudflare).
DNS over TLS
Ve výchozím nastavení jsou DNS dotazy odesílány nešifrovaně. DNS over TLS je způsob, jak je odesílat přes zabezpečené připojení. Cloudflare podporuje DNS over TLS na standardním portu 853, jak je předepsáno. RFC7858. Při tom se používá certifikát vydaný pro hostitele cloudflare-dns.com, podporují se TLS 1.2 a TLS 1.3.
Navázání spojení a práce podle protokolu probíhá přibližně takto:
- Před navázáním spojení s DNS klient uchovává zakódovaný v base64 SHA256-hash TLS certifikátu cloudflare-dns.com (nazývaný SPKI).
- DNS klient navazuje TCP spojení s cloudflare-dns.com:853.
- DNS klient iniciuje postup TLS handshake.
- Během TLS handshake hostitel cloudflare-dns.com předkládá svůj TLS certifikát.
- Jakmile je TLS spojení navázáno, DNS klient může odesílat DNS dotazy přes zabezpečený kanál, což brání odposlechu a podvržení dotazů a odpovědí.
- Všechny DNS dotazy odesílané přes TLS spojení musí vyhovovat specifikaci pro odesílání DNS přes TCP..
Příklad dotazu přes DNS over TLS:
$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com
;; DEBUG: Dotazování na majitele(example.com.), třídu(1), typ(1), server(1.1.1.1), port(853), protokol(TCP)
;; DEBUG: TLS, importováno 170 systémových certifikátů
;; DEBUG: TLS, přijato certifikátové hierarchie:
;; 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, přeskočení kontrolního PIN certifikátu
;; DEBUG: TLS, Certifikát je důvěryhodný.
;; 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:
;; Verze: 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
;; Přijato 468 B
;; Čas 2018-03-31 15:20:57 PDT
;; Z 1.1.1.1@853(TCP) za 12.6 ms
Tato varianta se zdá být lépe vhodná pro místní DNS servery obsluhující potřeby místní sítě nebo jednotlivého uživatele. Pravda, podpora standardu není příliš dobrá, ale — doufejme!
Dva slova vysvětlení, o čem je řeč.
Zkratka DNS znamená Doména Name Service (takže říkat „DNS služba“ je poněkud nadbytečné, ve zkratce už slovo „služba“ je obsaženo), a používá se k řešení jednoduchého úkolu — pochopit, jaká IP adresa patří určitému názvu hostitele. Každýkrát, když člověk klikne na odkaz, nebo zadá do adresního řádku prohlížeče adresu (řekněme něco jako „https://habrahabr.ru/post/346430/Počítač se snaží zjistit, na který server by měl poslat žádost o načtení obsahu stránky. V případě habrahabr.ru odpověď od DNS obsahuje IP adresu webového serveru: 178.248.237.68, a poté se už prohlížeč pokusí spojit se serverem na uvedené IP adrese.
DNS server, který obdržel dotaz „jaká je IP adresa pro hostitele s názvem habrahabr.ru?“, zjistí, zda má nějaké informace o uvedeném hostiteli. Pokud ne, dotazuje se dalších DNS serverů po celém světě a krok za krokem se snaží najít odpověď na předloženou otázku. Nakonec, jakmile je nalezena konečná odpověď, jsou získaná data odeslána stále čekajícímu klientovi a navíc jsou uložena do cache samotného DNS serveru, což umožní rychlejší odpověď na podobné dotazy v budoucnu.
Běžný problém spočívá v tom, že za prvé, informace o DNS dotazech se přenášejí v otevřené podobě (což umožňuje každému, kdo má přístup k provozu, extrahovat DNS dotazy a obdržené odpovědi, a následně je analyzovat pro své účely; to dává možnost cílené reklamy s přesností na klienta DNS, což není zanedbatelné!). Za druhé, někteří internetoví poskytovatelé (nebudeme ukazovat prstem, ale nejsou to ti nejmenší) mají tendenci zobrazovat reklamu místo určité požadované stránky (což se realizuje velmi jednoduše: místo uvedené IP adresy pro dotaz podle názvu hostitele habranabr.ru je člověku náhodně vrácena adresa webového serveru poskytovatele, kde se zobrazuje stránka obsahující reklamu). Za třetí, existují poskytovatelé internetového přístupu, kteří implementují mechanismus provádění požadavků na blokování jednotlivých webových stránek, prostřednictvím nahrazení správných DNS odpovědí o IP adresách blokovaných webových zdrojů IP adresou svého serveru, který obsahuje strany-záhlaví (což výrazně ztěžuje přístup k takovým stránkám), nebo na adresu svého proxy serveru, který provádí filtraci.
Zde by pravděpodobně mělo být obrázek ze stránky http://1.1.1.1/, sloužící k popisu připojení k službě. Autoři, jak je vidět, jsou si zcela jisti kvalitou svého DNS (však od Cloudflare se těžko čeká něco jiného):

Je možné plně pochopit společnost Cloudflare, tvůrce služby: živí se tím, že podporují a rozvíjejí jednu z nejpopulárnějších CDN sítí na světě (mezi jejími funkcemi je nejen distribuce obsahu, ale také hosting DNS zón), a protože chtějí učit ty, kdo se v tom příliš nevyzná, učit ty, které neznají, co, kam chodit na globálním internetu, často trpí blokováním adres svých serverů ze strany nebudeme říkat koho — takže mít DNS, které není ovlivněno „výkřiky, pískáním a poznámkami“, pro firmu znamená menší škodu pro jejich podnikání. A technické výhody (malý detail, ale potěší: konkrétně pro klienty zdarma DNS Cloudflare bude aktualizace DNS záznamů zdrojů umístěných na DNS serverech společnosti okamžitá) činí používání popisované služby ještě zajímavější.
Pouze registrovaní uživatelé se mohou účastnit ankety. Přihlaste se, prosím.
Použijete novou službu?
- Ano, stačí ji uvést v OS a/nebo na routeru
- Ano, a budu využívat nové protokoly (DNS přes HTTPs a DNS přes TLS)
- Ne, aktuální servery mi stačí (jedná se o veřejného poskytovatele: Google, Yandex atd.)
- Ne, ani nevím, co právě používám
- Používám své rekurzivní DNS s SSL tunelem k nim
Hlasovalo 693 uživatelů. Zdrželi se 191 uživatelé.
Zdroj: habr.com
