Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

DNS over TLS

最終更新 Markdown で表示Agent セットアップ

デフォルトでは、DNS は平文の接続で送られます。DNS over TLS (DoT) は、暗号化された接続で DNS クエリを送る方法のひとつです。Cloudflare は標準ポート 853 で DNS over TLS に対応しており、RFC 7858 に準拠しています。

DoT は、標準の DNS トラフィックを TLS で暗号化した TCP 接続の内側に包みます。デバイスとリゾルバーの間にいる第三者が、DNS クエリを読んだり改ざんしたりできなくなります。

仕組み

Cloudflare は、1.1.1.11.0.0.1、および対応する IPv6 アドレス(2606:4700:4700::11112606:4700:4700::1001)のポート 853 で DNS over TLS (DoT) に対応しています。DoT クライアントが IP アドレスに対応していない場合は、ホスト名 one.one.one.one でも Cloudflare の DoT エンドポイントに接続できます。

スタブリゾルバーは、デバイス上で DNS クエリを DNS リゾルバーへ送るクライアントソフトウェアです。DoT では、スタブリゾルバーは TLS 接続でリゾルバーに接続します。

  1. 接続の前に、DNS スタブリゾルバーは 1.1.1.1 の TLS 証明書のフィンガープリントを保存します。このフィンガープリントは、証明書の公開鍵情報(Subject Public Key Info、SPKI)の SHA-256 ハッシュを Base64 でエンコードしたもので、SPKI ピンと呼ばれます。スタブリゾルバーはこのピンを使い、接続先が正規の 1.1.1.1 サーバーであることを検証します。
  2. DNS スタブリゾルバーは 1.1.1.1:853 と TCP 接続を確立します。
  3. DNS スタブリゾルバーは TLS ハンドシェイクを開始します。双方が暗号化パラメータに合意し、クライアントがサーバーの身元を検証する処理です。
  4. TLS ハンドシェイク中に、1.1.1.1 は自身の TLS 証明書を提示します。
  5. TLS 接続が確立すると、DNS スタブリゾルバーは暗号化された接続で DNS を送信できます。盗聴や改ざんを防げます。
  6. TLS 接続上で送る DNS クエリは、すべて TCP 上での DNS 送信 の仕様に従う必要があります。

kdig -d @1.1.1.1 +tls-ca +tls-host=one.one.one.one example.com

;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP)
;; DEBUG: TLS, imported 138 system certificates
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=California,L=San Francisco,O=Cloudflare\, Inc.,CN=cloudflare-dns.com
;; DEBUG:      SHA-256 PIN: GP8Knf7qBae+aIfythytMbYnL+yowaWVeD6MoLHkVRg=
;; DEBUG:  #2, C=US,O=DigiCert Inc,CN=DigiCert TLS Hybrid ECC SHA384 2020 CA1
;; DEBUG:      SHA-256 PIN: e0IRz5Tio3GA1Xs4fUVWmH1xHDiH2dMbVtCBSkOIdqM=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.
;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 3395
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1

;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR
;; PADDING: 408 B

;; QUESTION SECTION:
;; example.com.        		IN	A

;; ANSWER SECTION:
example.com.        	75897	IN	A	93.184.216.34

;; Received 468 B
;; Time 2023-06-23 18:05:42 PDT
;; From 1.1.1.1@853(TCP) in 12.1 ms

対応している TLS バージョン

Cloudflare の DNS over TLS は、TLS 1.3 と TLS 1.2 に対応しています。

役に立ちましたか?