
Das Unternehmen Cloudflare präsentierte öffentliche DNS unter den Adressen:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
Es wird behauptet, dass die Politik „Privacy First“ verwendet wird, sodass Nutzer sich um den Inhalt ihrer Anfragen keine Sorgen machen müssen.
Der Service ist interessant, da er neben dem normalen DNS die Nutzung von Technologien wie DNS-over-TLS и DNS-over-HTTPS zu unterstützen.ermöglicht, was es Anbietern erheblich erschwert, unterwegs Ihre Anfragen abzuhören — und Statistiken zu sammeln, Werbung zu steuern. Cloudflare gibt an, dass das Ankündigungsdatum (1. April 2018 oder 01.04. in amerikanischer Notation) nicht zufällig gewählt wurde: An welchem anderen Tag im Jahr könnte man „vier Einsen“ präsentieren?
Da das Publikum von Habr technisch versiert ist, werde ich den traditionellen Abschnitt „Warum braucht man DNS?“ ans Ende des Beitrags stellen und hier praktischere Dinge ansprechen:
Wie nutzt man den neuen Dienst?
Am einfachsten ist es, in Ihrem DNS-Client (oder als Upstream in den Einstellungen Ihres lokalen DNS-Servers) die oben angegebenen DNS-Serveradressen. Macht es Sinn, die gewohnten Werte von Googles DNS (8.8.8.8 usw.) oder die etwas weniger verbreiteten öffentlichen DNS-Server von Yandex zu ersetzen? (77.88.8.8 und ähnliche IPs) auf Server von Cloudflare – wird Ihnen helfen, allerdings spricht der Verweis auf die Anfänger. Grafik Antwortgeschwindigkeiten, nach denen Cloudflare schneller als alle Wettbewerber arbeitet (zur Klarstellung: die Messungen wurden von einem externen Dienst durchgeführt, und die Geschwindigkeit bis zum spezifischen Kunden kann natürlich variieren).

Viel interessanter ist die Arbeit mit neuen Modi, in denen die Anfrage gesendet wird über der Server eine verschlüsselte Verbindung (die Antwort wird ebenfalls darüber zurückgesendet), nämlich DNS-over-TLS und DNS-over-HTTPS. Leider werden sie „out of the box“ nicht unterstützt (die Autoren glauben, dass dies „vorläufig“ ist), aber es ist nicht schwer, sie in Ihrer Software (oder sogar auf Ihrer eigenen Hardware) zu implementieren:
DNS über HTTPS (DoH)
Wie der Name schon sagt, erfolgt die Kommunikation über einen HTTPS-Kanal, was voraussetzt,
- dass ein Ziel-Endpunkt vorhanden ist – dieser befindet sich unter https://cloudflare-dns.com/dns-query, und
- ein Client erforderlich ist, der Anfragen senden und Antworten empfangen kann.
Anfragen können entweder im DNS Wireformat vorliegen, das in RFC1035 (HTTP-Methoden POST und GET senden) oder im JSON-Format (unter Verwendung der HTTP-Methode GET). Für mich war die Idee, DNS-Anfragen über HTTP-Anfragen zu stellen, unerwartet, aber es gibt einen rationalen Kern: Eine solche Anfrage passiert viele Traffic-Filterungssysteme, die Antworten sind leicht zu parsen und das Erstellen von Anfragen ist noch einfacher. Für die Sicherheit sorgen die vertrauten Bibliotheken und Protokolle.
Beispiele für Anfragen, direkt aus der Dokumentation:
GET-Anfrage im DNS-Wireformat
$ curl -v "https://cloudflare-dns.com/dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" | hexdump
* Verwendung von HTTP2, Server unterstützt Mehrfachnutzung
* Verbindungsstatus geändert (HTTP/2 bestätigt)
* Kopiere HTTP/2-Daten im Stream-Buffer in den Verbindungs-Buffer nach dem Upgrade: len=0
* Verwende Stream ID: 1 (eas_handle 0x7f968700a400)
GET /dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2
Host: cloudflare-dns.com
User-Agent: curl/7.54.0
Accept: */*
* Verbindungsstatus geändert (MAX_CONCURRENT_STREAMS aktualisiert)!
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 Daten]
100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494
* Verbindung #0 zum Host cloudflare-dns.com bleibt bestehen
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-Anfrage im 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 Daten]
100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494
* Verbindung #0 zum Host cloudflare-dns.com bleibt bestehen
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
Dasselbe, aber unter Verwendung von 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"
}
]
}
Es ist offensichtlich, dass nur sehr wenige (wenn überhaupt) Heimrouter mit DNS auf diese Weise umgehen können, aber das bedeutet nicht, dass diese Unterstützung nicht schon morgen verfügbar sein könnte – interessant ist dabei, dass wir DNS in unserer Anwendung implementieren können (wie bereits Mozillaes plant
DNS über TLS
Standardmäßig werden DNS-Anfragen ohne Verschlüsselung übertragen. DNS über TLS ist eine Methode, um sie über eine gesicherte Verbindung zu senden. Cloudflare unterstützt DNS über TLS am Standardport 853, wie in RFC7858vorgeschrieben. Dabei wird ein Zertifikat verwendet, das für den Host cloudflare-dns.com ausgestellt wurde, und es werden TLS 1.2 und TLS 1.3 unterstützt.
Die Verbindung und der Betrieb über das Protokoll erfolgt ungefähr wie folgt:
- Vor der Herstellung der Verbindung speichert der DNS-Client den in Base64 codierten SHA256-Hash des TLS-Zertifikats von cloudflare-dns.com (bekannt als SPKI).
- Der DNS-Client stellt eine TCP-Verbindung zu cloudflare-dns.com:853 her.
- Der DNS-Client initiiert den TLS-Handshake-Prozess.
- Während des TLS-Handshakes präsentiert der Host cloudflare-dns.com sein TLS-Zertifikat.
- Sobald die TLS-Verbindung hergestellt ist, kann der DNS-Client DNS-Anfragen über den sicheren Kanal senden, was Abhören und das Fälschen von Anfragen und Antworten verhindert.
- Alle DNS-Anfragen, die über eine TLS-Verbindung gesendet werden, müssen der Spezifikation für DNS über TCP.
Beispiel einer Anfrage über DNS über TLS:
$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com
;; DEBUG: Anfrage für Eigentümer(example.com.), Klasse(1), Typ(1), Server(1.1.1.1), Port(853), Protokoll(TCP)
;; DEBUG: TLS, 170 Systemzertifikate importiert
;; DEBUG: TLS, empfangene Zertifikats-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, Zertifikat-PIN-Prüfung wird übersprungen
;; DEBUG: TLS, Das Zertifikat ist vertrauenswürdig.
;; TLS-Sitzung (TLS1.2)-(ECDHE-ECDSA-SECP256R1)-(AES-256-GCM)
;; ->>HEADER<<- Betriebsart: QUERY; Status: NOERROR; ID: 58548
;; Flags: qr rd ra; ANFRAGE: 1; ANTWORT: 1; AUTORITÄT: 0; ZUSÄTZLICH: 1
;; EDNS PSEUDOSECTION:
;; Version: 0; Flags: ; UDP-Größe: 1536 B; ext-rcode: NOERROR
;; PADDING: 408 B
;; FRAGESEKTION:
;; example.com. IN A
;; ANTWORTSEKTION:
example.com. 2347 IN A 93.184.216.34
;; Empfangen 468 B
;; Zeit 2018-03-31 15:20:57 PDT
;; Von 1.1.1.1@853(TCP) in 12.6 ms
Diese Option scheint besser für lokale DNS-Server geeignet zu sein, die die Anforderungen eines lokalen Netzwerks oder eines einzelnen Benutzers bedienen. Es gibt zwar einige Bedenken hinsichtlich der Unterstützung des Standards, aber — lassen wir uns überraschen!
Zwei Worte zur Erklärung, worum es hier geht
Die Abkürzung DNS steht für Domain Domain Name System (es ist also etwas überflüssig, von "DNS-Service" zu sprechen, da im Akronym bereits das Wort "Service" enthalten ist) und dient dazu, eine einfache Aufgabe zu lösen – herauszufinden, welche IP-Adresse einem bestimmten Hostnamen zugeordnet ist. Jedes Mal, wenn eine Person auf einen Link klickt oder in die Adresszeile des Browsers eine Adresse eingibt (zum Beispiel so etwas wie "https://habrahabr.ru/post/346430/"), versucht der Computer des Benutzers zu verstehen, an welchen Server die Anfrage zur Abrufung des Seiteninhalts gesendet werden soll. Im Fall von habrahabr.ru wird die Antwort vom DNS die IP-Adresse des Webservers enthalten: 178.248.237.68, und der Browser wird dann versuchen, eine Verbindung zu dem Server mit der angegebenen IP-Adresse herzustellen.
Der DNS-Server erhält die Anfrage „Welche IP-Adresse hat der Host mit dem Namen habrahabr.ru?“. Er prüft, ob er Informationen über den angegebenen Host hat. Falls nicht, stellt er Anfragen an andere DNS-Server weltweit und versucht schrittweise, die Antwort auf die gestellte Frage herauszufinden. Sobald die endgültige Antwort gefunden wurde, werden die Informationen an den anfragenden Client gesendet und im Cache des DNS-Servers gespeichert, sodass beim nächsten Mal eine ähnliche Frage wesentlich schneller beantwortet werden kann.
Ein häufiges Problem besteht darin, dass erstens die Daten von DNS-Anfragen unverschlüsselt übertragen werden. Dies ermöglicht es jedem, der Zugang zum Datenverkehr hat, die DNS-Anfragen sowie die erhaltenen Antworten zu extrahieren und für eigene Zwecke zu analysieren. Dies erlaubt eine zielgerichtete Werbung mit Präzision auf den DNS-Kunden, was nicht unerheblich ist! Zweitens haben einige Internetdienstanbieter (wir möchten nicht den Finger darauf zeigen, doch es sind nicht die kleinsten) die Tendenz, Werbung anstelle von angeforderten Seiten anzuzeigen. Dies wird recht einfach umgesetzt: Anstelle der angegebenen IP-Adresse für die Anfrage nach dem Hostnamen habranabr.ru wird dem Nutzer zufällig die Adresse des Webservers des Anbieters zurückgegeben, auf dem eine Seite mit Werbung bereitgestellt wird. Drittens gibt es Internetzugangsanbieter, die Mechanismen implementieren, um Anfragen zur Blockierung bestimmter Webseiten durch die Manipulation der richtigen DNS-Antworten für die IP-Adressen der blockierten Webressourcen zu erfüllen. Diese Antworten werden durch die IP-Adresse ihres eigenen Servers ersetzt, auf dem Seiten mit Platzhaltern angezeigt werden (dadurch wird der Zugriff auf solche Seiten erheblich erschwert), oder auf die Adresse ihres Proxy-Servers, der die Filterung vornimmt.
Hier sollte wahrscheinlich ein Bild von der Website platziert werden http://1.1.1.1/, das zur Beschreibung der Verbindung zum Dienst dient. Die Autoren sind sich offensichtlich absolut sicher von der Qualität ihres DNS (wenn man von Cloudflare spricht, kann man auch nichts anderes erwarten):

Man kann Cloudflare, dem Erschaffer des Dienstes, gut verstehen: Sie verdienen ihren Lebensunterhalt, indem sie eines der beliebtesten CDN-Netzwerke der Welt unterstützen und weiterentwickeln (unter deren Funktionen befindet sich nicht nur die Bereitstellung von Inhalten, sondern auch das Hosting von DNS-Zonen), und aufgrund des Wunsches derjenigen, die sich nicht besonders gut auskennen, diejenigen zu schulen, die sie nicht kennen, in Bezug auf das, wohin man gehen sollte im globalen Netzwerk, häufig unter Blockaden ihrer Serveradressen leiden, wollen wir nicht darüber sprechen — sodass die Verfügbarkeit von DNS, das nicht von "Rufen, Pfeifen und Zetteln" beeinflusst wird, für das Unternehmen eine geringere Schädigung ihres Geschäfts bedeutet. Und die technischen Vorteile (es sind Kleinigkeiten, aber angenehm: insbesondere für die Kunden des kostenlosen DNS von Cloudflare wird die Aktualisierung der DNS-Einträge von Ressourcen, die auf den DNS-Servern des Unternehmens gehostet werden, sofort erfolgen) machen die Nutzung des beschriebenen Dienstes noch interessanter.
Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte melden Sie sich an.Sind Sie an Contour interessiert?
Werden Sie den neuen Dienst nutzen?
- Ja, einfach anzugeben in der OS und/oder auf dem Router
- Ja, ich werde die neuen Protokolle (DNS über HTTPs und DNS über TLS) nutzen.
- Nein, ich bin mit den aktuellen Servern zufrieden (das sind öffentliche Anbieter: Google, Yandex usw.).
- Nein, ich weiß nicht einmal, was ich gerade benutze.
- Ich verwende meine eigenen rekursiven DNS mit einem SSL-Tunnel zu ihnen.
693 Nutzer haben abgestimmt. 191 Nutzer haben sich enthalten.
Quelle: habr.com
