今回はDNSの基本的な仕組みを改めて確認しようと思い、下記書籍の内容を一部まとめました。
非常にわかりやすく、体系的に知識を習得できました。
DNSとは
DNSにおける階層化と委任
ドメイン名に対応する形で管理範囲を階層化し、管理を委任することで管理を分散する。
委任によって管理を任された範囲を「ゾーン」と呼ぶ。
ゾーンを委任するためには、サブドメインを作ることから始める。
サブドメインは、委任元で作られる。
それぞれのゾーンの管理者は、「ネームサーバー」というサーバーで情報を管理する。
ネームサーバーに保存される情報は下記2つ。
- そのゾーンに存在するホストのドメイン名とIPアドレス
- 委任の情報
- 委任先のネームサーバーの情報
親は子の委任の情報を管理し、委任先を案内する役割を持つ。
委任先をルートから順にたどり、最終的にドメインのIPアドレスを管理するネームサーバーにたどり着く仕組みが基本的な動作になる。
DNSとレジストリの関係
ドメイン名とDNSによる階層構造を導入した場合、それぞれの階層を管理する管理者(レジストリ)が必要になる。
レジストリが担う責任は下記。
- 自分が委任されたゾーンを管理する
- ゾーンを委任した場合、そのゾーンを委任した人が誰かを管理する
レジストリとは
レジストリの役割
ドメイン名を使うためには、レジストリに対して「このドメイン名を使いたい」という登録申請を行う。
レジストリの主な役割は下記。
- 登録情報を蓄積し管理する登録簿「レジストリデーターベース」を運用する。
- Whoisサービスの提供
- 自身の管理するドメイン名の情報をWhoisサービスで提供する。
- ネームサーバーの運用
Whoisとその役割
Whoisは、ドメイン名やIPアドレスのレジストリが、管理する情報をインターネットに公開し、利用者が参照できるようにするサービス。
レジストリ・レジストラモデル
ドメイン名の登録管理を、下記の通り分離する。
- ドメイン名の一元管理を行う役割を担うレジストリ
- ドメイン名登録者からの申請を取り次ぐレジストラ
登録されるドメイン名を一意に保ちつつ、価格やサービスにおける多様性を確保するため。
ドメイン名を使えるようにする
登録したドメイン名を使ってWebサイトにアクセスできるようにするためには、ネームサーバーを登録する必要がある。
最近では、ネームサーバーを提供する事業者のサービスを利用することも一般的。
自分でネームサーバー(以下、NS)を運用する場合は下記。
- 自分のドメイン名を取り扱うNSをインターネット上で動かす
- このNSはインターネットのどこからでもアクセスできるようにする必要がある
- 指定したドメイン名の情報をNSに設定する
- NSがインターネットから聞かれたことに答えられるか確認する
名前解決
階層構造取る場合に、子の情報を参照する際は、親が子に委任しているという情報を返す必要がある。
実際に階層構造をたどって名前解決すると、負荷と時間がかかる。
そこで、名前解決を担当する別サーバーを準備し、名前解決を代行する仕組みが考えられた。
一定時間、代行サーバーは名前解決の情報を保持する。
時間内に代行サーバーに要求がこれば、保持している情報を返す。
名前解決に必要なこと
委任元(親)が応答する委任先(子)のNS情報のことを、委任情報という。
正しい委任情報が登録されなければ、名前解決ができなくなってしまう。
DNSの構成要素
- 情報がほしい人
- 名前解決をする人
- 情報を提供する人
上記をそれぞれ、下記と呼ぶ。
- スタブリゾルバー
- フルリゾルバー、フルサービスリゾルバー
- 権威サーバー
スタブリゾルバー
PCやスマホの機器上で動作し、フルリゾルバーに名前解決を依頼する。
スタブリゾルバーからフルリゾルバーへ名前解決を依頼することを、「名前解決要求」という。
スタブには「末端」という意味がある。
フルリゾルバー
主な役割は下記。
- 名前解決の実行
- 名前解決の際に得られた情報を蓄積する
- しばらくの間蓄積する仕組みのことを、「キャッシュ」という
権威サーバー
権威サーバーは自分が委任を受けたゾーンの情報と、自分が委任しているゾーンの委任情報を保持する。
これまでNSとよんでいたサーバーが、権威サーバー。
自分が保持している情報のみを応答する。
ゾーン内の情報と、委任情報のみを応答する。
スタブリゾルバーやフルリゾルバーは問い合わせの際、知りたい情報の名前(ドメイン名)と種類(タイプ)を指定する。
権威サーバーはそのゾーンの設定内容(ゾーンデータ)を「リリースレコード」という形で保持する。
リソースレコードは、「ドメイン名」「タイプ」「クラス」という3種類の情報で構成される。
リソースレコード
よく使われるリソースレコードのタイプは下記。
- A
- IPv4アドレス
- AAAA
- IPv6アドレス
- NS
- そのゾーンの権威サーバーのホスト名
- MX
- そのドメイン宛の電子メールの配送先と優先度
冗長化
権威サーバーは複数台置かれることが普通。
冗長性の向上と負荷分散を図るため。
同一ゾーン内のどの権威サーバーに問い合わせても、同じ応答を得ることができる。
この仕組を「ゾーン転送」と呼ぶ。
ゾーン転送では、ゾーンデータを持つ権威サーバーがコピー元となり、コピー先の権威サーバーにゾーンデータをコピーする。
コピー元となるサーバーを「プライマリサーバー」、コピー先となるサーバーを「セカンダリサーバー」と呼ぶ。
権威サーバーが複数ある場合、フルリゾルバーはどの権威サーバーにアクセスすべきだろうか。
RTT(Round Trip Time)が短い権威サーバーに優先的に問い合わせる。
正引きと逆引き
ドメイン名に対応するIPアドレスを検索することを、「正引き」と呼ぶ。
その逆は「逆引き」。
リソースレコードの情報
SOA
委任により分割されたゾーンの境目をゾーンカットといい、ゾーンカットの小ゾーン側では、ゾーンカットのドメイン名をゾーン頂点という。
jp
がexample.jp
を委任している場合、example.jp
というドメイン名はゾーン頂点になる。
ゾーン頂点には、SOA(Start of Authority)リソースレコードを設定する。
委任されたゾーンを管理する際に必要な情報を設定する。
NS
委任に関する情報を設定する。
ゾーンカットの親側と、子側の双方のゾーンに設定する必要がある。
自分のゾーンのNSリソースレコードと、子側双方を設定する。
NSリソースレコードには、ゾーンの権威サーバーのホスト名を設定する。
ゾーンを管理する権威サーバーが複数ある場合、全てを列挙する。
権威サーバーについては、必要に応じてAレコードやAAAAレコードを登録する。
MX
設定したドメイン名のメールを受け取れるようにするための情報も、そのゾーンの権威サーバーへ設定する。
MXレコードには、メールサーバーの優先順位が符号なしの数値で設定されている。リストの中で最も小さい値のメールサーバーから順に、メールの配送を試みる。