DNSのBailiwickとは
DNSDBを触り始めたときにBailiwickが何なのか分からなかったのでメモ。
RFCによる説明
DNSに使われる用語の一つに、「Bailiwick」があります。
この単語自体は専門領域、管轄区域という意味の英単語ですが、DNSの世界においてはRFC8499によって以下のように定義されています(以前はRFC7719に記述がありましたが、RFC8499によって廃止されています)。
Bailiwick(管轄区域):
"in-bailiwick(管轄区域内にある=内部名)"は、ネームサーバーの名前
が、そのネームサーバーへの委任を含むゾーンの起点のサブドメインに
なっているか、(まれに)同じ名前になっているかのどちらかであること
を示す修飾語である。内部名のネームサーバーは、親ゾーンにグルー
レコードを保持する場合がある(上記の"グルーレコード"の最初の定義
を使用)。("bailiwick(管轄区域)"という用語は、執行官または警察官
が管轄権を持つ区域、地域を意味する)。
"内部名"のネームサーバー名は、更に"in-domain(インドメイン)"の
名前と"sibling domain(シブリングドメイン)"の名前の2種類に
分けられる。
・ インドメイン: ネームサーバーの名前が、NSリソースレコードの
所有者名の下位に位置するか(まれだが)同じであるかのどちらかで
あることを表現する修飾語。インドメインのネームサーバーはグルー
レコードを持つ必要があり、持たない場合には名前解決に失敗する。
例えば、"child.example.com"への委任は、"インドメイン"のネーム
サーバー名"ns.child.example.com"を持つかもしれない。
・ シブリングドメイン: ネームサーバーの名前が、ゾーンの起点の下位
に位置するか(まれだが)同じであるかのどちらかであり、かつそれは
NSリソースレコードの所有者名とは異なり、その下位に位置するもの
でもないことを表現する。シブリングドメインに関するグルーレコード
は許容されるが必須ではない。例えば、"example.com"ゾーンにおける
"child.example.com"への委任は、"シブリング"のネームサーバー名
"ns.another.example.com"を持つかもしれない。
"out-of-bailiwick(管轄区域外にある=外部名)"は、"内部名"の反意語
である。具体的に、ネームサーバーの名前がゾーンの起点の下位には位置
せず、またゾーンの起点と同じでもないことを表現する修飾語である。
外部名のネームサーバーに関するグルーレコードは無益である。以下の
表は、委任タイプの例を示すものである。
ざっくり要約すると、Bailiwickは外部名と内部名の2つに関連し、内部名はインドメインとシブリングドメインに分けられることが分かります。また、"外部名"・"内部名"(インドメイン・シブリングドメイン)はいずれもネームサーバ(権威DNSサーバ)に対して用いられる名称であることも分かります。
委任・ゾーン
あなたがexample.jpというドメインを所有していたとします。一般的には、example.jpのサブドメインであるalice.example.jpやbob.example.jpもあなたが所有・管理している(管理できる)はずです。
世界に膨大に存在するドメイン(FQDN)を単一の組織が管理することは事実上不可能に近く、これを解決するための分散管理を実現する手法として委任が存在します。また、委任によって作られる管理の単位をゾーンと呼びます。
先程のexample.jpの例では、example.jp以下の管理がTLDであるjpからあなたに委任されたということになります。すなわち、example.jpゾーンが作成され、ゾーン内の管理をjpから委任されています。委任されているため、ゾーンの管理者であるあなたはゾーン内で自由にサブドメインを作成できます。
あるゾーンには、そのゾーンから委任したドメイン以外の全てのドメインが含まれます。
jpゾーンに含まれるexample2.jpは(委任されていなければ)jpが管理したままであり、そのサブドメインであるwww.example2.jpもjpが管理したままです。
委任されたドメインのサブドメインを更に委任することも可能です。
あなたが管理しているexample.jpのサブドメインであるtest.example.jpの管理を組織Xに委任すると、test.example.jpゾーンが生成され、test.example.jp以下は組織Xが管理することになります。
jp
├委任→ example.jp ← exapmle.jpゾーン
│ ├ www.example.jp ← exapmle.jpゾーン
│ └委任→ test.exapmle.jp ← test.exapmle.jpゾーン
│ └ www2.test.example.jp ← test.exapmle.jpゾーン
├ example2.jp ← jpゾーン
│└ www.example2.jp ← jpゾーン
└ example3.jp ← jpゾーン
内部名(in-bailiwick)
内部名とは、権威DNSサーバが委任元のゾーンの起点のサブドメインになっていることを示す語です。
委任元のドメインがjpで、委任先のドメインがexample.jpの場合、ns1.example.jpとns.example4.jpはどちらもjpのサブドメインなので内部名です。
内部名はインドメインとシブリングドメインの2つに分かれます。
インドメイン
インドメインは、権威DNSサーバが委任先のドメインの子孫(=委任されたゾーンの内側)である場合に用います。
例えば、example.jpの権威DNSサーバがns1.example.jpにある場合には、これはインドメインなネームサーバとなります。ns1.example.jpはexample.jpゾーンの内側にあるからです。
インドメインの権威DNSサーバには、グルーレコードを設定する必要があります。
グルーレコード
あるユーザがtest.example.jpへアクセスしたい状況を想定します。
このとき、jpの権威DNSサーバに対してexample.jpのIPアドレスの問合せが行われますが、example.jpのネームサーバがどこに存在するかが問題となります。example.jpはあなたに委任されているので、example.jpのネームサーバの管理もあなたに委ねられています。
example.jpの権威DNSサーバがns1.example.jp(example.jpの内部)に存在する場合、example.jpを名前解決するためにはns1.example.jpに問い合わせする必要があります。
しかし、ns1.example.jpに問い合わせるにはns1.example.jpを名前解決する必要があり、そのためにexample.jpの名前解決が必要になる…とループが発生します。
これを解決するための仕組みがグルーレコードです。グルーレコードは、jpの権威DNSサーバに必要となるns1.example.jpのAレコード(もしくはAAAAレコード)のことです。グルーレコードが存在することで、jpの権威DNSサーバからns1.example.jpを名前解決することができ、最終的にexample.jpを名前解決することができます。
インドメインにはグルーレコードが必須です。
シブリングドメイン
シブリングドメインは、権威DNSサーバが委任元のドメインの子孫であるがインドメインでない場合に用います。
例えば、example.jpの権威DNSサーバがns2.example4.jpであるとすると、これはシブリングドメインです。権威DNSサーバ(ns2.example4.jp)は委任元のドメイン(jp)の子孫ですが、インドメイン(example.jp)
シブリングドメインについてのグルーレコードは任意であり、必須ではありません。
外部名(out-of-bailiwick)
外部名とは、権威DNSサーバが委任元のゾーンの起点のサブドメインになっていないことを示します。
例えば、example.jpの権威DNSサーバがns.example.comにある場合には、これは外部名となります。ns.example.comはexample.jpゾーンの委任元であるjpゾーンのサブドメインになっていないからです。
外部名の権威DNSサーバに対してのグルーレコードの設定は「無益」であるどころか、有害であるとされています。
内部名・外部名の例
RFC8499の内容を引用します。
委任 | 親 | ネームサーバー名 | タイプ |
---|---|---|---|
com | . | a.gtld-servers.net | 内部名 / シブリングドメイン |
net | . | a.gtld-servers.net | 内部名 / インドメイン |
example.org | org | ns.example.org | 内部名 / インドメイン |
example.org | org | ns.ietf.org | 内部名 / シブリングドメイン |
example.org | org | ns.example.com | 外部名 |
example.jp | jp | ns.example.jp | 内部名 / インドメイン |
example.jp | jp | ns.example.ne.jp | 内部名 / シブリングドメイン |
example.jp | jp | ns.example.com | 外部名 |
Discussion