※ 2018 年 5 月 18 日現在の情報をもとに作成しています
1. はじめに
これまでの記事の中で、DNS リクエストの中に情報を付加する際に、「EDNS0」 という拡張プロトコルを使用することについてたびたび触れてきました。本記事では、改めて Umbrella が EDNS0 を使って付加する情報について解説します。
2. EDNS0 とは
EDNS0 (Extension Mechanisms for DNS) は、既存の DNS だけでは実現が難しい機能 (DNSSEC など) のために用意された DNS の拡張プロトコルです。
EDNS0 が取り扱うデータは、DNS パケットの「Additional」セクションの中に「疑似リソース レコード (OPT)」として追加され、主に以下の 3 種類の拡張を行っています。
- 512 bytes よりも大きい UDP のペイロード サイズを扱う
- DNS レスポンスの RCODE の種類を拡張する
- DNS パケットに任意の情報を付加する
このうち、Umbrella が情報を付加するために使うのは 3 番目ですので、次項でこの詳細について説明をします。なお、それ以外の EDNS0 の詳細については、RFC 6891 (基となる RFC 2671 は廃止) を参照してください。
3. 付加情報の詳細
前項で EDNS0 が取り扱うデータは、Additional セクションの中の OPT リソース レコードとして格納されることを説明しました。この OPT リソース レコードは、以下の図のように、通常のリソース レコードと同じ構造をしていますが、格納される情報の内容が異なっています (詳細は割愛)。

DNS パケットに任意の情報を付加したい場合、この「RDATA」に「オプション」と呼ばれる単位でデータを追加します。EDNS0 は RDATA に 0 個以上のオプションを格納することを許していますが、Umbrella では 1 つか 2 つのオプションが格納されます。では次にオプションの構造を見てみます。

OPTION-CODE の値は Identity で異なっており、Network Device の場合、デバイスを識別する情報を格納するために 0x6942 が、その他の諸情報を格納するために 0x4F44 が使い分けられます。
0x6942 の OPTON-DATA には、以下の図のように「OpenDNS」という文字列の後に DNS リクエストを生成させたデバイスの Device ID が入っています。

なお、IANA の以下の公開情報の中でこのことが定義されています。
Domain Name System (DNS) Parameters (外部サイト)
https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml
> DNS EDNS0 Option Codes (OPT)
> 26946 DeviceID Optional
一方、0x4F44 の OPTON-DATA には、以下の図のように、データの種類 (TYPE) とデータの内容 (Contents) が複数入るような構造になっています。

※ MAGIC には、メッセージの種類を識別するための文字列が格納されますが、基本的に「ODNS」という文字列が使われます
Network Device 以外の Identity の場合、基本的に 0x4F44 のみが使われますが、詳細は非公開となっています。