
Â
Cloudflare har presenterat offentliga DNS pÄ adresser:
Â
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
Â
Det pÄstÄs att en "Privacy first"-policy anvÀnds, sÄ anvÀndare kan kÀnna sig trygga med innehÄllet i sina förfrÄgningar.
Â
TjĂ€nsten Ă€r intressant eftersom den, förutom vanliga DNS, ocksĂ„ erbjuder möjligheten att anvĂ€nda teknologier som DNS-over-TLS och DNS-over-HTTPS, vilket kraftigt hindrar leverantörer frĂ„n att avlyssna dina förfrĂ„gningar lĂ€ngs vĂ€gen â samt samla statistik, följa upp, hantera reklam. Cloudflare hĂ€vdar att datumet för tillkĂ€nnagivandet (1 april 2018, eller 04/01 i amerikansk notation) valdes av en anledning: vilken annan dag pĂ„ Ă„ret skulle man presentera "fyra ettor"?
Eftersom publiken pÄ Habr Àr tekniskt kunnig, kommer jag att placera den traditionella sektionen "varför behöver man DNS?" i slutet av inlÀgget, och hÀr redogöra för mer praktiskt anvÀndbara saker:
Â
Hur anvÀnder man den nya tjÀnsten?
Â
Det enklaste Ă€r att i din DNS-klient (eller som upstream i instĂ€llningarna för din lokala DNS-server) ange de nĂ€mnda adresserna för DNS-servrar. Ăr det meningsfullt att byta ut de vanliga vĂ€rdena för googles DNS (8.8.8.8 osv.), eller de nĂ„got mindre vanliga Yandex offentliga DNS-servrar (77.88.8.8 och liknande) mot servrar frĂ„n Cloudflare â det fĂ„r ni avgöra, men för nybörjare talar diagrammet för svarshastigheter, enligt vilket Cloudflare arbetar snabbare Ă€n alla konkurrenter (jag pĂ„pekar: mĂ€tningarna har genomförts av en tredje part, och hastigheten till en specifik klient kan naturligtvis variera).
Â

Â
Mycket mer intressant Àr arbetet med de nya lÀgen, dÀr en förfrÄgan skickas ivÀg via server en krypterad anslutning (egentligen returneras svaret via samma metod), nÀmnda DNS-over-TLS och DNS-over-HTTPS. TyvÀrr stöds de inte "ur lÄdan" (författarna tror att detta Àr "tills vidare"), men det Àr inte svÄrt att ordna deras funktionalitet i din programvara (eller till och med pÄ din egen hÄrdvara):
Â
DNS över HTTPs (DoH)
Â
Som namnet antyder sker kommunikationen över HTTPS-kanalen, vilket innebÀr
Â
- att det finns en landningspunkt (endpoint) â den finns pĂ„ adressen https://cloudflare-dns.com/dns-query, och
- en klient som kan skicka förfrÄgningar och ta emot svar.
Â
FörfrÄgningar kan antingen vara i DNS Wireformat, definierat i RFC1035 (skicka via HTTP-metoder POST och GET), eller i JSON-format (anvÀnder HTTP-metoden GET). För mig personligen verkade idén att göra DNS-förfrÄgningar genom HTTP-förfrÄgningar ovÀntad, men det finns en rationell kÀrna i den: en sÄdan förfrÄgan kan passera mÄnga trafikfiltreringssystem, att parsa svar Àr ganska enkelt, och att skapa förfrÄgningar Àr Ànnu enklare. För sÀkerheten ansvarar de vÀlkÀnda biblioteken och protokollen.
Â
Exempel pÄ förfrÄgningar direkt frÄn dokumentationen:
Â
GET-förfrÄgan i DNS Wireformat
Â
$ curl -v "https://cloudflare-dns.com/dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" | hexdump
* AnvÀnder HTTP2, servern stödjer multi-use
* AnslutningstillstÄndet har Àndrats (HTTP/2 bekrÀftat)
* Kopierar HTTP/2-data i strömbufferten till anslutningsbufferten efter uppgradering: len=0
* AnvÀnder Stream ID: 1 (lÀtt handtag 0x7f968700a400)
GET /dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2
Host: cloudflare-dns.com
User-Agent: curl/7.54.0
Accept: */*
* AnslutningstillstÄndet har Àndrats (MAX_CONCURRENT_STREAMS uppdaterad)!
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
* Anslutning #0 till host cloudflare-dns.com kvarstÄr intakt
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-förfrÄgan i 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
* Anslutning #0 till host cloudflare-dns.com kvarstÄr intakt
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
Â
Samma, men med anvÀndning av 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"
}
]
}Â
Det Àr uppenbart att sÀllsynta (om ens en enda) hemrouter kan fungera sÄ hÀr med DNS, men det betyder inte att stödet inte kan dyka upp imorgon - och intressant nog kan vi hÀr genomföra DNS-funktionalitet i vÄr applikation (som redan kommer att göra Mozilla, just pÄ servrarna Cloudflare).
Â
DNS över TLS
Â
Som standard skickas DNS-förfrÄgningar utan kryptering. DNS över TLS Àr ett sÀtt att skicka dem över en sÀker anslutning. Cloudflare stödjer DNS över TLS pÄ den standardport som anges, 853. RFC7858. En certifikat utfÀrdat för vÀrden cloudflare-dns.com anvÀnds, och TLS 1.2 och TLS 1.3 stöds.
Â
SÄ hÀr gÄr anslutningen och arbetet med protokollet till:
Â
- Innan anslutningen till DNS sparar klienten en base64-kodad SHA256-hash av TLS-certifikatet för cloudflare-dns.com (kallad SPKI).
- DNS-klienten upprÀttar en TCP-anslutning med cloudflare-dns.com:853.
- DNS-klienten initierar TLS handshake-proceduren.
- Under TLS handshake-processen presenterar vÀrden cloudflare-dns.com sitt TLS-certifikat.
- NÀr TLS-anslutningen har upprÀttats kan DNS-klienten skicka DNS-förfrÄgningar över den sÀkra kanalen, vilket förhindrar avlyssning och förfalskning av förfrÄgningar och svar.
- Alla DNS-förfrÄgningar som skickas via TLS-anslutningen mÄste följa specifikationen för skicka DNS över TCP.
Â
Exempel pÄ en förfrÄgan över DNS över TLS:
Â
$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com
;; DEBUG: FrÄgar efter Àgare(example.com.), klass(1), typ(1), server(1.1.1.1), port(853), protokoll(TCP)
;; DEBUG: TLS, importerade 170 systemcertifikat
;; DEBUG: TLS, mottagen certifikat-hierarki:
;; 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, hoppar över certifikat-PIN-kontrollen
;; DEBUG: TLS, certifikatet Àr betrott.
;; 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-storlek: 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
;; Mottagen 468 B
;; Tid 2018-03-31 15:20:57 PDT
;; FrĂ„n 1.1.1.1@853(TCP) pĂ„ 12.6 msÂ
Detta alternativ verkar vara bĂ€ttre lĂ€mpat för lokala DNS-servrar som betjĂ€nar behoven hos ett lokalt nĂ€tverk eller en enskild anvĂ€ndare. Dock Ă€r stödet för standarden inte sĂ„ bra, men â lĂ„t oss hoppas!
Â
TvÄ ord förklaringar, vad det handlar om
Â
Förkortningen DNS stĂ„r för DomĂ€n Name Service (sĂ„ att sĂ€ga "DNS-tjĂ€nst" Ă€r nĂ„got överflödigt, eftersom förkortningen redan har ordet "tjĂ€nst"), och den anvĂ€nds för att lösa en enkel uppgift â att förstĂ„ vilken IP-adress som hör till ett specifikt vĂ€rdnamn. Varje gĂ„ng en person klickar pĂ„ en lĂ€nk eller skriver in en adress i webblĂ€sarens adressfĂ€lt (lĂ„t oss sĂ€ga nĂ„got som «https://habrahabr.ru/post/346430/Datorn försöker förstĂ„ till vilken server den ska skicka en begĂ€ran för att hĂ€mta innehĂ„llet pĂ„ sidan. I fallet med habrahabr.ru kommer svaret frĂ„n DNS att innehĂ„lla en hĂ€nvisning till IP-adressen för webbservern: 178.248.237.68, och sedan försöker webblĂ€saren redan koppla upp sig mot servern med den angivna IP-adressen.
Â
à sin sida, nÀr DNS-servern fÄr begÀran "vilken IP-adress har vÀrden med namnet habrahabr.ru?", avgör den om den vet nÄgot om den angivna vÀrden. Om inte, gör den en begÀran till andra DNS-servrar i vÀrlden och försöker steg för steg lista ut svaret pÄ den stÀllda frÄgan. Till slut, nÀr det slutgiltiga svaret hittas, skickas de funna uppgifterna tillbaka till den vÀntande kunden, och de sparas Àven i cacheminnet pÄ sjÀlva DNS-servern, vilket gör att den kan svara pÄ liknande frÄgor mycket snabbare nÀsta gÄng.
Â
Ett vanligt problem Àr att, för det första, data frÄn DNS-förfrÄgningar överförs i öppen form (vilket gör att alla som har tillgÄng till trafikströmmen kan extrahera DNS-förfrÄgningar och de mottagna svaren och sedan analysera dem för sina syften; detta möjliggör reklamrikta med stor precision för DNS-kunden, vilket Àr ganska betydande!). För det andra har vissa internetleverantörer (vi pekar inte finger, men inte de allra minsta) en tendens att visa reklam istÀllet för den begÀrda sidan (vilket genomförs ganska enkelt: istÀllet för den angivna IP-adressen som begÀrs för vÀrden med namnet habranabr.ru returneras en slumpmÀssig IP-adress frÄn internetleverantörens webbserver, dÀr en sida som innehÄller reklam levereras). För det tredje finns det internetleverantörer som genomför mekanismer för att uppfylla krav pÄ blockering av specifika webbplatser genom att byta ut korrekta DNS-svar om IP-adresserna för blockerade webbresurser mot IP-adressen för sin egen server, som innehÄller hÀnvisningssidor (vilket gör tillgÄngen till sÄdana webbplatser mÀrkbart svÄrare), eller mot adressen för sin egen proxyserver, som filtrerar.
Â
HÀr borde det förmodligen placeras en bild frÄn webbplatsen http://1.1.1.1/, som anvÀnds för att beskriva anslutningen till tjÀnsten. Författarna verkar vara helt sÀkra pÄ kvaliteten pÄ sin DNS (ÀndÄ Àr det svÄrt att vÀnta sig nÄgot annat frÄn Cloudflare):
Â

Â
Man kan helt förstĂ„ företaget Cloudflare, skaparna av tjĂ€nsten: de tjĂ€nar sitt bröd genom att upprĂ€tthĂ„lla och utveckla ett av de mest populĂ€ra CDN-nĂ€ten i vĂ€rlden (bland funktionerna finns inte bara distribution av innehĂ„ll utan ocksĂ„ DNS-vĂ€rdning), och pĂ„ grund av önskan hos dem, som inte Ă€r sĂ„ insatta, att lĂ€ra dem, som de inte kĂ€nner, vad de ska leta efter i det globala nĂ€tet, lider ofta av blockerade adresser för sina servrar frĂ„n lĂ„t oss inte nĂ€mna namn â sĂ„ det att ha en DNS som inte pĂ„verkas av "rop, visslingar och lappar" innebĂ€r mindre skada för deras verksamhet. Och de tekniska fördelarna (en liten detalj, men trevlig: sĂ€rskilt för kunderna till Cloudflares gratis DNS kommer uppdateringar av DNS-poster för resurser som finns pĂ„ företagets DNS-servrar att ske omedelbart) gör anvĂ€ndningen av den beskrivna tjĂ€nsten Ă€nnu mer intressant.
Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.
Kommer du att anvÀnda den nya tjÀnsten?
- Ja, bara genom att ange den i OS och/eller pÄ routern
- Ja, och jag kommer att anvÀnda de nya protokollen (DNS över HTTPs och DNS över TLS)
- Nej, jag Àr nöjd med de aktuella servrarna (detta Àr en offentlig leverantör: Google, Yandex osv.)
- Nej, jag har till och med ingen aning om vad jag anvÀnder just nu
- Jag anvÀnder mina egna rekursiva DNS med SSL-tunnel till dem
693 anvÀndare röstade. 191 anvÀndare avstod.
KĂ€lla: habr.com
