Vi möter tjänsten från Cloudflare på adresserna 1.1.1.1 och 1.0.0.1, eller "den offentliga DNS-hyllan har anlänt!"

Vi möter tjänsten från Cloudflare på adresserna 1.1.1.1 och 1.0.0.1, eller "den offentliga DNS-hyllan har anlänt!"

Cloudflare Company представила offentlig DNS på adresser:

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

Policyn sägs vara "Sekretess först" så att användare kan ha sinnesfrid om innehållet i sina förfrågningar.

Tjänsten är intressant genom att den, förutom den vanliga DNS, ger möjlighet att använda teknik DNS-över-TLS и DNS-över-HTTPS, vilket i hög grad kommer att förhindra leverantörer från att avlyssna dina förfrågningar längs förfrågningarnas väg - och samla in statistik, övervaka, hantera annonsering. Cloudflare hävdar att datumet för tillkännagivandet (1 april 2018 eller 04/01 i amerikansk notation) inte valdes av en slump: vilken annan dag på året kommer de "fyra enheterna" att presenteras?

Eftersom Habrs publik är tekniskt kunnig, är det traditionella avsnittet "varför behöver du DNS?" Jag kommer att lägga det i slutet av inlägget, men här kommer jag att ange mer praktiskt användbara saker:

Hur använder man den nya tjänsten?

Det enklaste är att ange ovanstående DNS-serveradresser i din DNS-klient (eller som uppströms i inställningarna för den lokala DNS-server du använder). Är det vettigt att byta ut de vanliga värdena Google DNS (8.8.8.8, etc.), eller något mindre vanligt Yandex offentliga DNS-servrar (77.88.8.8 och andra liknande dem) till servrarna från Cloudflare - de bestämmer åt dig, men talar för en nybörjare tidtabell svarshastighet, enligt vilken Cloudflare är snabbare än alla konkurrenter (jag ska förtydliga: mätningarna togs av en tredjepartstjänst, och hastigheten till en specifik klient kan naturligtvis skilja sig åt).

Vi möter tjänsten från Cloudflare på adresserna 1.1.1.1 och 1.0.0.1, eller "den offentliga DNS-hyllan har anlänt!"

Det är mycket mer intressant att arbeta med nya lägen där förfrågan flyger till servern över en krypterad anslutning (i själva verket returneras svaret genom den), nämnda DNS-over-TLS och DNS-over-HTTPS. Tyvärr stöds de inte "out of the box" (författarna tror att detta är "ännu"), men det är inte svårt att organisera sitt arbete i din programvara (eller ens på din hårdvara):

DNS över HTTPs (DoH)

Som namnet antyder sker kommunikation över en HTTPS-kanal, vilket betyder

  1. närvaron av en landningspunkt (slutpunkt) - den ligger på adressen https://cloudflare-dns.com/dns-queryOch
  2. en klient som kan skicka förfrågningar och ta emot svar.

Förfrågningar kan antingen vara i DNS-trådformatet som definieras i RFC1035 (skickas med POST- och GET HTTP-metoderna), eller i JSON-format (med GET HTTP-metoden). För mig personligen verkade idén att göra DNS-förfrågningar via HTTP-förfrågningar oväntad, men det finns ett rationellt korn i det: en sådan begäran kommer att passera många trafikfiltreringssystem, att analysera svar är ganska enkelt och att generera förfrågningar är ännu lättare. De vanliga biblioteken och protokollen ansvarar för säkerheten.

Begär exempel direkt från dokumentationen:

GET-förfrågan i DNS-trådformat

$ 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

POST-begäran i DNS-trådformat

$ 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

Samma men använder 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"
    }
  ]
}

Uppenbarligen kan en sällsynt (om minst en) hemrouter arbeta med DNS på detta sätt, men det betyder inte att support inte kommer att dyka upp i morgon - och intressant nog kan vi här implementera att arbeta med DNS i vår applikation (som redan ska göra Mozilla, bara på Cloudflare-servrar).

DNS över TLS

Som standard överförs DNS-frågor utan kryptering. DNS över TLS är ett sätt att skicka dem över en säker anslutning. Cloudflare stöder DNS över TLS på standardport 853 enligt anvisningarna RFC7858. Detta använder ett certifikat utfärdat för cloudflare-dns.com-värden, TLS 1.2 och TLS 1.3 stöds.

Att upprätta en anslutning och arbeta enligt protokollet går ungefär så här:

  • Innan en DNS-anslutning upprättas lagrar klienten en base64-kodad SHA256-hash av cloudflare-dns.com:s TLS-certifikat (kallat SPKI)
  • DNS-klienten upprättar en TCP-anslutning till cloudflare-dns.com:853
  • DNS-klienten initierar TLS-handskakning
  • Under TLS-handskakningsprocessen presenterar cloudflare-dns.com-värden sitt TLS-certifikat.
  • När en TLS-anslutning väl har upprättats kan DNS-klienten skicka DNS-förfrågningar över en säker kanal, vilket förhindrar att förfrågningar och svar avlyssnas och förfalskas.
  • Alla DNS-förfrågningar som skickas över en TLS-anslutning måste överensstämma med skicka DNS över TCP.

Ett exempel på en begäran via DNS över 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

Det här alternativet verkar fungera bäst för lokala DNS-servrar som tjänar behoven hos ett lokalt nätverk eller en enskild användare. Sant, med stöd av standarden är inte särskilt bra, men - låt oss hoppas!

Två ord som förklarar vad samtalet handlar om

Förkortningen DNS står för Domain Name Service (så att säga "DNS-tjänst" är något redundant, förkortningen innehåller redan ordet "tjänst") och används för att lösa en enkel uppgift - att förstå vilken IP-adress ett visst värdnamn har. Varje gång en person klickar på en länk eller anger en adress i webbläsarens adressfält (säg något som "https://habrahabr.ru/post/346430/"), försöker den mänskliga datorn ta reda på vilken server som ska skicka en begäran för att få sidans innehåll. När det gäller habrahabr.ru kommer svaret från DNS att innehålla en indikation på webbserverns IP-adress: 178.248.237.68, och sedan kommer webbläsaren redan att försöka kontakta servern med den angivna IP-adressen.

I sin tur avgör DNS-servern, efter att ha fått förfrågan "vad är IP-adressen för värden som heter habrahabr.ru?", om den vet något om den angivna värden. Om inte, gör den en förfrågan till andra DNS-servrar i världen och försöker steg för steg ta reda på svaret på frågan. Som ett resultat, när du hittar det slutliga svaret, skickas den hittade informationen till klienten som fortfarande väntar på dem, plus att den lagras i cachen på själva DNS-servern, vilket gör att du kan svara på en liknande fråga mycket snabbare nästa gång.

Ett vanligt problem är att DNS-frågedata först överförs i det klara (vilket ger alla som har tillgång till trafikflödet möjligheten att isolera DNS-frågorna och de svar de får och sedan analysera dem för sina egna syften; detta ger möjligheten att rikta in annonser med noggrannhet för en DNS-klient, vilket är ganska mycket!). För det andra tenderar vissa internetleverantörer (vi pekar inte finger, men inte de minsta) att visa annonser istället för en eller annan begärd sida (vilket implementeras helt enkelt: istället för den angivna IP-adressen för en fråga av habranabr.ru värdnamn, en slumpmässig person Därmed returneras adressen till leverantörens webbserver, där sidan som innehåller annonsen visas). För det tredje finns det Internet-åtkomstleverantörer som implementerar en mekanism för att uppfylla kraven för att blockera enskilda webbplatser genom att ersätta de korrekta DNS-svaren om IP-adresserna för blockerade webbresurser med IP-adressen för deras server som innehåller stubbsidor (som ett resultat av tillgång till sådana webbplatser märkbart mer komplicerade), eller till adressen till din proxyserver som utför filtrering.

Det här borde nog vara en bild från sidan. http://1.1.1.1/, används för att beskriva anslutningen till tjänsten. Författarna verkar vara ganska säkra på kvaliteten på deras DNS (det är dock svårt att förvänta sig något annat från Cloudflare):

Vi möter tjänsten från Cloudflare på adresserna 1.1.1.1 och 1.0.0.1, eller "den offentliga DNS-hyllan har anlänt!"

Man kan till fullo förstå Cloudflare, skaparen av tjänsten: de tjänar sitt bröd genom att underhålla och utveckla ett av de mest populära CDN-nätverken i världen (vilka funktioner inkluderar inte bara distribution av innehåll, utan även värd för DNS-zoner), och, p.g.a. dessas önskan, som inte är väl insatt, lär dem som de inte känner, till det vart ska man gå i det globala nätverket, lider ganska ofta av att blockera adresserna till sina servrar från låt oss inte säga vem – så att ha en DNS som inte påverkas av "rop, visslingar och klotter" för företaget innebär mindre skada för deras verksamhet. Och tekniska fördelar (en bagatell, men trevlig: i synnerhet för kunder med gratis DNS Cloudflare, uppdatering av DNS-posterna för resurser som finns på företagets DNS-servrar kommer att vara omedelbar) gör användningen av tjänsten som beskrivs i inlägget ännu mer intressant.

Endast registrerade användare kan delta i undersökningen. Logga in, Snälla du.

Kommer du att använda den nya tjänsten?

  • Ja, genom att helt enkelt ange det i operativsystemet och/eller på routern

  • Ja, och jag kommer att använda nya protokoll (DNS över HTTPs och DNS över TLS)

  • Nej, jag har tillräckligt med nuvarande servrar (detta är en offentlig leverantör: Google, Yandex, etc.)

  • Nej, jag vet inte ens vad jag använder just nu

  • Jag använder min rekursiva DNS med en SSL-tunnel till dem

693 användare röstade. 191 användare avstod från att rösta.

Källa: will.com

Lägg en kommentar