MicroArchitectures
H.Ueda
Programmer
ブログ
DNSの応答をより「近く」へ。EDNS Client Subnet の仕組みを整理する
Wikipedia の EDNS Client Subnet に関する解説を読み、モダンなネットワークインフラにおいてこの技術がどのような役割を果たしているのか気になったので、自分なりに情報を整理してみました。
この仕様知りませんでした。勉強になります。
普段、私たちが何気なくウェブサイトにアクセスする際、裏側では「ユーザーに最も近いサーバー」を案内するための工夫が凝らされています。その立役者の一つが、今回ご紹介する EDNS Client Subnet(ECS) です。
なぜ EDNS Client Subnet が必要なのか
従来の DNS の仕組みでは、権威 DNS サーバー(ドメインの情報を管理しているサーバー)が受け取るリクエストの送信元は、常に「キャッシュリゾルバ(Google Public DNS や ISP の DNS など)」の IP アドレスでした。
これには一つ、困った点があります。たとえば、日本のユーザーがアメリカにあるキャッシュリゾルバを経由してアクセスした場合、権威 DNS サーバー側からは「アメリカからのアクセスだ」としか見えません。その結果、本当は日本にコンテンツ配信サーバー(CDN)があるのに、アメリカのサーバーの IP アドレスを返してしまう、といったことが起こり得ます。
こうした「物理的な距離によるロス」を解消するために考案されたのが ECS という仕組みです。
ECS の仕組み:クライアントの「居場所」を伝える
ECS は、DNS 拡張機構(EDNS0)の一つとして定義されています。仕組みを簡単に言うと、キャッシュリゾルバが権威 DNS サーバーへ問い合わせを行う際、「このリクエストは、もともとこの辺りのネットワークのユーザーから来たものです」という情報を付け加えるというものです。
具体的には、クライアントの IP アドレスの「一部分(サブネット)」を DNS クエリに含めます。
処理の流れ
ECS を利用した場合の処理の流れを Mermaid 図にまとめてみました。
sequenceDiagram
participant User as "ユーザー (クライアント)"
participant Resolver as "キャッシュリゾルバ<br>(ECS対応)"
participant AuthDNS as "権威DNSサーバー<br>(CDNなど)"
User->>Resolver: www.example.com のIPは?
Note over Resolver: クライアントのサブネット情報を取得<br>(例: 1.2.3.0/24)
Resolver->>AuthDNS: www.example.com は?<br>["ECSオプション: 1.2.3.0/24"]
Note over AuthDNS: サブネット情報を元に<br>最適なサーバーを選択
AuthDNS-->>Resolver: 最寄りのサーバーIP: 1.2.3.100
Resolver-->>User: 1.2.3.100 です
このように、リゾルバがユーザーの IP アドレスの一部を「おまけ」として権威サーバーに渡すことで、権威サーバー側はより精度の高いルーティング判断ができるようになります。
ECS の有無による違い
従来の方式と ECS を使った方式で、どのような違いが出るのかを表に整理してみました。
| 項目 | 従来の DNS | ECS ありの DNS |
|---|---|---|
| 権威サーバーが見るIP | リゾルバの IP アドレス | リゾルバの IP + ユーザーのサブネット |
| 応答の最適化 | リゾルバの場所に基づく | ユーザーの実際の場所に基づく |
| キャッシュの単位 | ドメインごと | ドメイン + サブネットごと |
| プライバシー | ユーザー IP は秘匿される | ユーザー IP の一部が外部に渡る |
考慮すべき点
ECS はパフォーマンス面で大きなメリットがありますが、一方でいくつか気をつけておくべき点もあるかなと思います。
1. プライバシーへの影響
ユーザーの IP アドレス(の大部分)が権威 DNS サーバーに送信されるため、プライバシーを重視する観点からは懸念の声もあります。そのため、最近のプライバシー重視型のリゾルバ(Quad9 など)では、ECS をあえて送信しない、あるいは制限するといった対応をとっていることもあるようです。
2. DNS キャッシュの効率
リゾルバ側で「どのサブネットからの問い合わせか」によってキャッシュを分ける必要があるため、リゾルバのメモリ負荷が増えたり、キャッシュのヒット率が少し下がったりする可能性があるかもしれません。
3. 実装の普及状況
すべての DNS サーバーが ECS に対応しているわけではありません。Google Public DNS や OpenDNS といった大手サービス、あるいは主要な CDN 事業者は積極的に活用していますが、ISP の DNS などでは対応状況が分かれるところかと思います。
まとめ
EDNS Client Subnet は、インターネットの応答速度を向上させるために、「情報の正確な伝達」と「プライバシー」のバランスをとりながら発展してきた技術だと言えそうです。
私たちが普段、動画サイトや Web サービスをストレスなく利用できているのは、こうした目立たない部分での最適化が効いているからかもしれません。インフラエンジニアとしては、こうした細かな仕様が実際の通信パフォーマンスにどう影響しているのかを意識してみると、また違った視点でネットワークが見えてくるのではないでしょうか。
今回の内容が、DNS 周りの仕組みを理解する一助となれば幸いです。