コンテンツにスキップ

DNS over TLS

デフォルトでは、DNSは平文接続で送信されます。DNS over TLS (DoT) は、DNSクエリを暗号化された接続で送信する方法の一つです。Cloudflareは標準ポート853でDNS over TLSをサポートしており、RFC 7858に準拠しています。DoTでは、暗号化はトランスポート層で行われ、TCP接続の上にTLS暗号化が追加されます。

仕組み

Cloudflareは、ポート8531.1.1.11.0.0.1、および対応するIPv6アドレス(2606:4700:4700::1111および2606:4700:4700::1001)でDNS over TLS (DoT)をサポートしています。DoTクライアントがIPアドレスをサポートしていない場合、CloudflareのDoTエンドポイントにはホスト名one.one.one.oneでもアクセスできます。スタブリゾルバ(DNSリゾルバと通信するデバイス上のDNSクライアント)は、TLS接続を介してリゾルバに接続します:

  1. 接続の前に、DNSスタブリゾルバは1.1.1.1からのTLS証明書のbase64エンコードされたSHA256ハッシュ(SPKIと呼ばれる)を保存しています。
  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を送信するための仕様に準拠する必要があります。

Terminal window
kdig -d @1.1.1.1 +tls-ca +tls-host=one.one.one.one example.com
;; DEBUG: owner(example.com.)のクエリ中、class(1)、type(1)、server(1.1.1.1)、port(853)、protocol(TCP)
;; DEBUG: TLS、138のシステム証明書をインポートしました
;; DEBUG: TLS、受信した証明書階層:
;; 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、証明書PINチェックをスキップします
;; DEBUG: TLS、証明書は信頼されています。
;; TLSセッション (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
;; 受信したバイト数 468 B
;; 時間 2023-06-23 18:05:42 PDT
;; 1.1.1.1@853(TCP)から12.1 msで

サポートされているTLSバージョン

CloudflareのDNS over TLSは、TLS 1.3およびTLS 1.2をサポートしています。