DoHとDoTの技術比較分析

ネットワークプロトコルの観点から、DNS over HTTPSとDNS over TLSの技術実装、パフォーマンスの違い、および適用シナリオを深く分析します。

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

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

最新のネットワークプロトコルスタックは階層化設計を採用しており、各層は異なる機能を提供します。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は暗号化手段として、アプリケーション層とトランスポート層の間で機能します。DoTからTLS暗号化を取り除くと、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は本質的にあるアプリケーション層プロトコルが別のアプリケーション層プロトコルをネストしたものです。DoHが必ずしもDNS over HTTPSである必要はなく、通常のHTTPを使用することも可能ですが、暗号化されていないDoHは平文リクエストであり、Plain DNSよりも利点がないため、ごく限られた特殊なニーズがある場合にのみ使用されます。

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

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に比べてQUICはより高度で信頼性があります。

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

アプリケーション層とトランスポート層の間には必然的な制限関係はなく、暗号化を追加することも追加しないことも可能です。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より数CPUクロック遅い可能性がありますが、実際の使用ではこの差は無視できます。互換性に関しては、サービスプロバイダにとって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はパフォーマンス、互換性、プライバシー保護のバランスが取れた優れた選択肢です。