【図解】DNSゾーン転送の仕組みと設定~フォワーダとの違い,notify,スタブゾーンのメリット/デメリット~

ゾーンとは ~ドメインとの違い~

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) をきちんと使いたい場合は以下のページを参考にしてみて下さい。

【bind/Linux】ゾーン転送の2つの方式 AXFR と IXFR の違いと設定
【bind/Linux】ゾーン転送の2つの方式 AXFR と IXFR の違いと設定
AXFR と IXFR AXFR と IXFR は共にゾーン転送の方式で、AX...

スタブゾーンとは ~メリット・デメリット~

一般的にはサブドメインの委譲(委任)は、親ドメインの 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です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする