本書で使う RR
DNS が返す情報の単位をリソースレコード(Resource Record、以降 RR)と呼びます。1つの RR は、名前、型、値の組に TTL とクラスを加えたものです。
www.example.com. 3600 IN A 192.0.2.1名前 TTL クラス 型 値型は、その名前について何を聞いているかを表します。同じ名前でも、A を聞けば IPv4 アドレスが、NS を聞けば権威 DNS サーバーの名前が返ります。名前が同じでも型が違えば別のデータです。
RRset(同じ名前・型のレコードのまとまり)
Section titled “RRset(同じ名前・型のレコードのまとまり)”名前、型、クラスが同じで、値だけが違う RR は複数存在できます。example.com に IPv4 アドレスが2つ割り当てられている場合がこれにあたります。こうした RR の集合を RRset と呼びます。
問い合わせに対しては、RRset の一部ではなく全体が返ります1。値を1つずつ取り出して返すことはありません。この単位は、第4章でキャッシュの単位を扱うときに再び出てきます。
本書で使う7つの型
Section titled “本書で使う7つの型”| 型 | 何を表すか | 本書での使いどころ |
|---|---|---|
A |
IPv4 アドレス | 第5章 local-data |
AAAA |
IPv6 アドレス | 第5章 local-data |
CNAME |
別名 | 第5章 local-data |
NS |
ゾーンの権威 DNS サーバー | 第1章の委任、第6章 stub-zone |
PTR |
IP アドレスから名前を引くための情報 | 第5章 local-data-ptr |
TXT |
任意の文字列 | 第5章 local-data |
SOA |
ゾーンの管理情報 | 第4章のネガティブキャッシュ |
A / AAAA
Section titled “A / AAAA”A は IPv4 アドレス、AAAA は IPv6 アドレスを表します2。同じ名前に両方を置けます。
CNAME は、ある名前が別の名前の別名であることを表します。www.example.com に web.example.com を値とする CNAME があれば、www.example.com を引いた側は web.example.com を引き直します。
CNAME には制約があります。CNAME を持つ名前は、他の型のデータを持てません3。A と CNAME を同じ名前に共存させることはできません。例外は DNSSEC 用のレコードで4、これは第8章で扱います。第5章で local-data を書くときは、この制約に従う必要があります。
NS は、そのゾーンの権威 DNS サーバーの名前を表します。委任は、親ゾーンに置かれた NS RR で表現されます。NS は親ゾーンと子ゾーンの両方に現れ、親ゾーンのものが委任応答として返ります。
PTR は、IP アドレスから名前を引くために使います。逆引き用の名前は in-addr.arpa(IPv4)や ip6.arpa(IPv6)の下に作られ、192.0.2.1 であれば 1.2.0.192.in-addr.arpa の PTR を引きます5。
PTR は A の裏返しではありません。A と PTR は別のゾーンにある別のデータであり、片方を書いたからといってもう片方が自動的に作られるわけではありません6。
TXT は文字列を保持します。1つの TXT RR は文字列を複数持つことができ、その1つ1つに長さの上限があります7。この上限が実際に問題になるのは第5章なので、ここでは「文字列を持つ型」とだけ押さえておきます。
SOA は、ゾーンの管理情報を持つ RR です。ゾーン頂点に1つだけ置かれ8、そのゾーンの更新や再取得に関する値を持ちます。
SOA の各フィールドのうち MINIMUM は、そのゾーンの「ない」という答え(否定応答)をどれだけキャッシュしてよいかに関わります。つまり SOA は、存在しない名前の扱いにも影響します。この関係は第4章で扱います。
第1章で決めた語と型は、以降の章でそのまま使います。第2章では、Unbound を含む DNS のソフトウェアが、それぞれどの役割を担うかを整理します。
-
RFC 1035 の 3.5. IN-ADDR.ARPA domain と RFC 3596 の 2.5 IP6.ARPA Domain ↩
-
RFC 1035 の 3.3.14. TXT RDATA format。
<character-string>の長さの上限は同じ RFC の 3.3. Standard RRs ↩