Біз 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-тен басқа, технологияларды пайдалану мүмкіндігін береді TLS арқылы DNS и HTTPS арқылы DNS, бұл провайдерлердің сұраулар жолында сіздің сұрауларыңызды тыңдауын айтарлықтай болдырмайды - және статистиканы жинайды, бақылайды, жарнаманы басқарады. Cloudflare хабарландыру күні (1 жылдың 2018 сәуірі немесе американдық белгілерде 04/01) кездейсоқ таңдалмағанын айтады: «төрт бірлік» жылдың тағы қай күні ұсынылады?

Хабрдың аудиториясы техникалық жағынан сауатты болғандықтан, дәстүрлі бөлім «сізге DNS не үшін қажет?» Мен оны посттың соңына қоямын, бірақ мұнда мен практикалық пайдалы нәрселерді айтамын:

Жаңа қызметті қалай пайдалануға болады?

Ең қарапайым нәрсе - DNS клиентінде жоғарыдағы DNS сервер мекенжайларын (немесе сіз пайдаланатын жергілікті DNS серверінің параметрлерінде жоғары ағын ретінде) көрсету. Әдеттегі мәндерді ауыстырудың мағынасы бар ма Google DNS (8.8.8.8, т.б.) немесе азырақ жиі кездеседі Yandex жалпы DNS серверлері (77.88.8.8 және басқалары) Cloudflare серверлеріне - олар сіз үшін шешеді, бірақ жаңадан бастағандар үшін сөйлейді кесте жауап беру жылдамдығы, оған сәйкес Cloudflare барлық бәсекелестерге қарағанда жылдамырақ (нақтылаймын: өлшемдерді үшінші тарап қызметі қабылдаған және белгілі бір клиентке жылдамдық, әрине, әр түрлі болуы мүмкін).

Біз Cloudflare қызметін 1.1.1.1 және 1.0.0.1 мекенжайларында кездестіреміз немесе «жалпы DNS сөресі келді!»

Сұраныс серверге шифрланған қосылым арқылы (шын мәнінде жауап сол арқылы қайтарылады), аталған DNS-over-TLS және DNS-over-HTTPS арқылы өтетін жаңа режимдермен жұмыс істеу әлдеқайда қызықты. Өкінішке орай, оларға «қораптан тыс» қолдау көрсетілмейді (авторлар бұл «әлі» деп санайды), бірақ олардың жұмысын бағдарламалық жасақтамада (немесе тіпті аппараттық құралда) ұйымдастыру қиын емес:

HTTP арқылы DNS (DoH)

Аты айтып тұрғандай, байланыс HTTPS арнасы арқылы жүзеге асады, яғни

  1. қону нүктесінің болуы (соңғы нүкте) - ол мекенжайда орналасқан https://cloudflare-dns.com/dns-queryмен
  2. сұрауларды жіберіп, жауап ала алатын клиент.

Сұраулар келесіде анықталған DNS Wireformat пішімінде болуы мүмкін RFC1035 (POST және GET HTTP әдістері арқылы жіберіледі) немесе JSON пішімінде (GET HTTP әдісі арқылы). Мен үшін HTTP сұраулары арқылы DNS сұрауларын жасау идеясы күтпеген болып көрінді, бірақ онда ұтымды астық бар: мұндай сұраныс трафикті сүзгілеудің көптеген жүйелерінен өтеді, жауаптарды талдау өте қарапайым, ал сұрауларды жасау одан да оңай. Қауіпсіздікке әдеттегі кітапханалар мен хаттамалар жауап береді.

Тікелей құжаттамадан мысалдарды сұраңыз:

DNS Wireformat пішіміндегі GET сұрауы

$ 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

DNS Wireformat пішіміндегі POST сұрауы

$ 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 серверлерінде).

TLS арқылы DNS

Әдепкі бойынша, DNS сұраулары шифрлаусыз жіберіледі. TLS арқылы DNS - оларды қауіпсіз қосылым арқылы жіберу тәсілі. Cloudflare белгіленгендей стандартты 853 портында TLS арқылы DNS қолдайды RFC7858. Бұл cloudflare-dns.com хосты үшін берілген сертификатты пайдаланады, TLS 1.2 және TLS 1.3 қолдау көрсетеді.

Байланысты орнату және хаттамаға сәйкес жұмыс істеу келесідей болады:

  • DNS қосылымын орнатпас бұрын клиент cloudflare-dns.com (SPKI деп аталады) TLS сертификатының base64 кодталған SHA256 хэшін сақтайды.
  • DNS клиенті cloudflare-dns.com:853 сайтына TCP қосылымын орнатады
  • DNS клиенті TLS қол алысуын бастайды
  • TLS қол алысу процесі кезінде cloudflare-dns.com хосты TLS сертификатын ұсынады.
  • TLS қосылымы орнатылғаннан кейін DNS клиенті DNS сұрауларын қауіпсіз арна арқылы жібере алады, бұл сұраулар мен жауаптардың тыңдалуын және жалғандығын болдырмайды.
  • TLS қосылымы арқылы жіберілген барлық DNS сұраулары мына талаптарға сәйкес болуы керек TCP арқылы DNS жіберу.

TLS арқылы DNS арқылы сұраудың мысалы:

$ 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 сервері «habrahabr.ru атты хосттың IP-мекен-жайы қандай?» деген сұрауды алып, көрсетілген хост туралы бірдеңе білетінін анықтайды. Олай болмаса, ол әлемдегі басқа DNS серверлеріне сұраныс жасайды және қойылған сұрақтың жауабын кезең-кезеңімен анықтауға тырысады. Нәтижесінде, түпкілікті жауапты тапқаннан кейін, табылған деректер әлі де күтіп тұрған клиентке жіберіледі, сонымен қатар ол DNS серверінің кэшінде сақталады, бұл келесі жолы ұқсас сұраққа тезірек жауап беруге мүмкіндік береді.

Жалпы мәселе, біріншіден, DNS сұрауының деректері анық түрде беріледі (бұл трафик ағынына рұқсаты бар кез келген адамға DNS сұрауларын және олар алатын жауаптарды оқшаулау, содан кейін оларды өз мақсаттары үшін талдау мүмкіндігін береді; бұл DNS клиенті үшін жарнамаларды дәлдікпен бағыттау мүмкіндігі, бұл өте көп!). Екіншіден, кейбір Интернет-провайдерлер (біз саусақтарыңызды көрсетпейміз, бірақ ең кішкентайлары емес) бір немесе басқа сұралған беттің орнына жарнамаларды көрсетеді (ол өте қарапайым орындалады: habranabr.ru сұрауы үшін көрсетілген IP мекенжайының орнына). хост атауы, кездейсоқ адам Осылайша, провайдердің веб-серверінің мекенжайы қайтарылады, онда жарнама бар бет қызмет көрсетеді). Үшіншіден, блокталған веб-ресурстардың IP мекенжайлары туралы дұрыс DNS жауаптарын өз серверінің 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 жазбаларын жаңарту лезде болады) постта сипатталған қызметті пайдалануды одан да қызықты етеді.

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сіз жаңа қызметті пайдаланасыз ба?

  • Иә, оны операциялық жүйеде және/немесе маршрутизаторда көрсету арқылы

  • Иә, мен жаңа протоколдарды (HTTP арқылы DNS және TLS арқылы DNS) қолданамын.

  • Жоқ, менде ағымдағы серверлер жеткілікті (бұл қоғамдық провайдер: Google, Yandex және т.б.)

  • Жоқ, мен қазір не қолданатынымды да білмеймін

  • Мен оларға SSL туннелі бар рекурсивті DNS қолданамын

693 пайдаланушы дауыс берді. 191 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру