EDNS Client Subnetとは
EDNS Client Subnetとは、 DNSの拡張プロトコルであるEDNS0*1を用いて、 問い合わせ先のDNSサーバに対して問い合わせ元の情報を伝達する技術であり、 RFC7871*2で標準化されています。
今日、同じ内容のDNS問い合わせに対し、 ユーザーがネットワーク上のどの位置にいるかによって、 回答を変化させる権威DNSサーバが多数存在します。その理由は、 地理的・ネットワーク的にサービスを分散している組織が、 ユーザーを適切な接続先へ誘導することによって、 遅延の減少やレスポンスの向上などを実現するためです。 これらのサーバは、主に問い合わせ元のIPアドレスによってその位置を判断していますが、 ユーザー位置の把握をより正確に行うための技術として、 EDNS Client Subnetが策定されました。
従来では、ユーザーの使用するキャッシュサーバ(フルリゾルバ)は、 ネットワーク的に近いサーバを利用することが主流でした。 そのため、DNSの問い合わせを受けた権威サーバは、 問い合わせを送信してきたキャッシュサーバとユーザーの位置を、 ほぼ同一と見なして問題ありませんでした。しかし、最近になって、 Google Public DNSやOpenDNSなど大規模な公開キャッシュサーバがサービスされ、 それを利用するユーザーが増加するなど、 従来の想定が成り立たなくなることが観測されるようになりました。
この問題を解消するため、 キャッシュサーバに問い合わせてきたユーザーの接続するアドレスブロック(サブネット)を、 権威サーバに通知できるように考え出されたものがEDNS Client Subnetです。 なお、EDNS Client Subnetを有効にした場合、 これまでのDNSには無かった問い合わせ元の情報が、 DNSメッセージ中に含まれるようになります。 すなわち、ユーザーの情報が、 名前解決中に通信される各DNSサーバに対して通知されることとなります。 こうしたことから、 プライバシーやセキュリティ上の問題が発生することが懸念されるため、 有効化する場合は、
- ユーザーに対してオプトアウトできるようにすること
- 通知先を限定するホワイトリストを設定すること
などが推奨されています。
グローバルにサービス展開をしている公開キャッシュサーバ、 CDN (Contents Delivery Network)、クラウドなどの各種サービス事業者においては、 EDNS Client Subnetの導入が利点となるため、徐々に実装が進んでいます。
*1 インターネット用語1分解説「EDNS0とは」
https://www.nic.ad.jp/ja/basics/terms/edns0.html
*2 RFC7871 "Client Subnet in DNS Queries"
https://tools.ietf.org/html/rfc7871