
Cloudflare-Unternehmen präsentiert öffentliches DNS unter Adressen:
- 1.1.1.1
- 1.0.0.1
- 2606: 4700: 4700 :: 1111
- 2606: 4700: 4700 :: 1001
Die Richtlinie soll „Datenschutz an erster Stelle“ lauten, damit Benutzer beruhigt über den Inhalt ihrer Anfragen informiert sein können.
Der Dienst ist insofern interessant, als er zusätzlich zum üblichen DNS die Möglichkeit bietet, Technologien zu nutzen DNS über TLS и DNS über HTTPS, wodurch Anbieter erheblich daran gehindert werden, Ihre Anfragen auf dem Weg der Anfragen abzuhören – und Statistiken zu sammeln, Werbung zu überwachen und zu verwalten. Cloudflare behauptet, dass das Datum der Ankündigung (1. April 2018 oder 04. in amerikanischer Schreibweise) nicht zufällig gewählt wurde: An welchem anderen Tag im Jahr werden die „vier Einheiten“ vorgestellt?
Da das Publikum von Habr technisch versiert ist, ist der traditionelle Abschnitt „Warum brauchen Sie DNS?“ nicht ausreichend. Ich werde es am Ende des Beitrags platzieren, aber hier werde ich praktisch nützlichere Dinge erwähnen:
Wie nutzt man den neuen Service?
Am einfachsten ist es, die oben aufgeführten DNS-Adressen in Ihrem DNS-Client anzugeben (oder als Upstream in den Einstellungen des von Ihnen verwendeten lokalen DNS-Servers).ServerIst es sinnvoll, die üblichen Bedeutungen zu ersetzen? Google DNS (8.8.8.8 usw.) oder etwas seltener Öffentliche DNS-Server von Yandex (77.88.8.8 und ähnliche) bis hin zu den Servern von Cloudflare – die entscheiden für Sie, sprechen aber für einen Anfänger Zeitplan Reaktionsgeschwindigkeit, wonach Cloudflare schneller ist als alle Konkurrenten (ich möchte es klarstellen: Die Messungen wurden von einem Drittanbieter durchgeführt und die Geschwindigkeit für einen bestimmten Kunden kann natürlich unterschiedlich sein).

Es ist viel interessanter, mit neuen Modi zu arbeiten, in denen die Anfrage wegfliegt. Server über eine verschlüsselte Verbindung (tatsächlich wird die Antwort über dieselbe Verbindung zurückgesendet), unter Verwendung der bereits erwähnten DNS-over-TLS- und DNS-over-HTTPS-Technologien. Leider werden diese nicht standardmäßig unterstützt (die Autoren gehen davon aus, dass dies „vorerst“ so ist), aber es ist einfach, sie in eigener Software (oder sogar auf eigener Hardware) einzurichten:
DNS über HTTPs (DoH)
Wie der Name schon sagt, erfolgt die Kommunikation über einen HTTPS-Kanal, d.h
- das Vorhandensein eines Endpunkts – er befindet sich unter https://cloudflare-dns.com/dns-query, und
- ein Client, der Anfragen senden und Antworten empfangen kann.
Anfragen können entweder im DNS-Wireformat-Format vorliegen, das in definiert ist RFC1035 (gesendet mit den HTTP-Methoden POST und GET) oder im JSON-Format (mit der HTTP-Methode GET). Für mich persönlich schien die Idee, DNS-Anfragen über HTTP-Anfragen zu stellen, unerwartet, aber sie hat einen rationalen Kern: Eine solche Anfrage passiert viele Verkehrsfiltersysteme, das Parsen von Antworten ist recht einfach und das Generieren von Anfragen ist noch einfacher. Für die Sicherheit sind die üblichen Bibliotheken und Protokolle verantwortlich.
Fordern Sie Beispiele direkt aus der Dokumentation an:
GET-Anfrage im DNS-Wireformat-Format
$ 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-Anfrage im DNS-Wireformat-Format
$ 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
Das Gleiche, aber mit 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"
}
]
}
Offensichtlich kann ein seltener (wenn mindestens einer) Heimrouter auf diese Weise mit DNS arbeiten, aber das bedeutet nicht, dass es morgen keine Unterstützung geben wird – und interessanterweise können wir hier die Arbeit mit DNS durchaus in unserer Anwendung implementieren (wie bereits). Ich werde Mozilla machen, nur auf Cloudflare-Servern).
DNS über TLS
Standardmäßig werden DNS-Anfragen unverschlüsselt übertragen. DNS über TLS ist eine Möglichkeit, sie über eine sichere Verbindung zu senden. Cloudflare unterstützt wie vorgeschrieben DNS über TLS auf dem Standardport 853 RFC7858. Dabei wird ein für den cloudflare-dns.com-Host ausgestelltes Zertifikat verwendet, TLS 1.2 und TLS 1.3 werden unterstützt.
Das Herstellen einer Verbindung und das Arbeiten gemäß dem Protokoll läuft in etwa so ab:
- Bevor eine DNS-Verbindung hergestellt wird, speichert der Client einen Base64-codierten SHA256-Hash des TLS-Zertifikats von cloudflare-dns.com (genannt SPKI).
- Der DNS-Client stellt eine TCP-Verbindung zu cloudflare-dns.com:853 her
- Der DNS-Client initiiert den TLS-Handshake
- Während des TLS-Handshake-Prozesses präsentiert der cloudflare-dns.com-Host sein TLS-Zertifikat.
- Sobald eine TLS-Verbindung hergestellt ist, kann der DNS-Client DNS-Anfragen über einen sicheren Kanal senden, wodurch verhindert wird, dass Anfragen und Antworten abgehört und gefälscht werden.
- Alle über eine TLS-Verbindung gesendeten DNS-Anfragen müssen den Anforderungen entsprechen Senden von DNS über TCP.
Ein Beispiel für eine Anfrage per DNS über 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
Diese Option scheint am besten für lokale DNS-Server zu funktionieren, die die Anforderungen eines lokalen Netzwerks oder eines einzelnen Benutzers erfüllen. Stimmt, mit der Unterstützung des Standards ist das nicht sehr gut, aber – hoffen wir!
Zwei Worte zur Erläuterung, worum es in dem Gespräch geht
Die Abkürzung DNS steht für Domain Der DNS-Dienst (die Abkürzung „DNS-Dienst“ ist daher etwas redundant, da sie das Wort „Dienst“ bereits enthält) dient dazu, ein einfaches Problem zu lösen: die IP-Adresse eines bestimmten Hostnamens zu ermitteln. Jedes Mal, wenn jemand auf einen Link klickt oder eine Adresse in die Adresszeile des Browsers eingibt (z. B. „example.com“), wird diese Adresse aufgerufen.https://habrahabr.ru/post/346430/") versucht der menschliche Computer herauszufinden, an welchen Server er eine Anfrage senden soll, um den Inhalt der Seite abzurufen. Im Fall von habrahabr.ru enthält die Antwort von DNS einen Hinweis auf die IP-Adresse des Webservers: 178.248.237.68, und dann versucht der Browser bereits, den Server mit der angegebenen IP-Adresse zu kontaktieren.
Nachdem der DNS-Server wiederum die Anfrage „Wie lautet die IP-Adresse des Hosts namens habrahabr.ru?“ erhalten hat, stellt er fest, ob er etwas über den angegebenen Host weiß. Wenn nicht, stellt es eine Anfrage an andere DNS-Server auf der Welt und versucht Schritt für Schritt, die Antwort auf die gestellte Frage herauszufinden. Als Ergebnis werden die gefundenen Daten nach dem Finden der endgültigen Antwort an den noch auf sie wartenden Client gesendet und im Cache des DNS-Servers selbst gespeichert, sodass Sie eine ähnliche Frage beim nächsten Mal viel schneller beantworten können.
Ein häufiges Problem besteht darin, dass die DNS-Abfragedaten zunächst im Klartext übertragen werden (was jedem mit Zugriff auf den Datenverkehrsfluss die Möglichkeit gibt, die DNS-Anfragen und die Antworten, die er erhält, zu isolieren und sie dann für seine eigenen Zwecke zu analysieren; dies gibt die Möglichkeit, Anzeigen für einen DNS-Client präzise auszurichten, was ziemlich viel ist!). Zweitens neigen einige ISPs (wir zeigen nicht mit dem Finger darauf, aber nicht die kleinsten) dazu, Anzeigen anstelle der einen oder anderen angeforderten Seite anzuzeigen (was ganz einfach umgesetzt wird: anstelle der angegebenen IP-Adresse für eine Abfrage durch habranabr.ru). Hostname, eine zufällige Person. Somit wird die Adresse des Webservers des Anbieters zurückgegeben, auf dem die Seite mit der Werbung bereitgestellt wird. Drittens gibt es Internet-Zugangsanbieter, die einen Mechanismus zur Erfüllung der Anforderungen zum Blockieren einzelner Websites implementieren, indem sie die korrekten DNS-Antworten zu den IP-Adressen blockierter Webressourcen durch die IP-Adresse ihres Servers ersetzen, der Stub-Seiten enthält (und damit den Zugriff auf solche Seiten deutlich komplizierter) oder an die Adresse Ihres Proxy-Servers, der die Filterung durchführt.
Dies sollte wahrscheinlich ein Bild von der Website sein. http://1.1.1.1/, wird verwendet, um die Verbindung zum Dienst zu beschreiben. Die Autoren scheinen von der Qualität ihres DNS recht überzeugt zu sein (allerdings kann man von Cloudflare kaum etwas anderes erwarten):

Man kann Cloudflare, den Erfinder des Dienstes, voll und ganz verstehen: Sie verdienen ihren Lebensunterhalt mit der Pflege und Entwicklung eines der beliebtesten CDN-Netzwerke der Welt (zu dessen Funktionen nicht nur die Verteilung von Inhalten, sondern auch das Hosten von DNS-Zonen gehört) und, aufgrund von der Wunsch derjenigen, der sich nicht so gut auskennt, lehre diese wen sie nicht kennen, dazu wo hin im globalen Netzwerk leiden häufig unter der Blockierung der Adressen ihrer Server Sagen wir nicht wer - Ein DNS, das für das Unternehmen nicht durch „Rufe, Pfiffe und Gekritzel“ beeinträchtigt wird, bedeutet also weniger Schaden für sein Unternehmen. Und technische Vorteile (eine Kleinigkeit, aber nett: Insbesondere für Kunden des kostenlosen DNS Cloudflare erfolgt die Aktualisierung der DNS-Einträge der auf den DNS-Servern des Unternehmens gehosteten Ressourcen sofort) machen die Nutzung des im Beitrag beschriebenen Dienstes noch interessanter.
An der Umfrage können nur registrierte Benutzer teilnehmen. Einloggenbitte.
Werden Sie den neuen Service nutzen?
- Ja, indem Sie es einfach im Betriebssystem und/oder am Router angeben
- Ja, und ich werde neue Protokolle verwenden (DNS über HTTPs und DNS über TLS).
- Nein, ich habe genügend aktuelle Server (dies ist ein öffentlicher Anbieter: Google, Yandex usw.)
- Nein, ich weiß nicht einmal, was ich gerade verwende
- Ich verwende mein rekursives DNS mit einem SSL-Tunnel zu ihnen
693 Benutzer haben abgestimmt. 191 Benutzer enthielt sich der Stimme.
Source: habr.com
