Wir treffen den Dienst von Cloudflare unter den Adressen 1.1.1.1 und 1.0.0.1, oder „das öffentliche DNS-Regal ist da!“

Wir treffen den Dienst von Cloudflare unter den Adressen 1.1.1.1 und 1.0.0.1, oder „das öffentliche DNS-Regal ist da!“

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 genannten DNS-Serveradressen in Ihrem DNS-Client anzugeben (oder als Upstream in den Einstellungen des von Ihnen verwendeten lokalen DNS-Servers). Ist es sinnvoll, die üblichen Werte 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).

Wir treffen den Dienst von Cloudflare unter den Adressen 1.1.1.1 und 1.0.0.1, oder „das öffentliche DNS-Regal ist da!“

Es ist viel interessanter, mit neuen Modi zu arbeiten, bei denen die Anfrage über eine verschlüsselte Verbindung zum Server fliegt (tatsächlich wird die Antwort darüber zurückgegeben), dem erwähnten DNS-over-TLS und DNS-over-HTTPS. Leider werden sie nicht „out of the box“ unterstützt (die Autoren glauben, dass dies „noch“ der Fall ist), aber es ist nicht schwierig, ihre Arbeit in Ihrer Software (oder sogar auf Ihrer Hardware) zu organisieren:

DNS über HTTPs (DoH)

Wie der Name schon sagt, erfolgt die Kommunikation über einen HTTPS-Kanal, d.h

  1. das Vorhandensein eines Landepunkts (Endpunkt) – er befindet sich an der Adresse https://cloudflare-dns.com/dns-queryUnd
  2. 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 Name Service (die Aussage „DNS-Dienst“ ist also etwas überflüssig, da die Abkürzung bereits das Wort „Dienst“ enthält) und wird verwendet, um eine einfache Aufgabe zu lösen – herauszufinden, welche IP-Adresse ein bestimmter Hostname hat. Jedes Mal, wenn eine Person auf einen Link klickt oder eine Adresse in die Adressleiste des Browsers eingibt (z. B. „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):

Wir treffen den Dienst von Cloudflare unter den Adressen 1.1.1.1 und 1.0.0.1, oder „das öffentliche DNS-Regal ist da!“

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

Kommentar hinzufügen