Chúng tôi gặp dịch vụ từ Cloudflare tại các địa chỉ 1.1.1.1 và 1.0.0.1 hoặc “giá DNS công cộng đã đến!”

Chúng tôi gặp dịch vụ từ Cloudflare tại các địa chỉ 1.1.1.1 và 1.0.0.1 hoặc “giá DNS công cộng đã đến!”

Công ty Cloudflare trình bày DNS công cộng tại các địa chỉ:

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

Chính sách được cho là "Quyền riêng tư là trên hết" để người dùng có thể yên tâm về nội dung yêu cầu của mình.

Dịch vụ này thú vị ở chỗ, ngoài DNS thông thường, nó còn cung cấp khả năng sử dụng các công nghệ DNS trên TLS и DNS-over-HTTPS, điều này sẽ ngăn chặn đáng kể việc các nhà cung cấp nghe trộm yêu cầu của bạn dọc theo đường dẫn yêu cầu - và thu thập số liệu thống kê, giám sát, quản lý quảng cáo. Cloudflare tuyên bố rằng ngày thông báo (ngày 1 tháng 2018 năm 04 hoặc 01/XNUMX theo ký hiệu của Mỹ) không được chọn ngẫu nhiên: “bốn đơn vị” sẽ được trình bày vào ngày nào khác trong năm?

Vì khán giả của Habr hiểu biết về mặt kỹ thuật nên phần truyền thống "tại sao bạn cần DNS?" Tôi sẽ đặt nó ở cuối bài, nhưng ở đây tôi sẽ nêu những điều hữu ích thiết thực hơn:

Làm thế nào để sử dụng dịch vụ mới?

Điều đơn giản nhất là chỉ định các địa chỉ máy chủ DNS ở trên trong máy khách DNS của bạn (hoặc ngược dòng trong cài đặt của máy chủ DNS cục bộ mà bạn sử dụng). Việc thay thế các giá trị thông thường có hợp lý không DNS của Google (8.8.8.8, v.v.) hoặc ít phổ biến hơn một chút Máy chủ DNS công cộng Yandex (77.88.8.8 và những thứ khác tương tự) đến các máy chủ từ Cloudflare - họ sẽ quyết định thay bạn, nhưng nói thay cho người mới bắt đầu lịch trình tốc độ phản hồi, theo đó Cloudflare nhanh hơn tất cả các đối thủ cạnh tranh (Tôi sẽ làm rõ: các phép đo được thực hiện bởi dịch vụ bên thứ ba và tất nhiên tốc độ đối với một khách hàng cụ thể có thể khác nhau).

Chúng tôi gặp dịch vụ từ Cloudflare tại các địa chỉ 1.1.1.1 và 1.0.0.1 hoặc “giá DNS công cộng đã đến!”

Sẽ thú vị hơn nhiều khi làm việc với các chế độ mới trong đó yêu cầu chuyển đến máy chủ qua kết nối được mã hóa (trên thực tế, phản hồi được trả về thông qua nó), DNS-over-TLS và DNS-over-HTTPS đã đề cập. Thật không may, chúng không được hỗ trợ “ngay lập tức” (các tác giả tin rằng điều này là “chưa”), nhưng không khó để sắp xếp công việc của chúng trong phần mềm của bạn (hoặc thậm chí trên phần cứng của bạn):

DNS qua HTTP (DoH)

Như tên cho thấy, giao tiếp diễn ra qua kênh HTTPS, có nghĩa là

  1. sự hiện diện của điểm hạ cánh (điểm cuối) - nó nằm ở địa chỉ https://cloudflare-dns.com/dns-query
  2. một khách hàng có thể gửi yêu cầu và nhận phản hồi.

Các yêu cầu có thể ở định dạng DNS Wireformat được xác định trong RFC1035 (được gửi bằng phương thức POST và GET HTTP) hoặc ở định dạng JSON (sử dụng phương thức GET HTTP). Đối với cá nhân tôi, ý tưởng thực hiện các yêu cầu DNS thông qua các yêu cầu HTTP có vẻ bất ngờ, nhưng có một điều hợp lý trong đó: một yêu cầu như vậy sẽ vượt qua nhiều hệ thống lọc lưu lượng, việc phân tích cú pháp phản hồi khá đơn giản và việc tạo yêu cầu thậm chí còn dễ dàng hơn. Các thư viện và giao thức thông thường chịu trách nhiệm về bảo mật.

Yêu cầu ví dụ, trực tiếp từ tài liệu:

NHẬN yêu cầu ở định dạng 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

Yêu cầu POST ở định dạng 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

Tương tự nhưng sử dụng 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"
    }
  ]
}

Rõ ràng, một bộ định tuyến gia đình hiếm hoi (nếu ít nhất một) có thể hoạt động với DNS theo cách này, nhưng điều này không có nghĩa là hỗ trợ sẽ không xuất hiện vào ngày mai - và thật thú vị, ở đây chúng ta hoàn toàn có thể triển khai làm việc với DNS trong ứng dụng của mình (như đã sẽ tạo ra Mozilla, chỉ trên máy chủ Cloudflare).

DNS qua TLS

Theo mặc định, các truy vấn DNS được truyền đi mà không cần mã hóa. DNS qua TLS là một cách để gửi chúng qua kết nối an toàn. Cloudflare hỗ trợ DNS over TLS trên cổng chuẩn 853 theo quy định RFC7858. Điều này sử dụng chứng chỉ được cấp cho máy chủ cloudflare-dns.com, TLS 1.2 và TLS 1.3 được hỗ trợ.

Việc thiết lập kết nối và làm việc theo giao thức sẽ diễn ra như sau:

  • Trước khi thiết lập kết nối DNS, máy khách lưu trữ hàm băm SHA64 được mã hóa base256 của chứng chỉ TLS của cloudflare-dns.com (được gọi là SPKI)
  • Máy khách DNS thiết lập kết nối TCP tới cloudflare-dns.com:853
  • Máy khách DNS bắt đầu bắt tay TLS
  • Trong quá trình bắt tay TLS, máy chủ cloudflare-dns.com xuất trình chứng chỉ TLS của nó.
  • Sau khi kết nối TLS được thiết lập, máy khách DNS có thể gửi truy vấn DNS qua kênh bảo mật, điều này ngăn chặn các yêu cầu và phản hồi bị nghe lén và giả mạo.
  • Tất cả các truy vấn DNS được gửi qua kết nối TLS phải tuân thủ gửi DNS qua TCP.

Ví dụ về yêu cầu qua DNS qua 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

Tùy chọn này dường như hoạt động tốt nhất đối với các máy chủ DNS cục bộ phục vụ nhu cầu của mạng cục bộ hoặc một người dùng. Đúng, với sự hỗ trợ của tiêu chuẩn thì không tốt lắm, nhưng - hãy hy vọng!

Hai từ giải thích nội dung cuộc trò chuyện

DNS viết tắt là viết tắt của Dịch vụ tên miền (vì vậy, nói “dịch vụ DNS” hơi dư thừa, từ viết tắt đã chứa từ “dịch vụ”) và được sử dụng để giải quyết một nhiệm vụ đơn giản - hiểu địa chỉ IP của một tên máy chủ cụ thể. Mỗi khi một người nhấp vào một liên kết hoặc nhập địa chỉ vào thanh địa chỉ của trình duyệt (chẳng hạn như "https://habrahabr.ru/post/346430/"), máy tính của con người đang cố gắng tìm ra máy chủ nào sẽ gửi yêu cầu lấy nội dung của trang. Trong trường hợp habrahabr.ru, phản hồi từ DNS sẽ chứa dấu hiệu địa chỉ IP của máy chủ web: 178.248.237.68, sau đó trình duyệt sẽ cố gắng liên hệ với máy chủ bằng địa chỉ IP được chỉ định.

Đổi lại, máy chủ DNS, sau khi nhận được yêu cầu “địa chỉ IP của máy chủ có tên habrahabr.ru là gì?”, sẽ xác định xem nó có biết gì về máy chủ được chỉ định hay không. Nếu không, nó sẽ đưa ra yêu cầu tới các máy chủ DNS khác trên thế giới và từng bước cố gắng tìm ra câu trả lời cho câu hỏi được hỏi. Do đó, khi tìm thấy câu trả lời cuối cùng, dữ liệu tìm thấy sẽ được gửi đến máy khách vẫn đang chờ chúng, cộng với nó được lưu trữ trong bộ đệm của chính máy chủ DNS, điều này sẽ cho phép bạn trả lời một câu hỏi tương tự nhanh hơn nhiều vào lần sau.

Một vấn đề phổ biến là trước tiên, dữ liệu truy vấn DNS được truyền đi một cách rõ ràng (điều này mang lại cho bất kỳ ai có quyền truy cập vào luồng lưu lượng truy cập khả năng tách biệt các truy vấn DNS và phản hồi mà họ nhận được, sau đó phân tích chúng cho mục đích riêng của họ; điều này mang lại khả năng nhắm mục tiêu quảng cáo chính xác cho máy khách DNS, khá nhiều!). Thứ hai, một số ISP (chúng tôi sẽ không chỉ tay, nhưng không phải những ISP nhỏ nhất) có xu hướng hiển thị quảng cáo thay vì một hoặc một trang được yêu cầu khác (được triển khai khá đơn giản: thay vì địa chỉ IP được chỉ định cho truy vấn của habranabr.ru tên máy chủ, một người ngẫu nhiên. Do đó, địa chỉ máy chủ web của nhà cung cấp được trả về, nơi trang chứa quảng cáo được phục vụ). Thứ ba, có những nhà cung cấp dịch vụ truy cập Internet triển khai cơ chế đáp ứng các yêu cầu chặn các trang web riêng lẻ bằng cách thay thế phản hồi DNS chính xác về địa chỉ IP của các tài nguyên web bị chặn bằng địa chỉ IP của máy chủ chứa các trang sơ khai của họ (kết quả là quyền truy cập vào những trang web như vậy phức tạp hơn đáng kể) hoặc đến địa chỉ máy chủ proxy thực hiện lọc của bạn.

Đây có lẽ phải là một hình ảnh từ trang web. http://1.1.1.1/, được sử dụng để mô tả kết nối với dịch vụ. Các tác giả có vẻ khá tự tin vào chất lượng DNS của họ (tuy nhiên, thật khó để mong đợi điều gì khác từ Cloudflare):

Chúng tôi gặp dịch vụ từ Cloudflare tại các địa chỉ 1.1.1.1 và 1.0.0.1 hoặc “giá DNS công cộng đã đến!”

Người ta có thể hiểu đầy đủ về Cloudflare, người tạo ra dịch vụ: họ kiếm tiền bằng cách duy trì và phát triển một trong những mạng CDN phổ biến nhất trên thế giới (chức năng này không chỉ bao gồm phân phối nội dung mà còn lưu trữ các vùng DNS) và, do mong muốn của những người đó, ai không thành thạo, dạy những điều đó họ không biết ai, đến đó đi đâu trong mạng toàn cầu, thường gặp phải tình trạng chặn địa chỉ máy chủ của họ khỏi đừng nói ai - vì vậy việc có một DNS không bị ảnh hưởng bởi "tiếng la hét, huýt sáo và viết nguệch ngoạc" đối với công ty có nghĩa là ít gây hại hơn cho hoạt động kinh doanh của họ. Và các lợi thế về mặt kỹ thuật (một chuyện nhỏ nhưng hay: đặc biệt, đối với các máy khách sử dụng DNS Cloudflare miễn phí, việc cập nhật bản ghi DNS của các tài nguyên được lưu trữ trên máy chủ DNS của công ty sẽ diễn ra ngay lập tức) khiến việc sử dụng dịch vụ được mô tả trong bài đăng trở nên thú vị hơn.

Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.

Bạn sẽ sử dụng dịch vụ mới chứ?

  • Có, chỉ cần chỉ định nó trong HĐH và/hoặc trên bộ định tuyến

  • Có, và tôi sẽ sử dụng các giao thức mới (DNS qua HTTP và DNS qua TLS)

  • Không, tôi có đủ máy chủ hiện tại (đây là nhà cung cấp công cộng: Google, Yandex, v.v.)

  • Không, tôi thậm chí còn không biết mình đang sử dụng cái gì

  • Tôi sử dụng DNS đệ quy của mình với đường hầm SSL cho họ

693 người dùng bình chọn. 191 người dùng đã bỏ phiếu trắng.

Nguồn: www.habr.com

Thêm một lời nhận xét