AdGuard DNSでGoogleドメインへの接続が遅くなる問題を修正しました
ここ1~2週間、AdGuard DNSの速度に関する苦情が多く寄せられていました。
私たちは世界中の複数の場所で常にAdGuard DNSの速度を測定していますが、測定結果によるとすべての場所で問題がなく、問題原因の特定が困難になっていました。
しかし、ついに問題の根源を突き止めることができました。
それは、AdGuard DNS自体の問題ではなかったのです。
AdGuard DNSは設計通りに動作をしていたが、問題になっていたのは、AdGuard DNSが返していたIPアドレスです。
いくつかのドメイン(主にGoogleが所有するもの)に対して、AdGuard DNSはGoogle Chinaに属するIPアドレスを返していました。もちろん、これらのアドレスはほとんどのユーザーにとって動作をかなり遅くするものでした。
何が起こったのか?どのようにして起こったのか?
その解説する前に、この問題の解決に時間がかかってしまい、ご不便をおかけしたことのお詫びを申し上げます。
DNSはどのように機能するのか?
まず最初に、DNSが一般的にどのように機能するのかを把握する必要があります。
DNSは中央集権的なシステムではありません。各ドメインには、そのドメインを担当するDNSサーバー、いわゆる権威DNSサーバー(authoritative name server)があります。
再帰的なDNSリゾルバ(AdGuard DNSなど)は、このような権威サーバーから応答をもらいます。
AdGuard DNSがあなたのDNS要求を受信すると、何が起こるでしょうか?
ステップ№1:キャッシュのチェック
AdGuard DNSの内部キャッシュにIPアドレスが保存されていれば、リクエストに対応するIPアドレスをすでに知っている可能性があります。これは大部分のリクエストに当てはまり、そのような場合、AdGuard DNSは単にIPアドレスをすぐに返します。
ステップ№2:DNSの解決
キャッシュに応答が保存されていない場合は、権威サーバーにアクセスする必要があります。例として、AdGuard DNSにexample.org
のIPアドレスを求めたとします。
まず、org
ドメインゾーンを担当するサーバーを見つける必要があります。そのためには、いわゆるルートDNSサーバー(root DNS servers)に問い合せます。
ルートDNSサーバーは世界に14台しかなく、その全リストはこちらで見ることができます。ルートDNSサーバの唯一の仕事は、各第1レベルドメインゾーン(com
、org
など)をどのサーバが担当するかを知ることです。
そのようなルートサーバの一つは、org
ドメインゾーンを担当するのは、6つの権威サーバーであるということを教えてくれます。
これらの権威サーバーは"TLDネームサーバ"(TLD nameservers)と呼ばれ、org
ゾーンの各ドメインをそれぞれどの権威ネームサーバが担当しているかを知っています。
では、これらのサーバーのうちの1つが、正確に example.org
を担当するのは誰か、を教えてくれるはずです。このようにして、さらに2つのサーバーについて知り、やっと一番最初の問いである「example.org
のIPアドレスは何か」の答えを得ることができるようになります。
元: Cloudflare
このシステム全体がどのように機能するのか、自分の目で確かめてみたいですか?例えば、このサイトで簡単に確認することができます。
では、何が問題だったのか?
Googleのすべてのドメインを管理している4つの権威ネームサーバーがあります。これらの権威サーバーは、クライアントが最も近いGoogleサーバーのIPアドレスを取得できるように設定されています。AdGuard DNSは世界中に約50台のサーバー(まもなくさらに増える予定)を持っていますが、なぜGoogleはそのうちのいくつかに中国サーバーのアドレスを返していたのでしょうか?
AdGuard DNSサーバーは、IPv4だけでなくIPv6も含めた複数のIPアドレスを持っています。そして、IPv6が使用されているときに、GoogleはIPアドレスの位置を適切に検出できなかったようです。AdGuardのDNSサーバーの場所を示すレコードではなく、中国のレコードを提供していたのです。
というわけで、最終的には大した謎ではないことがわかりました。
※独自の再帰DNSサーバーをお使いの場合は、IPv6だと何が起こるか予測できないのでご注意ください。
今後このようなことがないように、私たちはすべてのDNSサーバーがIPv4を優先するように設定しました。結果として、Googleドメインにアクセスする際に接続速度が低下することはなくなりました。
この問題は別の方法で解決できますか?
はい。EDNS Client Subnetという技術が古くから存在しており、どのクライアントからリクエストを行っているかを権威サーバーに通知することができます。そのためには、クライアントのサブネットをリクエストに含める必要があります。
残念ながら、この方法は当社のプライバシーポリシーに反するため、当社には適していません。当社では、ユーザー様の本当のIPアドレスを第三者に伝えることは一切ありません。
EDNSクライアントサブネットを使用しながら、IPを秘密にすることは可能ですか?
はい、それは可能で、現在その実装に取り組んでおります。このブログの最新情報を確認いただいたり、もしくはAdGuardのソーシャルメディアでフォローしていただければ、こちらを導入しましたら見逃すことはないと思います。