DoH と DoT の技術比較分析

ネットワークプロトコルレベルからDNS over HTTPSとDNS over TLSの技術実装、性能差、適用シナリオを深く分析

DNS over HTTPS (DoH) と DNS over TLS (DoT) は、DNSクエリの安全な転送を実現する2つの一般的な暗号化DNS伝送方式です。DoTの標準はRFC 7858で定義され、DoHはDNS Queries over HTTPS (DoH)で標準化されています。これらの技術の本質的な違いを理解するには、ネットワークプロトコル階層構造から分析する必要があります。

ネットワークプロトコル階層構造

現代のネットワークプロトコルスタックは階層設計を採用しており、各層が異なる機能を提供します。DNSはアプリケーション層プロトコルとして、特定の伝送方式に依存せず、複数のベアラープロトコル上で動作できます。

アプリケーション層 (L7) にはHTTP/1.1、HTTP/2、HTTP/3、FTP、DNSなどのプロトコルが含まれます。注目すべきは、HTTP/3のセマンティクスは依然としてアプリケーション層にありますが、QUICが伝送ベアラーとして機能することです。セキュリティ層はアプリケーション層とトランスポート層の間に位置し、主にTLSとその変種で構成されます。TLSは通常TCP上で動作し、HTTPSやDoTがこれに該当します。DTLSはTLSのデータグラム版で、UDP上で動作できます。QUICプロトコルは特殊で、TLS 1.3のハンドシェイクと鍵導出をプロトコル内部に直接統合しています。

QUICはL4.5層プロトコルと見なすことができ、UDPを基盤に拡張され、従来のトランスポート層の機能を提供します。トランスポート層 (L4) にはTCP、UDP、QUICが含まれます。実装の観点ではQUICはUDPベースですが、信頼性、輻輳制御、多重化、暗号化ハンドシェイクなどの機能を備えているため、工学的には独立したトランスポート層プロトコルとして扱われます。ネットワーク層 (L3) はIPプロトコル(IPv4/IPv6)を使用し、データパケットの経路選択と転送を担当します。データリンク層 (L2) にはイーサネットやWi-Fi(802.11)などの技術が含まれます。

TLSは暗号化手段として、アプリケーション層とトランスポート層の間で機能します。もしTLS暗号化をDoTから分離すると、DoTは本質的にDNS over TCPになります。この階層設計により、暗号化はプロトコル自体の強制要件ではなく、オプション機能となります。

Plain DNSの特徴

最も一般的なDNSはPlain DNSと呼ばれ、UDPまたはTCP上で動作します。UDPは接続確立が簡単で初回クエリ速度が速いため、最も一般的なベアラー方式です。しかしUDPの弱点は信頼性がなく、ネットワークでパケットが失われやすいことです。TCPはハンドシェイク回数が多いため初回接続速度がUDPより約30%遅いですが、長い接続を確立した後の応答速度はUDPと同じです。

キャリアはネットワークが混雑すると、機器の負荷軽減のためにUDPパケットを破棄することがあります。一部のキャリアでUDPパケット損失が深刻な地域では、DNSクエリにTCPを使用する方が有利な場合があります。TCPには再送メカニズムがあり、パケットが失われてもデータを確実に到達させますが、UDPパケットを破棄しても小規模キャリア機器の負荷は軽減されず、再試行によってむしろ不確実性が増す可能性があります。

アプリケーション層のネスト

DNSとHTTPはどちらもアプリケーション層プロトコルであり、DoHは本質的に1つのアプリケーション層プロトコルが別のアプリケーション層プロトコルをネストしたものです。DoHは必ずしもDNS over HTTPSである必要はなく、通常のHTTPを使用することも可能ですが、暗号化されていないDoHは平文リクエストのため、Plain DNSと比べて何の利点もなく、ごく少数の特殊なニーズシナリオでのみ使用されます。

理論的には、任意のアプリケーション層プロトコル上でDNSを伝送できます。例えばDNS over FTPも実装可能で、対応するサーバーとクライアントを開発するだけで実現できます。この柔軟性はアプリケーション層プロトコルの組み合わせ可能性を示しています。

flowchart TD
    subgraph L7["アプリケーション層"]
        A[DNS]
        B[HTTP]
        C[FTP]
    end
    
    subgraph Security["セキュリティ層"]
        D[TLS]
        E[DTLS]
    end
    
    subgraph Transport["トランスポート層"]
        F[TCP]
        G[UDP]
        H[QUIC]
    end
    
    subgraph L3["ネットワーク層"]
        I[IP]
    end
    
    subgraph L2["データリンク層"]
        J[Ethernet]
        K[WiFi]
    end
    
    A --> D
    B --> D
    C --> D
    D --> F
    E --> G
    H --> G
    F --> I
    G --> I
    H --> I
    I --> J
    I --> K
    
    style A fill:#e1f5ff
    style B fill:#e1f5ff
    style C fill:#e1f5ff
    style D fill:#fff4e1
    style E fill:#fff4e1
    style F fill:#ffe1e1
    style G fill:#ffe1e1
    style H fill:#e1ffe1

トランスポート層のネスト

QUICプロトコルはUDPを基盤とし、同時にトランスポート層でコネクション指向サービスを提供します。QUICはTCPが持つコネクション指向、輻輳制御、再送、フロー制御、フラグメンテーションとアセンブリなどのトランスポート層機能を実装しています。TCPと比較してQUICは遅延が低く、UDPと比較してより先進的で信頼性が高いです。

プロトコル組み合わせ関係

アプリケーション層とトランスポート層の間に必然的な制限関係はなく、暗号化は追加することも追加しないこともできます。HTTPはTCP上で動作することも、QUIC上で動作することもできます。DNSはTCP上で動作することも、UDP上で動作することも、QUIC上で動作することもできます。

これらの可能性に基づいて、以下の組み合わせ関係をまとめることができます。Plain DNSはUDPまたはTCPにDNSプロトコルを加えたものです。HTTP/2はTCPにTLS 1.2またはTLS 1.3を加え、さらにHTTPプロトコルを加えたものです。HTTP/3はQUICにTLS 1.3を加え、さらにHTTPプロトコルを加えたものです。

DoH (DNS over HTTPS) はHTTP/2またはHTTP/3にDNSプロトコルを加えたものです。DoT (DNS over TLS) はTCPにTLS 1.2またはTLS 1.3を加え、さらにDNSプロトコルを加えたものです。DoQ (DNS over QUIC) はQUICにTLS 1.3を加え、さらにDNSプロトコルを加えたものです。

flowchart LR
    subgraph DoT["DoT DNS over TLS"]
        direction LR
        T1[TCP] --> T2[TLS]
        T2 --> T3[DNS]
    end
    
    subgraph DoH2["DoH over HTTP/2"]
        direction LR
        H1[TCP] --> H2[TLS]
        H2 --> H3[HTTP/2]
        H3 --> H4[DNS]
    end
    
    subgraph DoH3["DoH over HTTP/3"]
        direction LR
        Q1[QUIC] --> Q2[TLS 1.3]
        Q2 --> Q3[HTTP/3]
        Q3 --> Q4[DNS]
    end
    
    subgraph DoQ["DoQ DNS over QUIC"]
        direction LR
        D1[QUIC] --> D2[TLS 1.3]
        D2 --> D3[DNS]
    end
    
    style T1 fill:#e3f2fd
    style T2 fill:#fff3e0
    style H1 fill:#e3f2fd
    style H2 fill:#fff3e0
    style Q1 fill:#e8f5e9
    style Q2 fill:#fff3e0
    style D1 fill:#e8f5e9
    style D2 fill:#fff3e0

性能と互換性分析

プロトコル階層構造を理解した後、DoHとDoTの長所と短所を分析できます。

TCPとQUICの比較は、キャリアの実際のネットワーク環境を考慮して議論する必要があります。QUICは比較的新しいプロトコルで、古いネットワーク問題を解決していますが、UDPベースであることに変わりはありません。ネットワーク遅延の観点では、QUICベースのプロトコルの遅延はTCPより約35%低いため、理論的にはDNS over HTTP/3とDoQ (DNS over QUIC) はDNS over HTTP/2とDoTより性能が優れています。

しかし実際のネットワーク環境では、パケット損失による再送遅延の問題が存在します。キャリアはネットワークが混雑するとUDPパケットを破棄する傾向があり、QUICはUDPとして識別されて破棄される可能性があります。QUICは再送をサポートしていますが、再送によって導入される遅延により、QUICの実際の遅延がTCPより高くなる可能性があります。

プライバシーとセキュリティの面では、DoHとDoTはどちらも暗号化トラフィックであり、盗聴や改ざんの対象になりません。DoTが識別されてブロックされる問題については、主にAndroidシステムの暗号化DNS設定がデフォルトで853ポートを使用するため、853ポートがセンシティブポートになっていることが原因です。DoT自体は一般的な普通の暗号化トラフィックであり、DNS専用トラフィックとして識別されることはありません。実際には任意のポートでDoTサービスを提供でき、Androidではサードパーティアプリが必要ですが、iOSでは任意ポートのDoT使用をネイティブサポートしています。

拡張性はDoHの重要な利点です。HTTPでカプセル化されたDNSとPlain DNSと比較して、HTTPは明らかに優れた拡張性を持っています。サービスプロバイダーは443ポート上でDoHを含む無数のサービスを提供でき、機能拡張も容易です。DoTとDoQは一般的に専用ポートを必要とし、拡張能力は完全にPlain DNSベースです。これはサービスプロバイダー視点の違いであり、一般ユーザーには現時点で明確な認識はありません。

DNSリクエストの処理速度に関しては、HTTPの処理速度がPlain DNSより数クロックサイクル遅い可能性がありますが、この差は実際の使用では無視できます。互換性の面では、DoHの方が主流になる可能性があります。なぜならサービスプロバイダーにとってDoHの拡張性が優れているからです。

現在の主要プラットフォームの暗号化DNSサポート状況は様々です。ChromiumカーネルのブラウザはDoHをサポートしています。Windows 11システムはネイティブでDoHをサポートしています。Android 8以降のシステムはネイティブでDoTをサポートしています。Android 11以降のシステムはネイティブでDoTとDoHをサポートしています。macOSシステムはネイティブでDoTとDoHをサポートしています。iOSシステムはネイティブでDoTとDoHをサポートしています。

実際の選択アドバイス

一般ユーザーにとっては、DoHを使用する方がDoTより手間がかかりません。DoHはDoTと比較して、多くの場合より優れた遅延を提供し、一部の場合で同程度の遅延を提供します。DoHはDoQと比較して、多くの場合同程度の遅延を提供し、一部の場合でより優れた遅延を提供します。

この結論の前提は、サービスプロバイダーがDNS over HTTP/3サービスを提供していることです。サービスプロバイダーがHTTP/3を提供しない場合、DoHとDoTに明確な違いはありません。DoHはネットワーク品質が良い場合、自動的にDoH/3を使用して低遅延を実現し、ネットワーク品質が悪い場合、自動的にHTTP/2にダウングレードします。この適応能力はサービスプロバイダーの実装が必要ですが、主要サービスプロバイダーは一般的に実装しています。

寧屏の試用をお勧めします。DoTとDoH/3をサポートし、ネイティブで広告ブロックとDNS分流機能を備えています。自己デプロイが必要な場合は、そのオープンソースライブラリを使用できます。

ネットワークプロトコルの選択には、キャリアのネットワーク品質、サービスプロバイダーのサポート状況、デバイスの互換性など、複数の要素を総合的に考慮する必要があります。大多数のユーザーにとって、DoHは性能、互換性、プライバシー保護のバランスが取れた優れた選択肢です。