Cloudflare hizmetiyle 1.1.1.1 ve 1.0.0.1 adreslerinde buluşuyoruz, yani “genel DNS rafı geldi!”

Cloudflare hizmetiyle 1.1.1.1 ve 1.0.0.1 adreslerinde buluşuyoruz, yani “genel DNS rafı geldi!”

Cloudflare Şirketi sunulan adreslerdeki genel DNS:

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

Kullanıcıların taleplerinin içeriği konusunda rahat olabilmeleri için "Önce gizlilik" politikasının kullanıldığı iddia ediliyor.

Hizmet ilginç çünkü olağan DNS'ye ek olarak teknolojileri kullanma fırsatı da sunuyor TLS üzerinden DNS и HTTPS üzerinden DNSBu, sağlayıcıların istek yolu boyunca isteklerinizi gizlice dinlemesini ve istatistik toplamasını, reklamları izlemesini ve yönetmesini büyük ölçüde önleyecektir. Cloudflare, duyuru tarihinin (1 Nisan 2018 veya Amerikan notasyonuyla 04/01) şans eseri seçilmediğini iddia ediyor: yılın başka hangi gününde “dört ünite” tanıtacaktı?

Habr'ın izleyici kitlesi teknik açıdan bilgili olduğundan geleneksel bölüm "neden DNS'ye ihtiyacımız var?" Bunu yazının sonuna koyacağım ve burada pratik olarak daha yararlı şeylerin ana hatlarını çizeceğim:

Yeni hizmet nasıl kullanılır?

En basit şey, yukarıdaki DNS sunucu adreslerini DNS istemcinizde (veya kullandığınız yerel DNS sunucusunun ayarlarında yukarı akış olarak) belirtmektir. Her zamanki değerleri değiştirmek mantıklı mı? Google DNS'i (8.8.8.8, vb.) veya biraz daha az yaygın Yandex genel DNS sunucuları (77.88.8.8 ve onlar gibi diğerleri) Cloudflare sunucularına - sizin adınıza karar verecekler, ancak yeni başlayanlar için konuşuyor program Cloudflare'in tüm rakiplerden daha hızlı çalıştığı yanıtların hızı (açıklamama izin verin: ölçümler üçüncü taraf bir hizmet tarafından yapıldı ve belirli bir müşteriye yönelik hız elbette farklı olabilir).

Cloudflare hizmetiyle 1.1.1.1 ve 1.0.0.1 adreslerinde buluşuyoruz, yani “genel DNS rafı geldi!”

İsteğin sunucuya şifreli bir bağlantı üzerinden uçtuğu (aslında yanıtın bu üzerinden döndürüldüğü), bahsedilen DNS-over-TLS ve DNS-over-HTTPS gibi yeni modlarla çalışmak çok daha ilginç. Ne yazık ki, kutudan çıktığı gibi desteklenmiyorlar (yazarlar bunun "henüz" olduğuna inanıyorlar), ancak çalışmalarını yazılımınızda (veya hatta donanımınızda) düzenlemek zor değil:

HTTP'ler üzerinden DNS (DoH)

Adından da anlaşılacağı gibi iletişim bir HTTPS kanalı üzerinden gerçekleşir;

  1. bir iniş noktasının (uç nokta) varlığı - şurada bulunur https://cloudflare-dns.com/dns-queryve
  2. istek gönderebilen ve yanıt alabilen bir istemci.

İstekler şurada tanımlanan DNS Kablo Formatında olabilir: RFC1035 (POST ve GET HTTP yöntemleri kullanılarak gönderilir) veya JSON biçiminde (GET HTTP yöntemi kullanılarak gönderilir). Şahsen benim için, HTTP istekleri aracılığıyla DNS sorguları yapma fikri beklenmedik görünüyordu, ancak içinde rasyonel bir neden var: böyle bir istek birçok trafik filtreleme sisteminden geçecek, yanıtları ayrıştırmak oldukça basit ve istek oluşturmak daha da basit. Tanıdık kütüphaneler ve protokoller güvenlikten sorumludur.

Doğrudan belgelerden alınan örnek sorgular:

DNS Kablo Biçimi biçiminde GET isteği

$ 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 Kablo Formatında POST isteği

$ 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

Aynı, ancak JSON kullanılıyor

$ 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"
    }
  ]
}

Açıkçası, çok az sayıda ev yönlendiricisi (varsa) bu şekilde DNS ile çalışabilir, ancak bu, desteğin yarın görünmeyeceği anlamına gelmez - ve ilginç bir şekilde, burada uygulamamızda DNS ile çalışmayı kolayca uygulayabiliriz (zaten olduğu gibi) Mozilla yapacak, yalnızca Cloudflare sunucularında).

TLS üzerinden DNS

Varsayılan olarak DNS sorguları şifreleme olmadan gönderilir. TLS üzerinden DNS, bunları güvenli bir bağlantı üzerinden göndermenin bir yoludur. Cloudflare, belirtildiği gibi standart 853 numaralı bağlantı noktasında TLS üzerinden DNS'yi destekler RFC7858. Bu, cloudflare-dns.com ana bilgisayarı için verilen bir sertifikayı kullanır, TLS 1.2 ve TLS 1.3 desteklenir.

Bağlantı kurmak ve protokolle çalışmak şuna benzer:

  • İstemci, DNS ile bağlantı kurmadan önce cloudflare-dns.com'un TLS sertifikasının (SPKI olarak adlandırılır) base64 kodlu SHA256 karmasını depolar.
  • DNS istemcisi cloudflare-dns.com:853 ile bir TCP bağlantısı kurar
  • DNS istemcisi TLS anlaşması prosedürünü başlatır
  • TLS anlaşması sırasında cloudflare-dns.com ana bilgisayarı TLS sertifikasını sunar.
  • TLS bağlantısı kurulduktan sonra, DNS istemcisi, DNS sorgularını güvenli bir kanal üzerinden gönderebilir; bu, istek ve yanıtların gizlice dinlenmesini ve sahteciliğini önler.
  • TLS bağlantısı üzerinden gönderilen tüm DNS istekleri, aşağıdaki spesifikasyona uygun olmalıdır: TCP üzerinden DNS gönderme.

TLS üzerinden DNS aracılığıyla yapılan isteğe örnek:

$ 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

Bu seçenek, yerel bir ağın veya tek bir kullanıcının ihtiyaçlarını karşılayan yerel DNS sunucuları için daha uygun görünmektedir. Doğru, standarda verilen destek pek iyi değil ama umalım!

Ne hakkında konuştuğumuzu açıklayan iki kelime

DNS kısaltması, Etki Alanı Adı Hizmeti anlamına gelir ("DNS hizmeti" demek biraz gereksizdir; kısaltma zaten "hizmet" kelimesini içerir) ve basit bir görevi çözmek için kullanılır - belirli bir ana bilgisayar adının hangi IP adresine sahip olduğunu anlamak. Bir kişi bir bağlantıya her tıkladığında veya tarayıcının adres çubuğuna bir adres girdiğinde (örneğin, " gibi bir şey)https://habrahabr.ru/post/346430/"), bir kişinin bilgisayarı, bir sayfanın içeriğini almak için hangi sunucuya istek göndereceğini bulmaya çalışıyor. Habrahabr.ru durumunda, DNS'den gelen yanıt, web sunucusunun IP adresinin bir göstergesini içerecektir: 178.248.237.68 ve ardından tarayıcı, belirtilen IP adresiyle sunucuyla iletişim kurmaya çalışacaktır.

Buna karşılık, “habrahabr.ru adlı ana bilgisayarın IP adresi nedir?” İsteğini alan DNS sunucusu, belirtilen ana bilgisayar hakkında herhangi bir şey bilip bilmediğini belirler. Aksi taktirde dünyadaki diğer DNS sunucularına sorgulama yaparak, adım adım sorulan sorunun cevabını bulmaya çalışır. Sonuç olarak, nihai cevabı bulduktan sonra, bulunan veriler hala bekleyen istemciye gönderilir ve ayrıca DNS sunucusunun önbelleğinde saklanır, bu da bir dahaki sefere benzer bir soruyu çok daha hızlı yanıtlamanıza olanak tanır.

Yaygın bir sorun, öncelikle DNS sorgu verilerinin açık bir şekilde gönderilmesidir (bu, trafik akışına erişimi olan herkesin DNS sorgularını ve sonuçta ortaya çıkan yanıtları izole etmesine ve ardından bunları kendi amaçları için ayrıştırmasına olanak tanır; bu, DNS istemcisi için reklamları hassas bir şekilde hedeflemek ve bu oldukça fazla!). İkincisi, bazı İnternet sağlayıcıları (parmaklarla işaret etmeyeceğiz, ancak en küçükleri değil), istenen bir veya başka bir sayfa yerine (bu çok basit bir şekilde uygulanır: ana bilgisayar adı talebi için belirtilen IP adresi yerine) reklam gösterme eğilimindedir. habranabr.ru rastgele bir kişiye Bu şekilde, reklamı içeren sayfanın sunulduğu sağlayıcının web sunucusunun adresi döndürülür). Üçüncüsü, engellenen web kaynaklarının IP adreslerine ilişkin doğru DNS yanıtlarını, saplama sayfaları içeren sunucularının IP adresiyle değiştirerek (sonuç olarak, erişim bu tür siteler fark edilir derecede daha karmaşık hale gelir) veya filtrelemeyi gerçekleştiren proxy sunucunuzun adresine.

Muhtemelen buraya web sitesinden bir resim koymalısınız. http://1.1.1.1/, hizmete olan bağlantıyı tanımlamaya yarar. Görünüşe göre yazarlar DNS'lerinin kalitesinden tamamen eminler (ancak Cloudflare'den farklı bir şey beklemek zor):

Cloudflare hizmetiyle 1.1.1.1 ve 1.0.0.1 adreslerinde buluşuyoruz, yani “genel DNS rafı geldi!”

Hizmetin yaratıcısı Cloudflare'i tamamen anlayabiliriz: Ekmeklerini dünyadaki en popüler CDN ağlarından birini (işlevleri yalnızca içerik dağıtımını değil, aynı zamanda DNS bölgelerini barındırmayı da içerir) destekleyerek ve geliştirerek kazanıyorlar ve, bunların arzusundan dolayı, kim pek bir şey bilmiyor, bunlara öğret kimi bilmiyorlar, Buna nereye gitmeli küresel ağda, sıklıkla sunucu adreslerinin engellenmesinden muzdariptir. kim olduğunu söylemeyeceğiz - dolayısıyla "bağırışlardan, ıslıklardan ve karalamalardan" etkilenmeyen bir DNS'ye sahip olmak, bir şirket için işlerine daha az zarar vermek anlamına gelir. Ve teknik avantajlar (küçük bir şey ama güzel: özellikle ücretsiz DNS Cloudflare müşterileri için, şirketin DNS sunucularında barındırılan kaynakların DNS kayıtlarının güncellenmesi anlık olacaktır) yazıda açıklanan hizmeti kullanmayı daha da ilginç hale getiriyor .

Ankete sadece kayıtlı kullanıcılar katılabilir. Giriş yapLütfen.

Yeni hizmeti kullanacak mısınız?

  • Evet, yalnızca işletim sisteminde ve/veya yönlendiricide belirterek

  • Evet ve yeni protokoller kullanacağım (HTTP'ler üzerinden DNS ve TLS üzerinden DNS)

  • Hayır, yeterli sayıda mevcut sunucum var (bu bir kamu sağlayıcısıdır: Google, Yandex vb.)

  • Hayır, şu anda ne kullandığımı bile bilmiyorum

  • Kendi özyinelemeli DNS'imi onlardan önce bir SSL tüneli ile kullanıyorum

693 kullanıcı oy kullandı. 191 kullanıcı çekimser kaldı.

Kaynak: habr.com

Yorum ekle