Ens trobem amb el servei de Cloudflare a les adreces 1.1.1.1 i 1.0.0.1, o "ha arribat el prestatge DNS públic!"

Ens trobem amb el servei de Cloudflare a les adreces 1.1.1.1 i 1.0.0.1, o "ha arribat el prestatge DNS públic!"

Empresa Cloudflare presentat DNS públic a adreces:

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

Es diu que la política és "Privadesa primer" perquè els usuaris puguin tenir tranquil·litat sobre el contingut de les seves sol·licituds.

El servei és interessant perquè, a més del DNS habitual, ofereix la possibilitat d'utilitzar tecnologies DNS sobre TLS и DNS sobre HTTPS, cosa que evitarà en gran mesura que els proveïdors escoltin les vostres sol·licituds al llarg del camí de les sol·licituds, i recopilin estadístiques, supervisin i gestionen la publicitat. Cloudflare afirma que la data de l'anunci (1 d'abril de 2018 o 04/01 en notació americana) no va ser escollida per casualitat: quin altre dia de l'any es presentaran les "quatre unitats"?

Com que l'audiència d'Habr és tècnicament experta, la secció tradicional "per què necessiteu DNS?" Ho posaré al final de l'entrada, però aquí hi posaré coses més útils a la pràctica:

Com utilitzar el nou servei?

El més senzill és especificar les adreces del servidor DNS anteriors al vostre client DNS (o com a aigües amunt a la configuració del servidor DNS local que feu servir). Té sentit substituir els valors habituals DNS de Google (8.8.8.8, etc.), o una mica menys comú Servidors DNS públics Yandex (77.88.8.8 i altres com ells) als servidors de Cloudflare: ells decidiran per tu, però parlen per un principiant horari velocitat de resposta, segons la qual Cloudflare és més ràpid que tots els competidors (aclariré: les mesures les va prendre un servei de tercers i la velocitat a un client específic, per descomptat, pot ser diferent).

Ens trobem amb el servei de Cloudflare a les adreces 1.1.1.1 i 1.0.0.1, o "ha arribat el prestatge DNS públic!"

És molt més interessant treballar amb nous modes en què la sol·licitud vola al servidor mitjançant una connexió xifrada (de fet, la resposta es retorna a través d'ella), els esmentats DNS-over-TLS i DNS-over-HTTPS. Malauradament, no són compatibles "fora de la caixa" (els autors creuen que això és "encara"), però no és difícil organitzar el seu treball al vostre programari (o fins i tot al vostre maquinari):

DNS sobre HTTPs (DoH)

Com el seu nom indica, la comunicació es fa a través d'un canal HTTPS, és a dir

  1. la presència d'un punt d'aterratge (punt final): es troba a l'adreça https://cloudflare-dns.com/dns-queryI
  2. un client que pot enviar peticions i rebre respostes.

Les sol·licituds poden tenir el format DNS Wireformat definit a RFC1035 (enviat mitjançant els mètodes POST i GET HTTP) o en format JSON (utilitzant el mètode GET HTTP). Per a mi personalment, la idea de fer sol·licituds de DNS mitjançant peticions HTTP semblava inesperada, però hi ha un gra racional: aquesta sol·licitud passarà molts sistemes de filtratge de trànsit, analitzar les respostes és bastant senzill i generar sol·licituds és encara més fàcil. Les biblioteques i protocols habituals són responsables de la seguretat.

Demaneu exemples, directament de la documentació:

Sol·licitud GET en 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

Sol·licitud POST en 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

El mateix però utilitzant 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"
    }
  ]
}

Òbviament, un encaminador domèstic rar (si almenys un) pot funcionar amb DNS d'aquesta manera, però això no vol dir que el suport no aparegui demà, i, curiosament, aquí podem implementar bastant treballar amb DNS a la nostra aplicació (com ja va a fer Mozilla, només als servidors Cloudflare).

DNS sobre TLS

Per defecte, les consultes DNS es transmeten sense xifratge. DNS sobre TLS és una manera d'enviar-los mitjançant una connexió segura. Cloudflare admet DNS sobre TLS al port estàndard 853 tal com s'indica RFC7858. Això utilitza un certificat emès per a l'amfitrió de cloudflare-dns.com, s'admeten TLS 1.2 i TLS 1.3.

Establir una connexió i treballar segons el protocol és una cosa així:

  • Abans d'establir una connexió DNS, el client emmagatzema un hash SHA64 codificat en base256 del certificat TLS de cloudflare-dns.com (anomenat SPKI)
  • El client DNS estableix una connexió TCP a cloudflare-dns.com:853
  • El client DNS inicia l'enllaç TLS
  • Durant el procés d'enllaç de TLS, l'amfitrió de cloudflare-dns.com presenta el seu certificat TLS.
  • Un cop establerta una connexió TLS, el client DNS pot enviar consultes DNS a través d'un canal segur, que evita que les sol·licituds i les respostes siguin escoltades i falsificades.
  • Totes les consultes DNS enviades a través d'una connexió TLS han de complir amb el enviant DNS per TCP.

Un exemple d'una sol·licitud mitjançant DNS a través de 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

Sembla que aquesta opció funciona millor per als servidors DNS locals que atenen les necessitats d'una xarxa local o d'un sol usuari. És cert que amb el suport de l'estàndard no és molt bo, però - esperem!

Dues paraules d'explicació de què tracta la conversa

L'abreviatura DNS significa servei de noms de domini (per tant dir "servei DNS" és una mica redundant, l'abreviatura ja conté la paraula "servei") i s'utilitza per resoldre una tasca senzilla: entendre quina adreça IP té un nom d'amfitrió concret. Cada vegada que una persona fa clic en un enllaç o introdueix una adreça a la barra d'adreces del navegador (per exemple, alguna cosa com "https://habrahabr.ru/post/346430/"), l'ordinador humà està intentant esbrinar quin servidor enviar una sol·licitud per obtenir el contingut de la pàgina. En el cas de habrahabr.ru, la resposta del DNS contindrà una indicació de l'adreça IP del servidor web: 178.248.237.68 i, aleshores, el navegador ja intentarà contactar amb el servidor amb l'adreça IP especificada.

Al seu torn, el servidor DNS, després d'haver rebut la sol·licitud "quina és l'adreça IP de l'amfitrió anomenat habrahabr.ru?", determina si sap alguna cosa sobre l'amfitrió especificat. Si no, fa una sol·licitud a altres servidors DNS del món i, pas a pas, intenta esbrinar la resposta a la pregunta formulada. Com a resultat, en trobar la resposta final, les dades trobades s'envien al client que encara les espera, a més s'emmagatzemen a la memòria cau del propi servidor DNS, la qual cosa us permetrà respondre una pregunta semblant molt més ràpida la propera vegada.

Un problema comú és que, primer, les dades de la consulta DNS es transmeten en clar (la qual cosa dóna a qualsevol persona amb accés al flux de trànsit la possibilitat d'aïllar les consultes de DNS i les respostes que reben i després analitzar-les per als seus propis propòsits; això dóna la capacitat d'orientar anuncis amb precisió per a un client DNS, que és bastant!). En segon lloc, alguns ISP (no assenyalarem amb el dit, però no els més petits) tendeixen a mostrar anuncis en lloc d'una o altra pàgina sol·licitada (que s'implementa de manera senzilla: en lloc de l'adreça IP especificada per a una consulta per part de habranabr.ru). nom d'amfitrió, una persona aleatòria Així, es retorna l'adreça del servidor web del proveïdor, on es publica la pàgina que conté l'anunci). En tercer lloc, hi ha proveïdors d'accés a Internet que implementen un mecanisme per complir els requisits per bloquejar llocs individuals substituint les respostes DNS correctes sobre les adreces IP dels recursos web bloquejats per l'adreça IP del seu servidor que conté pàgines d'estub (com a resultat, l'accés a aquests llocs són notablement més complicats) o a l'adreça del vostre servidor intermediari que realitza el filtratge.

Probablement hauria de ser una imatge del lloc. http://1.1.1.1/, que s'utilitza per descriure la connexió amb el servei. Els autors semblen confiar bastant en la qualitat del seu DNS (no obstant això, és difícil esperar res més de Cloudflare):

Ens trobem amb el servei de Cloudflare a les adreces 1.1.1.1 i 1.0.0.1, o "ha arribat el prestatge DNS públic!"

Hom pot entendre perfectament Cloudflare, el creador del servei: es guanyen el pa mantenint i desenvolupant una de les xarxes CDN més populars del món (les funcions inclouen no només la distribució de contingut, sinó també l'allotjament de zones DNS) i, a causa de el desig d'aquells, que no està ben versat, ensenyar-los qui no coneixen, a això on anar a la xarxa global, sovint pateix el bloqueig de les adreces dels seus servidors no diguem qui - per tant tenir un DNS que no es vegi afectat per "crits, xiulets i gargots" per a l'empresa significa menys perjudici per al seu negoci. I els avantatges tècnics (una mica, però agradables: en particular, per als clients del DNS Cloudflare gratuït, l'actualització dels registres DNS dels recursos allotjats als servidors DNS de l'empresa) fan que l'ús del servei descrit a la publicació sigui encara més interessant.

Només els usuaris registrats poden participar en l'enquesta. Inicia sessiósi us plau.

Utilitzaràs el nou servei?

  • Sí, simplement especificant-ho al sistema operatiu i/o al router

  • Sí, i faré servir protocols nous (DNS sobre HTTPs i DNS sobre TLS)

  • No, tinc prou servidors actuals (és un proveïdor públic: Google, Yandex, etc.)

  • No, ni tan sols sé què faig servir ara mateix

  • Utilitzo el meu DNS recursiu amb un túnel SSL per a ells

Han votat 693 usuaris. 191 usuari es va abstenir.

Font: www.habr.com

Afegeix comentari