Kita ketemu layanan saka Cloudflare ing alamat 1.1.1.1 lan 1.0.0.1, utawa "rak DNS umum wis teka!"

Kita ketemu layanan saka Cloudflare ing alamat 1.1.1.1 lan 1.0.0.1, utawa "rak DNS umum wis teka!"

Perusahaan Cloudflare diwenehi DNS umum ing alamat:

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

Kabijakan kasebut diarani "Privasi dhisik" supaya pangguna bisa tenang babagan isi panjaluke.

Layanan kasebut menarik amarga, saliyane DNS biasa, menehi kemampuan kanggo nggunakake teknologi DNS-over-TLS и DNS-liwat-HTTPS, sing bakal banget nyegah panyedhiya saka eavesdropping panjalukan ing sadawane path panjalukan - lan ngumpulake statistik, ngawasi, ngatur iklan. Cloudflare ngaku yen tanggal woro-woro kasebut (1 April 2018, utawa 04/01 ing notasi Amerika) ora dipilih kanthi sengaja: apa dina liyane ing taun bakal diwenehi "papat unit"?

Wiwit pamirsa Habr pinter teknis, bagean tradisional "kenapa sampeyan butuh DNS?" Aku bakal nyelehake ing pungkasan kiriman, nanging ing kene aku bakal nyatakake perkara sing luwih migunani:

Kepiye cara nggunakake layanan anyar?

Sing paling gampang yaiku nemtokake alamat server DNS ing ndhuwur ing klien DNS sampeyan (utawa minangka hulu ing setelan server DNS lokal sing sampeyan gunakake). Apa iku nggawe pangertèn kanggo ngganti nilai biasanipun DNS Google (8.8.8.8, etc.), utawa rada kurang umum Server DNS umum Yandex (77.88.8.8 lan liya-liyane) menyang server Cloudflare - dheweke bakal mutusake kanggo sampeyan, nanging ngomong kanggo pamula jadwal kacepetan respon, miturut Cloudflare luwih cepet tinimbang kabeh saingan (Aku bakal njlentrehake: pangukuran dijupuk dening layanan pihak katelu, lan kacepetan kanggo klien tartamtu, mesthi, bisa beda-beda).

Kita ketemu layanan saka Cloudflare ing alamat 1.1.1.1 lan 1.0.0.1, utawa "rak DNS umum wis teka!"

Luwih menarik kanggo nggarap mode anyar sing panjaluk kasebut mabur menyang server liwat sambungan sing dienkripsi (nyatane, tanggapan kasebut bali liwat), DNS-over-TLS lan DNS-over-HTTPS sing kasebut. Sayange, dheweke ora didhukung "metu saka kothak" (penulis percaya yen iki "durung"), nanging ora angel ngatur karya ing piranti lunak sampeyan (utawa malah ing hardware sampeyan):

DNS liwat HTTPs (DoH)

Minangka jeneng kasebut, komunikasi ditindakake liwat saluran HTTPS, tegese

  1. ngarsane titik kebangkrutan (titik pungkasan) - dumunung ing alamat https://cloudflare-dns.com/dns-querylan
  2. klien sing bisa ngirim panjalukan lan nampa respon.

Panyuwunan bisa uga ana ing format DNS Wireformat sing ditetepake ing RFC1035 (dikirim nggunakake metode HTTP POST lan GET), utawa ing format JSON (nggunakake metode HTTP GET). Kanggo kula pribadi, gagasan nggawe panjalukan DNS liwat panjalukan HTTP katon ora dikarepke, nanging ana gandum sing rasional: panyuwunan kasebut bakal ngliwati akeh sistem panyaring lalu lintas, respon parsing cukup prasaja, lan nggawe panjalukan luwih gampang. Perpustakaan lan protokol biasa tanggung jawab kanggo keamanan.

Nyuwun conto, langsung saka dokumentasi:

Njaluk panjalukan ing 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

POST request ing 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

Padha nanging nggunakake 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"
    }
  ]
}

Temenan, router omah sing langka (yen paling ora siji) bisa nggarap DNS kanthi cara iki, nanging iki ora ateges dhukungan ora bakal katon sesuk - lan, sing menarik, ing kene kita bisa nindakake kerja DNS ing aplikasi kita (kaya sing wis ana. arep nggawe Mozilla, mung ing server Cloudflare).

DNS liwat TLS

Kanthi gawan, pitakon DNS dikirim tanpa enkripsi. DNS liwat TLS minangka cara kanggo ngirim liwat sambungan sing aman. Cloudflare ndhukung DNS liwat TLS ing port standar 853 kaya sing diwenehake RFC7858. Iki nggunakake sertifikat sing ditanggepi kanggo host cloudflare-dns.com, TLS 1.2 lan TLS 1.3 didhukung.

Nggawe sambungan lan digunakake miturut protokol kaya iki:

  • Sadurunge nggawe sambungan DNS, klien nyimpen hash SHA64 sing dienkode base256 saka sertifikat TLS cloudflare-dns.com (disebut SPKI)
  • Klien DNS nggawe sambungan TCP menyang cloudflare-dns.com:853
  • Klien DNS miwiti jabat tangan TLS
  • Sajrone proses salaman TLS, host cloudflare-dns.com menehi sertifikat TLS.
  • Sawise sambungan TLS ditetepake, klien DNS bisa ngirim panjalukan DNS liwat saluran sing aman, sing nyegah panjaluk lan tanggapan supaya ora dikuping lan disalahake.
  • Kabeh pitakon DNS sing dikirim liwat sambungan TLS kudu tundhuk karo ngirim DNS liwat TCP.

Conto panjalukan liwat DNS liwat 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 iki katon paling apik kanggo server DNS lokal sing nyedhiyakake kabutuhan jaringan lokal utawa pangguna siji. Bener, kanthi dhukungan saka standar ora apik banget, nanging - ayo ngarep-arep!

Rong tembung katrangan babagan apa sing diarani pacelathon

DNS singkatan saka Layanan Jeneng Domain (dadi ujar "layanan DNS" rada keluwih, singkatan kasebut wis ngemot tembung "layanan"), lan digunakake kanggo ngatasi tugas sing gampang - kanggo ngerti alamat IP apa sing duwe jeneng host tartamtu. Saben wong ngeklik link, utawa ngetik alamat ing bilah alamat browser (umpamane, kaya "https://habrahabr.ru/post/346430/"), komputer manungsa nyoba ngerteni server endi sing ngirim panjaluk kanggo entuk konten kaca. Ing kasus habrahabr.ru, tanggapan saka DNS bakal ngemot indikasi alamat IP server web: 178.248.237.68, banjur browser bakal nyoba ngubungi server kanthi alamat IP sing ditemtokake.

Sabanjure, server DNS, sawise nampa panjalukan "apa alamat IP host sing jenenge habrahabr.ru?", nemtokake manawa ngerti apa wae babagan host sing ditemtokake. Yen ora, iku nggawe panjalukan kanggo server DNS liyane ing donya, lan, langkah dening langkah, nyoba kanggo mangerteni jawaban kanggo pitakonan takon. Akibaté, nalika nemokake jawaban pungkasan, data sing ditemokake dikirim menyang klien sing isih nunggu, lan uga disimpen ing cache server DNS dhewe, sing bakal ngidini sampeyan njawab pitakonan sing padha luwih cepet ing wektu sabanjure.

Masalah umum yaiku, pisanan, data query DNS ditularake kanthi cetha (sing menehi sapa wae sing nduweni akses menyang aliran lalu lintas kemampuan kanggo ngisolasi pitakon DNS lan respon sing ditampa banjur ngurai kanggo tujuane dhewe; iki menehi kemampuan kanggo target iklan kanthi akurasi kanggo klien DNS, sing cukup akeh!). Kapindho, sawetara ISP (ora bakal nuding driji, nanging dudu sing paling cilik) cenderung nuduhake iklan tinimbang siji utawa kaca liyane sing dijaluk (sing ditindakake kanthi gampang: tinimbang alamat IP sing ditemtokake kanggo pitakon dening habranabr.ru jeneng host, wong acak Mangkono, alamat server web panyedhiya bali, ing ngendi kaca sing ngemot pariwara dilayani). Katelu, ana panyedhiya akses Internet sing ngetrapake mekanisme kanggo ngrampungake syarat kanggo mblokir situs individu kanthi ngganti tanggapan DNS sing bener babagan alamat IP sumber daya web sing diblokir karo alamat IP server sing ngemot kaca rintisan (minangka asil, akses menyang situs kasebut katon luwih rumit), utawa menyang alamat server proxy sing nindakake nyaring.

Iki mesthine minangka gambar saka situs kasebut. http://1.1.1.1/, digunakake kanggo njlèntrèhaké sambungan menyang layanan. Penulis kayane yakin karo kualitas DNS (nanging, angel nyana apa-apa saka Cloudflare):

Kita ketemu layanan saka Cloudflare ing alamat 1.1.1.1 lan 1.0.0.1, utawa "rak DNS umum wis teka!"

Siji bisa ngerti Cloudflare, panyipta layanan kasebut: dheweke entuk roti kanthi njaga lan ngembangake salah sawijining jaringan CDN sing paling populer ing saindenging jagad (sing fungsi kalebu ora mung nyebarake konten, nanging uga dadi zona DNS), lan, amarga kepinginan wong-wong mau, sing ora ngerti, ajari wong-wong mau sing padha ora ngerti, iki arep menyang ngendi ing jaringan global, cukup asring nandhang sangsara marga saka mblokir alamat server saka aja ngomong sapa - supaya duwe DNS sing ora kena pengaruh "bengok, whistles lan scribbles" kanggo perusahaan tegese kurang gawe piala kanggo bisnis. Lan kaluwihan teknis (sepele, nanging apik: utamane, kanggo klien saka Cloudflare DNS gratis, nganyari cathetan DNS sumber daya sing di-host ing server DNS perusahaan bakal cepet) nggawe nggunakake layanan sing diterangake ing kiriman kasebut luwih menarik.

Mung pangguna pangguna sing bisa melu survey. mlebunggih.

Apa sampeyan bakal nggunakake layanan anyar?

  • Ya, kanthi mung nemtokake ing OS lan / utawa ing router

  • Ya, lan aku bakal nggunakake protokol anyar (DNS liwat HTTP lan DNS liwat TLS)

  • Ora, aku duwe cukup server saiki (iki minangka panyedhiya umum: Google, Yandex, lsp.)

  • Ora, aku malah ora ngerti apa sing aku gunakake saiki

  • Aku nggunakake DNS rekursif karo trowongan SSL kanggo wong-wong mau

693 pangguna milih. 191 pangguna abstain.

Source: www.habr.com

Add a comment