ゾーンとは ~ドメインとの違い~
DNS におけるゾーンとは、ある 1 階層の名前空間の集合を意味します。
例えば example.com というゾーンがあった場合、www.example.com 等の [任意の文字列].example.com というホスト名 (FQDN) は全て example.com というゾーンの範囲内になります。
ただし、aaa.sub.example.com というホスト名は、example.com というゾーンの範囲外です。これは sub.example.com というゾーンの範囲になります。
ゾーンは階層構造になっており、特定の 1 階層を表現する言葉が『ゾーン』であり、特定の 1 階層およびその下の階層全体を表す言葉を『ドメイン』と言います。
あるゾーン情報を持つ DNS サーバのことを、そのゾーンにおける『コンテンツサーバ (権威サーバ:AUTHORITY SERVER)』と呼びます。
ゾーンは階層構造の観点において 2 種類あります。1 つが『前方参照ゾーン』、もう 1 つが『逆引き参照ゾーン』です。
逆引き参照ゾーンは『PTR レコード検索 (IP アドレスからホスト名を解決する)』のためのゾーンで、前方参照ゾーンは『A レコード検索 (ホスト名から IP アドレスを解決する)』に加え、『MX/CNAME/SRV 等の検索 (ホスト名からホスト名を解決する)』等のためのゾーンです。
要はホスト名を使って検索するためのゾーンが『前方参照ゾーン』、IP アドレスを使って検索するためのゾーンが『逆引き参照ゾーン』です。
逆引き参照ゾーンは ".in-addr.arpa" というドメインを使って構成され、オクテットの順番が IP アドレスとは逆向きになります。例えば 3.1.1.2 の逆引きをする (この IP のホスト名を調べる) ときは "2.1.1.3.in-addr.arpa" という名前を問合せます。
ゾーン転送とは ~フォワーダとの違い~
DNS におけるゾーン転送とは、DNS コンテンツサーバのゾーン情報について、Master (Primary) サーバから Slave (Secondary) サーバへ転送 (コピー) し、Master サーバが障害等でダウンした場合であってもそのゾーンの名前解決が継続できるようにする仕組みのことです。
フォワーダとの違いは、フォワーダは『クエリ』を転送するのに対し、ゾーン転送は『ゾーン情報そのもの』を転送するのです。
Master サーバのゾーンを『プライマリゾーン』、Slave サーバのゾーンを『セカンダリゾーン』と呼びます。
Master サーバ、Slave サーバはゾーン毎に定義されますので、上図のように 1 台の DNS 権威サーバが (example.com ゾーンの) Masterサーバ兼、(test.co.jp ゾーンの) Slave サーバとなることもあります。
ゾーン転送のシーケンスと基本設定
ゾーン転送が行われるトリガーは2パターンあります。
1 つ目は Slave サーバが Master サーバから notify という DNS パケットを受信したときです。
notify パケットは UDP なので取りこぼしをする可能性もあります。変更時に Slave サーバとの NW 疎通が取れない状況も考えられます。そのようなケースにも対応するために、Refresh 時間というものが存在します。
前回のゾーン転送から Refresh 時間が経過したら、Slave サーバが自発的に Master サーバへ状態を確認しに行きます。その際、Serial 番号を確認し、Serial が進んでいた場合はゾーン転送を開始します。
なお、notify を受信した場合であっても、Serial を確認し、進んでいた場合のみゾーン転送を行います。
以下に Linux/bind における設定例 (関連箇所のみ抜粋) を示します。
ゾーンファイルの読み方/書き方
ゾーンファイルの一番上にある $TTL が、各レコードの寿命です。クライアントがこのゾーンの情報を取得した際、キャッシュに残しておいて良い時間を意味します。
次に SOA (Start Of Authority) レコードですが、ゾーンの全般的な設定をしています。
カッコの手前の 2 つの FQDN は、1 つ目が Master サーバの FQDN、2 つ目が管理者のメールアドレス (@ は . に変換) を記載します。
カッコ内にある数字は、ゾーンに関する情報です。
Serial はゾーンのバージョン情報で、この値を増やして更新しないとゾーン転送が正しく行われません。
Refresh は Slave サーバから Master サーバに『更新情報があるかどうか』を聞きに行く時間間隔です。
Retry は、Refresh 時間でもしMasterサーバと NW の疎通が取れないときに、次に再試行するまでの時間です。
Expire は、ゾーン転送でコピーしてきた情報を refresh することなく有効とみなして保持する時間です。Master サーバがこの時間よりも長くダウンした場合は Slave 側も無効になってしまいます。
Minimum はネガティブキャッシュの保持時間です。
なお、フルゾーン転送 (AXFR) ではなく差分ゾーン転送 (IXFR) をきちんと使いたい場合は以下のページを参考にしてみて下さい。
スタブゾーンとは ~メリット・デメリット~
一般的にはサブドメインの委譲 (委任 : Delegation) は、親ドメインの NS レコードにて行います。
以下の例では sub.example.com というサブドメインの情報として、exmaple.com のゾーンに sub(.example.com.) の NS レコードとして dns3.sub(.example.com.) と dns4.sub(.example.com.) を記載し、さらに (サブドメインのレコードではありますが) dns3.sub と dns4.sub の A レコードとしてそれぞれ 10.2.2.1 と 10.2.2.2 を登録しています。
ここでの問題は、Master (Primary) サーバはともかく、Slave (Secondary) サーバの変更をするために、いちいち親ドメイン側の Master サーバ設定変更をしなければならない点です。
多くのケースでは親ドメインとサブドメインの運用管理者は分かれているため、サブドメイン管理者は親ドメイン管理者に変更依頼をしなければならないことです。
例えば上図において、sub.example.com の Slave サーバとして dns5.sub.example.com サーバを一台構築し、(つまり example.com の NS レコードを 1 つ増やし、) 動作に問題ないことを確認したら dns4.sub.example.com をシャットダウンする (つまり example.com の NS レコードを 1 つ削除する)、というケースでは、時間を空けて 2 回依頼することになります。親ドメイン側からしたら面倒くさいと思われるかもしれません。
この解決策としてスタブゾーンがあります。
スタブゾーンでは『SOA レコード』、『NS レコード』、『NS レコードに記載されたホスト名の A レコード』の 3 種類のみをゾーン転送で情報を保持します。
そのため、Slave サーバの追加・変更・削除についてはサブドメイン管理者の範囲内で実施できる、というメリットがあります。
デメリットとしては、少量とはいえ、ゾーン情報を持つことくらいでしょうか。
スタブゾーンは、ゾーン転送を使いますが、実際にはサブドメイン委譲に関する『NS レコードによる委譲』の代替手段 (スタブゾーンによる委譲) です。
なお、親ドメイン側では サブドメインの Master サーバを指定する必要があるため、Master サーバの IP アドレスを変更する場合は親ドメイン側の設定変更が必要です。
Active Directory 統合ゾーン
Windows Server の Active Directory は DNS サーバが必須となりますが、Active Directory サーバ (正確にはドメインコントローラ:AD DS の役割を持つサーバ) と同一 OS に DNS サーバの役割をインストールすると、『Active Directory 統合ゾーン』という特殊なゾーンが使えます。
冗長化のためにドメインコントローラを複数台構築しているケースにおいては、ドメインコントローラ間で情報を複製する機能を使って、DNS のゾーン情報も複製することができます。
このゾーンはマルチマスタ構成となりますので、Master/Slave という関係が無く、どちらのサーバでゾーン情報を変更しても、もう一方のサーバに反映されます (ただし、競合には気を付ける必要がある)。
仕組みとしては、AD の Database が格納された C:\Windows\NTDS フォルダを DFSR という分散ファイルシステムの機能を使って同期を取ります。
Windows と Linux 間のゾーン転送
Windows Server の DNSサーバと Linux の DNS サーバ (bind) 間でのゾーン転送は基本的には可能です。Linux の bind は一般的な Master/Slave の設定をすればよく、Windows においてもゾーンの新規作成時に『プライマリゾーン』や『セカンダリゾーン』を設定すれば OK です。
コメント