AdGuard、世界初のDNS-over-QUICリゾルバになる
AdGuard DNSは、新しいDNS-over-QUICプロトコルをサポートする世界初のパブリックDNSリゾルバーになりました。当社では、DNS-over-QUIC(略してDoQ)がDNS暗号化の未来であると信じており、AdGuardユーザーの皆様にDoQを試す初の機会を提供できることを非常に誇りに思っています。
この記事ではDoQとは何か、他のプロトコルと比較した場合の利点/欠点があるかどうか、そして最後に設定方法も説明しております。
もしDNSとは何か、そしてオンラインプライバシーを向上させるためにDNSをどのように使用できるかについて思い出す必要がある場合には、2年前のこの記事(英語)をチェックしてください。
QUICとは?
DNS-over-QUICの複雑な仕組みを理解するためには、まずQUICとは何かを理解する必要があります。
そこで、一歩下がってから二歩進んでいきたいと思います。
QUICは(比較的)新しいトランスポート層のネットワークプロトコルです。
「って言われてあまり意味わからない」と思われるのは当然ですので、よりわかりやすく説明してみます。
簡単に言えば、QUICはサーバ間やサーバとクライアント間でデータのパケットを送信するためのプロトコルとして機能します。
その転送を行うには他の方法、つまり他のプロトコルも既存しています。例えば、過去数年から数十年にわたってウェブ上で主に使用されてきた古き良きTCPプロトコルを聞いたことがあるでしょう。
TCPと比較して、QUICは速度、信頼性がより高く、暗号化も優れています。昔の時代ではなく、むしろ最近に開発されたという事実は、昔の時代には全く明らかではなかったいくつかの重要な問題を解決していることも確かです。
なぜQUICが優れているのか、いくつかの例を挙げてみましょう。
Head-of-line blocking(ヘッド・オブ・ライン・ブロッキング)
前述したように、長い間、我々はTCPトランスポート層プロトコルとTCPを介して機能している他のプロトコル(TLS、SSL、HTTP)のなすがままでした。
これらの頭字語には少なくともピンとくるものがあると思いますが、それは、これらの頭字語が何年も前から存在し、うまく仕事をしてくれたからです。
しかし、あくまでも安定したブロードバンド接続というほぼ完璧に近い条件の下でうまく機能してきているというキャッチがあります。
家を出て家庭ネットワークではなく4G、LTE、モバイルデータ一般の環境になると、必然的に「電波が弱い」、「接続が遅い」などの問題に遭遇することになります。例えば、エレベーターに乗った時の通信問題がいい例です。
ネットワークが悪いとページの読み込みが遅くなったり、全く読み込まなかったりします。
しかし、それはなぜなのでしょうか?
ここで、いわゆる「Head-of-line blocking」(ヘッド・オブ・ライン・ブロッキング)問題の課題にたどり着きます。
TCPだと、データのパケットはバッチ(下の画像の場合: パケット①+パケット②+パケット③)で送信されます。そのバッチのうちの一つのパケットが弱い接続などの理由で失われて送信失敗すると、バッチ全体が崩れます。残りのパケットも処理できないまま、失われたパケットが再送されるまで列に並んで待たなければなりません。
TCPでは、1つのデータパケットが失われた場合(パケット①)、残りのデータパケットは順番待ちになってパケット①が再送信されるまで待機しなければなりません。
詳細は省きますが、QUICの実現により、データは特定の順序によらずに処理されるようになります。最初のデータパケットが電波弱いせいで失われた場合でも、残りのデータは遅延なく処理されるということです。
QUICだと、最初のデータパケット(パケット①)が途中で落ちても、他のデータパケットは遅延なく処理されます。
接続の移行
私たちは、インターネット上のすべてのデバイスがIPアドレスによって一意に定義されるという考えに慣れていますが、その考えはある程度正しいです。
しかし、普通の人の普通の一日を想像してみてください。例として自分を挙げてみます。
平日の朝、私は仕事に行くために自宅の快適さ(と安定したWi-Fi)を離れようとしている。
私の携帯電話は、ホームルータの到達領域をエスケープするとすぐに、私の携帯電話は、Wi-Fiから4Gに切り替わります。
同時にスマホのIPアドレスも同様に変更され、すべてのアクティブな接続がドロップします。
自宅で読み始めた記事を読み続けるために電車の中でブラウザを開き直すと、ブラウザはウェブサイトとAdGuard Home上で動作するDoHサーバーへのすべての接続を再確立しなければなりません。
それには当然ながら時間がかかり、私はイライラし始めます。
その後、オフィスに着いてWi-Fiに接続しても、また同じことの繰り返しです。
QUICはこのようなシチューションを念頭に置いて設計されています。
QUICが使用されているとき、あなたの携帯電話は、あるIPアドレスから別のIPアドレスに切り替わっても、「接続移行」と呼ばれるイベントを生き延びることができ、ユーザーにとって目立つ不都合はありません。
もちろんその仕組みはもっと複雑で、QUICはIPアドレス変更だけでなく、エンドポイントアドレスの変更(例えばポートの変更など)にも対応しています。
(興味ありましたら、ウェブ上でQUICについて検索するとすぐにこの仕組みに関するより詳しい情報が見つかります。)
DNS-over-QUIC
そして、いよいよ本題に入ります。
DNS-over-QUICは、QUICトランスポート層のプロトコルを利用したDNSプロトコルで、DNSリクエストの送信に利用されています。
現在、DoQの規格はドラフト段階ですが、実験的に導入することはいくらでもできます。
DNS-over-HTTPSじゃだめなの?
ここでさらに複雑になります。
ある時点でQUICを中心に構築されたHTTP/3プロトコルが将来的に採用されることになり、DNS-over-HTTPSはQUICをサポートすることになります。
だったら結局、なぜDoQが必要なのか?
いくつかの理由がありますが、それらはすべてHTTPはトランスポート層のプロトコルではないという一つの事実に由来しています。
HTTPは異なる理由で設計されたもので、適切なトランスポートプロトコルの代用として機能することはできますが、多くの不必要なリスクを引き起こすことになります。
特にプライバシー面では、HTTPを使ってDNSリクエストを転送すると、次のようなことが起こります。
- HTTPクッキー
- その他のHTTPヘッダ (Authentication, User-Agent, Accept-Language)
- 悪質者により多くのフィンガープリントのチャンスが与えられる
- ETagを利用した追跡
これらの問題はすべてDoHレベルでクライアント側問題であることは把握できますが、それぞれのクライアントはブラウザ、オペレーティングシステム、その他あらゆる種類のソフトウェアなど、大きく異なります。
それらすべてに対応するクライアント側ソリューションを実現することは、事実上不可能です。
AdGuardでのDNS-over-QUIC
私たちは、DNS-over-QUICの現在の仕様を私たちのDNSサーバーに実装するパブリックDNSリゾルバーの中で初であることを誇りに思います。
そして、私たちはユーザーの皆様に最初のうちにDoQをチャンスも提供しています!
現在、AdGuardのモバイルアプリのいずれかを使用することでお試しいただけます:
AdGuard for Android または AdGuard for iOS。
AdGuard for Android でDoQを使用する方法
- アプリを開き、左サイドメニューを開きます。
- 設定→DNSフィルタリング に移動し、有効にします。
- サーバーのリストから「AdGuard DNS」サーバーを選択します。
- サーバタイプで「DNS-over-QUIC (実験的)」を選択してください。
AdGuard for iOS でDoQを使用する方法
- アプリを開き、設定→DNS通信を保護 に移動します。
- 「DNS通信を保護」のスイッチをオンにします。
- DNSサーバー に移動して、「AdGuard DNS」サーバーを選択します。
- 利用可能なプロトコルの中から「DNS-over-QUIC (実験的)」を選択してください。
よりテクニカルな情報
ここでは、DoQをより詳しく知りたいと思っている人や、少し技術的に詳しい人に役立つリンクをまとめました。
-
dnslookup DNSリクエストを発射するための基本的なユーティリティです。すべての人気のある最新プロトコルをサポートしています(DoH, DoT, DoQ, DNSCrypt)。
-
AdGuard Home 独自のDoQサーバーの設定を検討していますか?
AdGuard Homeも最新のアップデートでDoQをサポートするようになりました。AdGuard Homeをパブリックサーバーとして実行している場合は、そこに暗号化(encryption)を設定することができます。 -
AdGuard Homeではちょっと複雑すぎて、シンプルなフォワーダーが必要な場合にはdnsproxyをご利用いただけます。
dnsproxy
はDoH、DoT、DoQ、DNSCryptをサポートするシンプルなDNSプロキシ。 -
DnsLibsはAdGuard製品で私たちが使用しているC++ライブラリです。DoQを自分のアプリに組み込むためにご自由にご利用ください。
以上です。
AdGuard討論の場・SNSや下のコメント欄にてユーザーの皆様のフィードバック、ご感想を楽しみにしております。