Συναντάμε την υπηρεσία από το Cloudflare στις διευθύνσεις 1.1.1.1 και 1.0.0.1 ή "το δημόσιο ράφι DNS έφτασε!"

Συναντάμε την υπηρεσία από το Cloudflare στις διευθύνσεις 1.1.1.1 και 1.0.0.1 ή "το δημόσιο ράφι DNS έφτασε!"

Εταιρεία Cloudflare παρουσιάζονται δημόσιο DNS στις διευθύνσεις:

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

Υποστηρίζεται ότι χρησιμοποιείται μια πολιτική «Πρώτα το απόρρητο», έτσι ώστε οι χρήστες να μπορούν να είναι σίγουροι για το περιεχόμενο των αιτημάτων τους.

Η υπηρεσία είναι ενδιαφέρουσα γιατί, εκτός από το συνηθισμένο DNS, παρέχει τη δυνατότητα χρήσης τεχνολογιών DNS-over-TLS и DNS-over-HTTPS, που θα αποτρέψει σε μεγάλο βαθμό τους παρόχους από το να παρακολουθούν τα αιτήματά σας κατά τη διαδρομή αιτημάτων - και να συλλέγουν στατιστικά στοιχεία, να παρακολουθούν και να διαχειρίζονται διαφημίσεις. Η Cloudflare ισχυρίζεται ότι η ημερομηνία ανακοίνωσης (1 Απριλίου 2018 ή 04/01 σε αμερικανική σημείωση) δεν επιλέχθηκε τυχαία: ποια άλλη ημέρα του έτους θα παρουσιαζόταν το "four units";

Δεδομένου ότι το κοινό του Habr είναι τεχνικά έμπειρο, η παραδοσιακή ενότητα "γιατί χρειαζόμαστε το DNS;" Θα το βάλω στο τέλος της ανάρτησης και εδώ θα περιγράψω πιο πρακτικά χρήσιμα πράγματα:

Πώς να χρησιμοποιήσετε τη νέα υπηρεσία;

Το πιο απλό πράγμα είναι να καθορίσετε τις παραπάνω διευθύνσεις διακομιστή DNS στον υπολογιστή-πελάτη DNS (ή ως upstream στις ρυθμίσεις του τοπικού διακομιστή DNS που χρησιμοποιείτε). Έχει νόημα η αντικατάσταση των συνηθισμένων τιμών; Google DNS (8.8.8.8, κ.λπ.), ή ελαφρώς λιγότερο συνηθισμένο Δημόσιοι διακομιστές DNS Yandex (77.88.8.8 και άλλα παρόμοια) σε διακομιστές από το Cloudflare - θα αποφασίσουν για εσάς, αλλά μιλάει για αρχάριους πρόγραμμα ταχύτητα αποκρίσεων, σύμφωνα με την οποία το Cloudflare λειτουργεί πιο γρήγορα από όλους τους ανταγωνιστές (επιτρέψτε μου να διευκρινίσω: οι μετρήσεις έγιναν από υπηρεσία τρίτου μέρους και η ταχύτητα σε έναν συγκεκριμένο πελάτη, φυσικά, μπορεί να διαφέρει).

Συναντάμε την υπηρεσία από το Cloudflare στις διευθύνσεις 1.1.1.1 και 1.0.0.1 ή "το δημόσιο ράφι DNS έφτασε!"

Είναι πολύ πιο ενδιαφέρον να δουλεύουμε με νέες λειτουργίες στις οποίες το αίτημα μεταβαίνει στον διακομιστή μέσω μιας κρυπτογραφημένης σύνδεσης (στην πραγματικότητα, η απόκριση επιστρέφεται μέσω αυτής), του αναφερόμενου DNS-over-TLS και DNS-over-HTTPS. Δυστυχώς, δεν υποστηρίζονται out of the box (οι συγγραφείς πιστεύουν ότι αυτό είναι "ακόμα"), αλλά η οργάνωση της εργασίας τους στο λογισμικό σας (ή ακόμα και στο υλικό σας) δεν είναι δύσκολη:

DNS μέσω HTTP (DoH)

Όπως υποδηλώνει το όνομα, η επικοινωνία πραγματοποιείται μέσω ενός καναλιού HTTPS, κάτι που υπονοεί

  1. παρουσία σημείου προσγείωσης (τελικό σημείο) - βρίσκεται στο https://cloudflare-dns.com/dns-queryΚαι
  2. ένας πελάτης που μπορεί να στέλνει αιτήματα και να λαμβάνει απαντήσεις.

Τα αιτήματα μπορούν να είναι είτε στο DNS Wireformat που ορίζεται στο RFC1035 (αποστέλλεται χρησιμοποιώντας τις μεθόδους POST και GET HTTP) ή σε μορφή JSON (χρησιμοποιώντας τη μέθοδο GET HTTP). Για μένα προσωπικά, η ιδέα να κάνω ερωτήματα DNS μέσω αιτημάτων HTTP φαινόταν απροσδόκητη, αλλά υπάρχει μια λογική ουσία: ένα τέτοιο αίτημα θα περάσει πολλά συστήματα φιλτραρίσματος κυκλοφορίας, οι απαντήσεις ανάλυσης είναι αρκετά απλές και η δημιουργία αιτημάτων είναι ακόμα πιο απλή. Οι γνωστές βιβλιοθήκες και τα πρωτόκολλα είναι υπεύθυνα για την ασφάλεια.

Παραδείγματα ερωτημάτων, απευθείας από την τεκμηρίωση:

Αίτημα GET σε μορφή DNS Wireformat

$ 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 σε 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
* 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

Το ίδιο, αλλά χρησιμοποιώντας 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"
    }
  ]
}

Προφανώς, λίγοι (αν υπάρχουν) οικιακόι δρομολογητές μπορούν να λειτουργήσουν με DNS όπως αυτό, αλλά αυτό δεν σημαίνει ότι η υποστήριξη δεν θα εμφανιστεί αύριο - και, είναι ενδιαφέρον, εδώ μπορούμε εύκολα να εφαρμόσουμε εργασία με DNS στην εφαρμογή μας (όπως ήδη πρόκειται να φτιάξει το Mozilla, μόνο σε διακομιστές Cloudflare).

DNS μέσω TLS

Από προεπιλογή, τα ερωτήματα DNS αποστέλλονται χωρίς κρυπτογράφηση. Το DNS μέσω TLS είναι ένας τρόπος αποστολής τους μέσω ασφαλούς σύνδεσης. Το Cloudflare υποστηρίζει DNS μέσω TLS στην τυπική θύρα 853 όπως προδιαγράφεται RFC7858. Αυτό χρησιμοποιεί ένα πιστοποιητικό που εκδόθηκε για τον κεντρικό υπολογιστή cloudflare-dns.com, υποστηρίζονται τα TLS 1.2 και TLS 1.3.

Η δημιουργία μιας σύνδεσης και η εργασία με το πρωτόκολλο είναι κάπως έτσι:

  • Πριν από τη δημιουργία σύνδεσης με το DNS, ο πελάτης αποθηκεύει έναν κατακερματισμό SHA64 με κωδικοποίηση base256 του πιστοποιητικού TLS του cloudflare-dns.com (που ονομάζεται SPKI)
  • Ο πελάτης DNS δημιουργεί μια σύνδεση TCP στο cloudflare-dns.com:853
  • Ο πελάτης DNS εκκινεί τη διαδικασία χειραψίας TLS
  • Κατά τη διάρκεια της χειραψίας TLS, ο κεντρικός υπολογιστής cloudflare-dns.com παρουσιάζει το πιστοποιητικό του TLS.
  • Μόλις δημιουργηθεί η σύνδεση TLS, ο πελάτης DNS μπορεί να στείλει ερωτήματα DNS μέσω ενός ασφαλούς καναλιού, το οποίο αποτρέπει την υποκλοπή και την πλαστογραφία αιτημάτων και απαντήσεων.
  • Όλα τα αιτήματα DNS που αποστέλλονται μέσω σύνδεσης TLS πρέπει να συμμορφώνονται με την προδιαγραφή σύμφωνα με αποστολή DNS μέσω TCP.

Παράδειγμα αιτήματος μέσω DNS μέσω 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

Αυτή η επιλογή φαίνεται να είναι καλύτερα κατάλληλη για τοπικούς διακομιστές DNS που εξυπηρετούν τις ανάγκες ενός τοπικού δικτύου ή ενός μεμονωμένου χρήστη. Είναι αλήθεια ότι η υποστήριξη για το πρότυπο δεν είναι πολύ καλή, αλλά ας ελπίσουμε!

Δύο λόγια εξήγησης για το τι μιλάμε

Η συντομογραφία DNS σημαίνει Υπηρεσία Ονομάτων Τομέα (άρα το να λέμε «υπηρεσία DNS» είναι κάπως περιττό· το ακρωνύμιο περιέχει ήδη τη λέξη «υπηρεσία») και χρησιμοποιείται για την επίλυση μιας απλής εργασίας - για την κατανόηση της διεύθυνσης IP ενός συγκεκριμένου ονόματος κεντρικού υπολογιστή. Κάθε φορά που ένα άτομο κάνει κλικ σε έναν σύνδεσμο ή εισάγει μια διεύθυνση στη γραμμή διευθύνσεων του προγράμματος περιήγησης (για παράδειγμα, κάτι σαν "https://habrahabr.ru/post/346430/"), ο υπολογιστής ενός ατόμου προσπαθεί να καταλάβει σε ποιο διακομιστή να στείλει ένα αίτημα για λήψη των περιεχομένων μιας σελίδας. Στην περίπτωση του habrahabr.ru, η απάντηση από το DNS θα περιέχει μια ένδειξη της διεύθυνσης IP του διακομιστή web: 178.248.237.68 και, στη συνέχεια, το πρόγραμμα περιήγησης θα προσπαθήσει να επικοινωνήσει με τον διακομιστή με την καθορισμένη διεύθυνση IP.

Με τη σειρά του, ο διακομιστής DNS, έχοντας λάβει το αίτημα "ποια είναι η διεύθυνση IP του κεντρικού υπολογιστή που ονομάζεται habrahabr.ru;", καθορίζει εάν γνωρίζει κάτι για τον καθορισμένο κεντρικό υπολογιστή. Εάν όχι, κάνει ένα ερώτημα σε άλλους διακομιστές DNS στον κόσμο και, βήμα προς βήμα, προσπαθεί να βρει την απάντηση στην ερώτηση που τέθηκε. Ως αποτέλεσμα, με την εύρεση της τελικής απάντησης, τα δεδομένα που βρέθηκαν αποστέλλονται στον πελάτη που βρίσκεται ακόμα σε αναμονή, καθώς και αποθηκεύονται στην κρυφή μνήμη του ίδιου του διακομιστή DNS, κάτι που θα σας επιτρέψει να απαντήσετε σε μια παρόμοια ερώτηση πολύ πιο γρήγορα την επόμενη φορά.

Ένα κοινό πρόβλημα είναι ότι, πρώτον, τα δεδομένα ερωτήματος DNS αποστέλλονται καθαρά (που επιτρέπει σε οποιονδήποτε έχει πρόσβαση στη ροή επισκεψιμότητας να απομονώσει τα ερωτήματα DNS και τις προκύπτουσες απαντήσεις και στη συνέχεια να τα αναλύσει για τους δικούς του σκοπούς· αυτό επιτρέπει τη δυνατότητα να στοχεύσετε τη διαφήμιση με ακρίβεια για τον πελάτη DNS, και αυτό είναι πάρα πολύ!). Δεύτερον, ορισμένοι πάροχοι Διαδικτύου (δεν θα κουνάμε το δάχτυλο, αλλά όχι οι μικρότεροι) τείνουν να εμφανίζουν διαφημίσεις αντί για τη μία ή την άλλη ζητούμενη σελίδα (η οποία υλοποιείται πολύ απλά: αντί για την καθορισμένη διεύθυνση IP για ένα αίτημα για το όνομα κεντρικού υπολογιστή Το habranabr.ru σε ένα τυχαίο άτομο Με αυτόν τον τρόπο, επιστρέφεται η διεύθυνση του διακομιστή web του παρόχου, όπου εμφανίζεται η σελίδα που περιέχει τη διαφήμιση). Τρίτον, υπάρχουν πάροχοι πρόσβασης στο Διαδίκτυο που εφαρμόζουν έναν μηχανισμό για την εκπλήρωση των απαιτήσεων για τον αποκλεισμό μεμονωμένων τοποθεσιών αντικαθιστώντας τις σωστές απαντήσεις DNS σχετικά με τις διευθύνσεις IP των αποκλεισμένων πόρων ιστού με τη διεύθυνση IP του διακομιστή τους που περιέχει αποκόμματα (ως αποτέλεσμα, πρόσβαση σε τέτοιοι ιστότοποι γίνονται αισθητά πιο περίπλοκοι) ή στη διεύθυνση του διακομιστή μεσολάβησής σας που εκτελεί φιλτράρισμα.

Μάλλον θα πρέπει να βάλεις μια φωτογραφία από τον ιστότοπο εδώ http://1.1.1.1/, το οποίο χρησιμεύει για την περιγραφή της σύνδεσης με την υπηρεσία. Οι συγγραφείς, προφανώς, είναι απόλυτα σίγουροι για την ποιότητα του DNS τους (ωστόσο, είναι δύσκολο να περιμένουμε κάτι διαφορετικό από το Cloudflare):

Συναντάμε την υπηρεσία από το Cloudflare στις διευθύνσεις 1.1.1.1 και 1.0.0.1 ή "το δημόσιο ράφι DNS έφτασε!"

Μπορεί κανείς να κατανοήσει πλήρως το Cloudflare, τον δημιουργό της υπηρεσίας: κερδίζουν το ψωμί τους υποστηρίζοντας και αναπτύσσοντας ένα από τα πιο δημοφιλή δίκτυα CDN στον κόσμο (οι λειτουργίες του οποίου περιλαμβάνουν όχι μόνο διανομή περιεχομένου, αλλά και φιλοξενία ζωνών DNS) και, λόγω της επιθυμίας αυτών, που δεν ξέρει πολλά, διδάξτε τα που δεν ξέρουν, σε αυτό Πού να πάτε στο παγκόσμιο δίκτυο, υποφέρει αρκετά συχνά από τον αποκλεισμό των διευθύνσεων διακομιστή του από δεν θα πούμε ποιος - Επομένως, το να έχουν ένα DNS που δεν επηρεάζεται από "φωνές, σφυρίγματα και μουντζούρες" σημαίνει μικρότερη ζημιά για την επιχείρησή τους για μια εταιρεία. Και τα τεχνικά πλεονεκτήματα (ένα μικρό πράγμα, αλλά ωραίο: συγκεκριμένα, για τους πελάτες του δωρεάν DNS Cloudflare, η ενημέρωση των αρχείων DNS των πόρων που φιλοξενούνται στους διακομιστές DNS της εταιρείας θα είναι στιγμιαία) κάνουν τη χρήση της υπηρεσίας που περιγράφεται στην ανάρτηση ακόμα πιο ενδιαφέρουσα .

Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα. Συνδεθείτε, Σας παρακαλούμε.

Θα χρησιμοποιήσετε τη νέα υπηρεσία;

  • Ναι, απλώς προσδιορίζοντάς το στο λειτουργικό σύστημα ή/και στο δρομολογητή

  • Ναι, και θα χρησιμοποιήσω νέα πρωτόκολλα (DNS μέσω HTTP και DNS μέσω TLS)

  • Όχι, έχω αρκετούς τρέχοντες διακομιστές (αυτός είναι δημόσιος πάροχος: Google, Yandex κ.λπ.)

  • Όχι, δεν ξέρω καν τι χρησιμοποιώ αυτή τη στιγμή

  • Χρησιμοποιώ το δικό μου αναδρομικό DNS με μια σήραγγα SSL πριν από αυτά

Ψήφισαν 693 χρήστες. 191 χρήστης απείχε.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο