Ја среќаваме услугата од 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-над-TLS и DNS-преку-HTTPS, што во голема мера ќе ги спречи провајдерите да ги прислушуваат вашите барања по патот на барањата - и да собираат статистики, да следат, да управуваат со рекламирањето. Cloudflare тврди дека датумот на објавувањето (1 април 2018 година или 04/01 во американска нотација) не е случајно избран: кој друг ден од годината ќе бидат претставени „четирите единици“?

Бидејќи публиката на Хабр е технички разумна, традиционалниот дел „зошто ви треба 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. За жал, тие не се поддржани „надвор од кутијата“ (авторите веруваат дека ова е „сè уште“), но не е тешко да се организира нивната работа во вашиот софтвер (или дури и на вашиот хардвер):

DNS преку HTTP (DoH)

Како што сугерира името, комуникацијата се одвива преку HTTPS канал, што значи

  1. присуство на точка за слетување (крајна точка) - се наоѓа на адресата https://cloudflare-dns.com/dns-queryИ
  2. клиент кој може да испраќа барања и да прима одговори.

Барањата може да бидат или во формат DNS Wireformat дефиниран во RFC1035 (испратено со користење на методите POST и GET HTTP), или во JSON формат (со користење на методот GET HTTP). За мене лично, идејата за правење барања за DNS преку барања за HTTP се чинеше неочекувана, но има рационално зрно во тоа: таквото барање ќе помине многу системи за филтрирање сообраќај, парсирањето одговори е прилично едноставно, а генерирањето барања е уште полесно. Вообичаените библиотеки и протоколи се одговорни за безбедноста.

Побарајте примери, директно од документацијата:

Добијте барање во формат 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 адресата на веб-серверот: 178.248.237.68, а потоа прелистувачот веќе ќе се обиде да го контактира серверот со наведената IP адреса.

За возврат, серверот DNS, откако го доби барањето „која е IP адресата на домаќинот со име habrahabr.ru?“, одредува дали знае нешто за наведениот домаќин. Ако не, тој испраќа барање до други DNS сервери во светот и, чекор по чекор, се обидува да го дознае одговорот на поставеното прашање. Како резултат на тоа, по наоѓањето на конечниот одговор, пронајдените податоци се испраќаат до клиентот кој сè уште ги чека, плус се складираат во кешот на самиот DNS сервер, што ќе ви овозможи следниот пат да одговорите на слично прашање многу побрзо.

Вообичаен проблем е тоа што, прво, податоците за барањето DNS се пренесуваат на чисто (што му дава на секој што има пристап до протокот на сообраќајот можност да ги изолира барањата за DNS и одговорите што ги добиваат и потоа да ги анализира за свои цели; ова дава способноста да се насочуваат реклами со точност за DNS клиент, што е доста!). Второ, некои интернет провајдери (нема да покажуваме со прст, но не и најмалите) имаат тенденција да прикажуваат реклами наместо една или друга барана страница (која е имплементирана многу едноставно: наместо наведената IP адреса за барање од habranabr.ru име на домаќин, случајно лице Така, се враќа адресата на веб-серверот на провајдерот, каде што се служи страницата што ја содржи рекламата). Трето, постојат провајдери за пристап до Интернет кои имплементираат механизам за исполнување на барањата за блокирање на поединечни страници со замена на точните 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

Додадете коментар