Kami menemui layanan dari Cloudflare di alamat 1.1.1.1 dan 1.0.0.1, atau “rak DNS publik telah tiba!”

Kami menemui layanan dari Cloudflare di alamat 1.1.1.1 dan 1.0.0.1, atau “rak DNS publik telah tiba!”

Perusahaan Cloudflare disajikan DNS publik di alamat:

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

Kebijakan tersebut dikatakan “mengutamakan privasi” sehingga pengguna dapat merasa tenang tentang isi permintaan mereka.

Layanan ini menarik karena, selain DNS biasa, layanan ini juga menyediakan kemampuan untuk menggunakan teknologi DNS-melalui-TLS и DNS-over-HTTPS, yang akan sangat mencegah penyedia menguping permintaan Anda di sepanjang jalur permintaan - dan mengumpulkan statistik, memantau, mengelola iklan. Cloudflare mengklaim bahwa tanggal pengumuman (1 April 2018, atau 04/01 dalam notasi Amerika) tidak dipilih secara kebetulan: pada hari apa dalam setahun “empat unit” tersebut akan disajikan?

Karena audiens Habr paham secara teknis, bagian tradisional "mengapa Anda memerlukan DNS?" Saya akan meletakkannya di akhir postingan, namun di sini saya akan menyatakan hal-hal yang lebih berguna secara praktis:

Bagaimana cara menggunakan layanan baru ini?

Hal paling sederhana adalah dengan menentukan alamat server DNS di atas pada klien DNS Anda (atau sebagai upstream dalam pengaturan server DNS lokal yang Anda gunakan). Apakah masuk akal untuk mengganti nilai yang biasa DNS Google (8.8.8.8, dll.), atau sedikit kurang umum Server DNS publik Yandex (77.88.8.8 dan lainnya yang serupa) ke server dari Cloudflare - mereka akan memutuskan untuk Anda, tetapi berbicara untuk pemula jadwal kecepatan respons, yang menurutnya Cloudflare lebih cepat daripada semua pesaing (saya akan mengklarifikasi: pengukuran dilakukan oleh layanan pihak ketiga, dan kecepatan untuk klien tertentu, tentu saja, mungkin berbeda).

Kami menemui layanan dari Cloudflare di alamat 1.1.1.1 dan 1.0.0.1, atau “rak DNS publik telah tiba!”

Jauh lebih menarik untuk bekerja dengan mode baru di mana permintaan terbang ke server melalui koneksi terenkripsi (pada kenyataannya, respons dikembalikan melalui itu), DNS-over-TLS dan DNS-over-HTTPS yang disebutkan. Sayangnya, mereka tidak didukung “out of the box” (penulis percaya bahwa ini adalah “belum”), namun tidak sulit untuk mengatur pekerjaan mereka di perangkat lunak Anda (atau bahkan di perangkat keras Anda):

DNS melalui HTTP (DoH)

Seperti namanya, komunikasi terjadi melalui saluran HTTPS, yang artinya

  1. adanya titik pendaratan (endpoint) - letaknya di https://cloudflare-dns.com/dns-queryDan
  2. klien yang dapat mengirim permintaan dan menerima tanggapan.

Permintaan bisa dalam format DNS Wireformat yang ditentukan di RFC1035 (dikirim menggunakan metode POST dan GET HTTP), atau dalam format JSON (menggunakan metode GET HTTP). Bagi saya pribadi, gagasan membuat permintaan DNS melalui permintaan HTTP tampaknya tidak terduga, tetapi ada alasan rasional di dalamnya: permintaan seperti itu akan melewati banyak sistem pemfilteran lalu lintas, menguraikan respons cukup sederhana, dan menghasilkan permintaan bahkan lebih mudah. Perpustakaan dan protokol biasa bertanggung jawab atas keamanan.

Minta contoh, langsung dari dokumentasi:

DAPATKAN permintaan dalam format 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

Permintaan POST dalam format 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

Sama tetapi menggunakan 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"
    }
  ]
}

Jelas, router rumah yang langka (jika setidaknya satu) dapat bekerja dengan DNS dengan cara ini, tetapi ini tidak berarti bahwa dukungan tidak akan muncul besok - dan, yang menarik, di sini kita dapat mengimplementasikan bekerja dengan DNS di aplikasi kita (seperti yang sudah akan membuat Mozilla, hanya di server Cloudflare).

DNS melalui TLS

Secara default, kueri DNS dikirimkan tanpa enkripsi. DNS melalui TLS adalah cara mengirimkannya melalui koneksi aman. Cloudflare mendukung DNS melalui TLS pada port standar 853 seperti yang ditentukan RFC7858. Ini menggunakan sertifikat yang dikeluarkan untuk host cloudflare-dns.com, TLS 1.2 dan TLS 1.3 didukung.

Membuat koneksi dan bekerja sesuai protokol berlangsung seperti ini:

  • Sebelum membuat koneksi DNS, klien menyimpan hash SHA64 yang dikodekan base256 dari sertifikat TLS cloudflare-dns.com (disebut SPKI)
  • Klien DNS membuat koneksi TCP ke cloudflare-dns.com:853
  • Klien DNS memulai jabat tangan TLS
  • Selama proses jabat tangan TLS, host cloudflare-dns.com menunjukkan sertifikat TLS-nya.
  • Setelah koneksi TLS dibuat, klien DNS dapat mengirim permintaan DNS melalui saluran aman, yang mencegah permintaan dan respons disadap dan dipalsukan.
  • Semua kueri DNS yang dikirim melalui koneksi TLS harus mematuhi mengirim DNS melalui TCP.

Contoh permintaan melalui DNS melalui 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

Opsi ini tampaknya berfungsi paling baik untuk server DNS lokal yang melayani kebutuhan jaringan lokal atau satu pengguna. Benar, dengan dukungan standarnya tidak terlalu bagus, tapi - semoga saja!

Dua kata penjelasan tentang isi percakapan

Singkatan DNS adalah singkatan dari Layanan Nama Domain (jadi mengatakan "layanan DNS" agak berlebihan, singkatan tersebut sudah mengandung kata "layanan"), dan digunakan untuk menyelesaikan tugas sederhana - untuk memahami alamat IP yang dimiliki nama host tertentu. Setiap kali seseorang mengeklik tautan, atau memasukkan alamat di bilah alamat browser (misalnya, misalnya "https://habrahabr.ru/post/346430/"), komputer manusia sedang mencoba mencari tahu server mana yang akan mengirim permintaan untuk mendapatkan konten halaman. Dalam kasus habrahabr.ru, respons dari DNS akan berisi indikasi alamat IP server web: 178.248.237.68, dan kemudian browser akan mencoba menghubungi server dengan alamat IP yang ditentukan.

Pada gilirannya, server DNS, setelah menerima permintaan "apa alamat IP dari host bernama habrahabr.ru?", menentukan apakah ia mengetahui sesuatu tentang host yang ditentukan. Jika tidak, ia akan membuat permintaan ke server DNS lain di dunia, dan, selangkah demi selangkah, mencoba mencari tahu jawaban atas pertanyaan yang diajukan. Hasilnya, setelah menemukan jawaban akhir, data yang ditemukan dikirim ke klien yang masih menunggunya, ditambah lagi disimpan dalam cache server DNS itu sendiri, yang memungkinkan Anda menjawab pertanyaan serupa lebih cepat di lain waktu.

Masalah yang umum terjadi adalah, pertama, data kueri DNS dikirimkan secara jelas (yang memberikan siapa pun yang memiliki akses ke arus lalu lintas kemampuan untuk mengisolasi kueri DNS dan tanggapan yang mereka terima dan kemudian menguraikannya untuk tujuan mereka sendiri; ini memberikan kemampuan menargetkan iklan dengan akurat untuk klien DNS, yang jumlahnya cukup banyak!). Kedua, beberapa ISP (kami tidak akan menuding, tapi bukan yang terkecil) cenderung menampilkan iklan alih-alih satu atau beberapa halaman yang diminta (yang diterapkan dengan cukup sederhana: alih-alih alamat IP yang ditentukan untuk kueri oleh habranabr.ru nama host, orang acak Dengan demikian, alamat server web penyedia dikembalikan, tempat halaman yang berisi iklan disajikan). Ketiga, ada penyedia akses Internet yang menerapkan mekanisme untuk memenuhi persyaratan pemblokiran situs individual dengan mengganti respons DNS yang benar tentang alamat IP sumber daya web yang diblokir dengan alamat IP server mereka yang berisi halaman rintisan (sebagai akibatnya, akses ke situs tersebut terasa lebih rumit), atau ke alamat server proxy Anda yang melakukan pemfilteran.

Ini mungkin gambar dari situsnya. http://1.1.1.1/, digunakan untuk mendeskripsikan koneksi ke layanan. Penulis tampaknya cukup yakin dengan kualitas DNS mereka (namun, sulit mengharapkan hal lain dari Cloudflare):

Kami menemui layanan dari Cloudflare di alamat 1.1.1.1 dan 1.0.0.1, atau “rak DNS publik telah tiba!”

Seseorang dapat sepenuhnya memahami Cloudflare, pencipta layanan ini: mereka mendapatkan penghasilan dengan memelihara dan mengembangkan salah satu jaringan CDN paling populer di dunia (yang fungsinya tidak hanya mencakup mendistribusikan konten, tetapi juga menghosting zona DNS), dan, karena keinginan mereka, yang tidak berpengalaman, ajarkan itu siapa yang tidak mereka kenal, untuk itu ke mana harus pergi di jaringan global, cukup sering mengalami pemblokiran alamat servernya jangan katakan siapa - jadi memiliki DNS yang tidak terpengaruh oleh "teriakan, peluit, dan coretan" bagi perusahaan berarti lebih sedikit kerugian bagi bisnis mereka. Dan keuntungan teknis (sepele, tapi bagus: khususnya, untuk klien DNS Cloudflare gratis, memperbarui catatan DNS sumber daya yang dihosting di server DNS perusahaan akan terjadi secara instan) membuat penggunaan layanan yang dijelaskan dalam posting menjadi lebih menarik.

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Apakah Anda akan menggunakan layanan baru ini?

  • Ya, cukup dengan menentukannya di OS dan/atau di router

  • Ya, dan saya akan menggunakan protokol baru (DNS melalui HTTPs dan DNS melalui TLS)

  • Tidak, saya memiliki cukup server saat ini (ini adalah penyedia publik: Google, Yandex, dll.)

  • Tidak, saya bahkan tidak tahu apa yang saya gunakan saat ini

  • Saya menggunakan DNS rekursif saya dengan terowongan SSL ke sana

693 pengguna memilih. 191 pengguna abstain.

Sumber: www.habr.com

Tambah komentar