
クラウドフレア社 提示 パブリック DNS のアドレス:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700 :: 1111
- 2606:4700:4700 :: 1001
ユーザーが安心して依頼内容を把握できるよう「プライバシー最優先」とする方針だという。
このサービスの興味深い点は、通常の DNS に加えて、テクノロジーを使用できる機能を提供することです。 DNS-over-TLS и HTTPS over DNSこれにより、プロバイダーがリクエストの経路に沿ってリクエストを盗聴することが大幅に防止され、統計の収集、監視、広告の管理が行われます。 Cloudflare は、発表日 (1 年 2018 月 04 日、米国の表記では 01/XNUMX) は偶然に選ばれたわけではないと主張しています。「XNUMX つのユニット」が発表されるのは、一年のどの日になるでしょうか?
Habr の聴衆は技術に精通しているため、従来のセクション「なぜ DNS が必要ですか?」 投稿の最後に載せますが、ここではより実践的に役立つことを述べます。
新しいサービスの使い方は?
最も簡単な方法は、上記のDNSアドレスをDNSクライアントに指定するか(または、使用しているローカルDNSサーバーの設定でアップストリームとして指定する)ことです。サーバー通常の意味を置き換えることは理にかなっているだろうか? Google DNS (8.8.8.8 など)、またはやや一般的ではありません YandexパブリックDNSサーバー (77.88.8.8 およびその他の同様のもの) Cloudflare からサーバーへ - 彼らはあなたのために決定しますが、初心者のために話します スケジュール 応答速度。これによると、Cloudflare はすべての競合他社よりも速いです (明確にします: 測定はサードパーティのサービスによって行われたものであり、もちろん、特定のクライアントへの速度は異なる場合があります)。

リクエストが飛び去っていく新しいモードを扱う方がはるかに面白い サーバ 暗号化された接続を介して(実際には、応答は同じ接続を介して返されます)、前述のDNS-over-TLSとDNS-over-HTTPSを使用します。残念ながら、これらは標準ではサポートされていません(開発者は「今のところ」サポートしていないと考えています)が、独自のソフトウェア(または独自のハードウェア)で簡単に設定できます。
DNS over HTTPs (DoH)
名前が示すように、通信は HTTPS チャネル経由で行われます。
- エンドポイントの存在 - それは https://cloudflare-dns.com/dns-query にあり、
- リクエストを送信し、レスポンスを受信できるクライアント。
リクエストは、で定義されている 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"
}
]
}
明らかに、まれな (少なくとも XNUMX 台の場合) ホーム ルーターがこの方法で DNS と連携できますが、これは明日サポートが登場しないという意味ではありません。そして興味深いことに、ここではアプリケーションで DNS との連携を完全に実装できます (すでに説明したように) Mozillaを作るつもりだ、Cloudflareサーバー上のみ)。
DNS オーバー TLS
デフォルトでは、DNS クエリは暗号化なしで送信されます。 DNS over TLS は、安全な接続を介して送信する方法です。 Cloudflareは、規定に従って標準ポート853でTLS経由のDNSをサポートします RFC7858。 これは、cloudflare-dns.com ホストに対して発行された証明書を使用し、TLS 1.2 および TLS 1.3 がサポートされます。
接続を確立し、プロトコルに従って動作すると、次のようになります。
- DNS 接続を確立する前に、クライアントは、cloudflare-dns.com の TLS 証明書 (SPKI と呼ばれる) の Base64 でエンコードされた SHA256 ハッシュを保存します。
- DNS クライアントは、cloudflare-dns.com:853 への TCP 接続を確立します。
- DNS クライアントが TLS ハンドシェイクを開始する
- TLS ハンドシェイク プロセス中に、cloudflare-dns.com ホストは TLS 証明書を提示します。
- TLS 接続が確立されると、DNS クライアントは安全なチャネル経由で DNS 要求を送信できるようになり、要求と応答の盗聴やなりすましが防止されます。
- TLS 接続経由で送信されるすべての DNS クエリは、 TCP 経由で DNS を送信する.
DNS over 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 サーバーに最適であると思われます。 確かに、標準のサポートはあまり良くありませんが、期待しましょう!
会話の内容を XNUMX 語で説明
DNSという略語は ドメイン 名前サービス(そのため「DNS サービス」と言うのは少し冗長で、この略語にはすでに「サービス」という単語が含まれています)は、特定のホスト名がどの IP アドレスを持っているかを理解するという単純な問題を解決するために使用されます。ユーザーがリンクをクリックしたり、ブラウザのアドレス バーにアドレスを入力したりするたびに(たとえば、次のような場合)https://habrahabr.ru/post/346430/")、人間のコンピューターは、ページのコンテンツを取得するためにどのサーバーにリクエストを送信するかを判断しようとします。 habrahabr.ru の場合、DNS からの応答には Web サーバーの IP アドレス 178.248.237.68 が含まれており、ブラウザーはすでに指定された IP アドレスでサーバーへの接続を試みます。
次に、「habrahabr.ru という名前のホストの IP アドレスは何ですか?」という要求を受け取った DNS サーバーは、指定されたホストについて何か知っているかどうかを判断します。 そうでない場合は、世界中の他の DNS サーバーにリクエストを送信し、質問に対する答えを段階的に見つけ出そうとします。 その結果、最終的な答えが見つかると、見つかったデータはまだその答えを待っているクライアントに送信され、さらに DNS サーバー自体のキャッシュに保存されるため、次回同様の質問にはるかに速く答えることができます。
よくある問題は、まず、DNS クエリ データが平文で送信されることです (これにより、トラフィック フローにアクセスできる人は誰でも、DNS クエリと受信した応答を分離し、独自の目的で解析できるようになります)。 DNS クライアントに対して広告を正確にターゲティングできる機能です。これは非常に優れています)。 第二に、一部の ISP (指差しはしませんが、最も小規模な ISP ではありません) は、要求されたページの代わりに広告を表示する傾向があります (これは非常に簡単に実装されています。habranabr.ru によるクエリに対して指定された IP アドレスの代わりに)。ホスト名、ランダムな人物 したがって、広告を含むページが提供されるプロバイダーの Web サーバーのアドレスが返されます。 第三に、ブロックされた Web リソースの IP アドレスに関する正しい DNS 応答を、スタブ ページを含むサーバーの IP アドレスに置き換えることによって、個々のサイトをブロックするための要件を満たすメカニズムを実装するインターネット アクセス プロバイダーがあります (結果として、このようなサイトは著しく複雑です)、またはフィルタリングを実行するプロキシ サーバーのアドレスに送信されます。
これはおそらくサイトからの写真であるはずです。 http://1.1.1.1/、サービスへの接続を記述するために使用されます。 作成者は、DNS の品質にかなり自信を持っているようです (ただし、Cloudflare にそれ以外のことを期待するのは困難です)。

このサービスの作成者である Cloudflare を完全に理解することができます。彼らは、世界で最も人気のある CDN ネットワークの XNUMX つ (コンテンツの配信だけでなく、DNS ゾーンのホスティングも含む) の維持と開発によって生計を立てています。それらの願い、 よく知らない人は、それらを教えてください 彼らは誰を知らないのか、それに どこへ行く グローバル ネットワークでは、サーバーのアドレスがブロックされるという問題に頻繁に悩まされます。 誰とは言わないでおこう - したがって、企業にとって「叫び声、口笛、落書き」の影響を受けない DNS を持つことは、ビジネスへの悪影響が少ないことを意味します。 また、技術的な利点 (些細なことですが、素晴らしいことです。特に、無料の DNS Cloudflare のクライアントの場合、会社の DNS サーバーでホストされているリソースの DNS レコードの更新が即座に行われます) により、この投稿で説明されているサービスの使用がさらに興味深いものになります。
登録ユーザーのみがアンケートに参加できます。 ログインお願いします。
新しいサービスを利用しますか?
- はい、OS やルーターで指定するだけで可能です
- はい、新しいプロトコル (DNS over HTTPs および DNS over TLS) を使用します。
- いいえ、現在のサーバーは十分あります (これは公共プロバイダーです: Google、Yandex など)。
- いや、今何を使っているのかすら分からない
- 再帰 DNS と SSL トンネルを使用しています
693人のユーザーが投票しました。 191 ユーザーが棄権しました。
出所: habr.com
