Q

サーバー統合の一環としてUNIX上のBINDで動作していたDNS(ドメイン・ネーム・システム)サーバーをWindows 2000 Serverに移行し,Windows 2000 Serverの標準機能を使ったプライマリDNSサーバーを構築しようとしています。現状のネットワーク・ポリシーを踏襲するため,各ゾーンの管理は,GUI(グラフィカル・ユーザー・インターフェース)管理コンソールを用いずに,リモート・マシンからNTLM認証のtelnetでログオンして標準プライマリとして構築したゾーンのゾーン・ファイルを直接修正する方法を考えました。

 UNIXのBINDの場合はゾーン・ファイルの内容を修正後,ファイルのバージョンを示すシリアル番号を1以上増加させた上で,BINDのプロセスにHUPシグナルを送信してファイルの再読み込みを指示すると,ゾーン・ファイルの内容が反映されます。Windows 2000 ServerのDNSサーバーでも同様の運用を想定していましたが,ゾーン・ファイルを手動更新しても更新内容がすぐ利用可能にならず,ゾーン・ファイルの再読み込みのように強制的に有効にする方法も見つかりません。

A

Windows 2000 Server標準搭載のDNSサーバーで,前述のように,ゾーン・ファイルを直接修正した場合,しばらくたつと情報が利用可能になるものの,更新のタイミングが不定です。すぐ有効にするには,情報を更新する度に,(1)DNSサーバー停止,(2)ゾーン・ファイル(含むシリアル番号)を更新,(3)DNSサーバー開始――という手順を実行する方法がありますが,サービスが中断されてしまい好ましくありません。


△ 図をクリックすると拡大されます
図1●WindowsのDNSでゾーン情報が更新された場合に通知を行う設定
 セカンダリDNSサーバーへの反映にも時間がかかります。ゾーンのプロパティにおいて図1のようにゾーンに変更があった場合に通知するよう設定していても,通知(DNSのNOTIFYメッセージ送出)が行われず,標準セカンダリとして構成したDNSサーバーやUNIX上のBINDに更新した情報が反映されるまでに,10分以上の時間が必要です。急いで更新を反映したい場合には標準セカンダリとして構成したDNSサーバーでDNSサービスを再起動したり,BINDのプロセスを再起動したりする方法がありますが煩雑です。


△ 図をクリックすると拡大されます
図2●Windows DNSのGUI管理コンソール
 一方,図2に示すDNSのGUI管理コンソールからゾーン情報を修正すると,時間は掛かりません。ゾーン・ファイルの内容が変更されるよりも早く,修正されたゾーンの情報が直ちに利用可能になるとともに,通知が行われ,標準セカンダリとして構成されたDNSサーバーやBINDに修正された情報が即座に伝わります。

 このような違いが発生する理由はDNSの内部処理を知れば理解できます。またSupport Toolsのコマンド操作で更新したゾーン・ファイルの情報を直ちに利用可能にすることもできます。

更新がメモリーにすぐ反映しない


△ 図をクリックすると拡大されます
図3●DNSのゾーン・ファイルの内容
 まず,コマンドとGUI管理ツールそれぞれの操作で結果が異なる理由を説明しましょう。Windows 2000 Server付属のDNSサーバーは,ゾーンの種類として標準プライマリや標準セカンダリを選択することで,(1)標準プライマリのゾーン情報として%SystemRoot%\System32\DNSフォルダにある<ゾーン名>.DNSファイル,(2)標準セカンダリのゾーン情報として%SystemRoot%\System32\DNS\BACKUPフォルダにある<ゾーン名>.DNSファイル――を参照して動作するようになります。これらのファイルはRFC1035で規定されている図3の形式になっています。UNIXで動作するDNSサーバーのデファクト・スタンダードといえるBINDとも互換性があります。

 ただし,UNIXのBINDと同様,ゾーン・ファイルの情報はDNSサービス起動時にメモリー上に読み込まれ,DNSクライアントからの問い合わせに対してはメモリー中の情報を使って応答します。ゾーン・ファイルを修正しても,それがメモリーに読み込まれるまでクライアントからは利用可能になりません。


△ 図をクリックすると拡大されます
図4●ファイルを更新しても新しいゾーンの情報がすぐ利用できない理由
 BINDの場合は,HUPシグナルを送信することで変更したゾーン・ファイルの内容をメモリーに再読み込み可能です。しかし,Windows 2000 Serverの場合,デフォルトではそうした方法が提供されていないため,図4のようにゾーン・ファイルを変更しても,実際の問い合わせに対して情報がすぐ反映されないという事象が発生します。

 一方,GUIのDNSの管理コンソールからゾーン情報を変更した場合は,メモリー中の情報が直接更新され,ゾーン・ファイル更新時のように内容の反映に時間が掛かることはありません。逆にGUIから情報を更新してもゾーン・ファイルが更新されるまでにしばらく時間が掛かります。GUIツールからの変更とゾーン・ファイルの変更の両方をほぼ同時に行うと,最悪のときは情報に矛盾が発生する可能性も考えられます。こうした点を考慮すると,ゾーン・ファイルを直接修正する方法は残念ながら推奨できないといわざるを得ないようです。

DnsCmdコマンドを使って対処
 このケースのようにGUIツールを利用せず,コマンド・ラインからのみ管理する方針の場合,Windows 2000 ServerのSupport Toolsとして付属するDnsCmdコマンドを用いてゾーン情報の操作を実行することをお勧めします。Support Toolsは標準ではインストールされませんが,OSのセットアップCD-ROMのSUPPORT\TOOLSフォルダ以下に格納されています。マイクロソフトのWebサイトでも最新版(SP4対応)が提供されています。


△ 図をクリックすると拡大されます
図5●DnsCmdによるゾーン情報の追加と削除
 DnsCmdコマンドでは,DNSサーバー自体の管理も含めた様々な操作が可能ですが,日常のゾーン情報のメンテナンスであれば,/RecordAddおよび/RecordDeleteオプションを用いて図5に示すようなコマンドを実行すればよいでしょう。

 レコードを追加するときには,/RecordAddオプションを用いてください。ゾーン・ファイルに情報を追加した後,即座にnslookupコマンドを実行してもその情報が実際の問い合わせで利用可能になります。セカンダリのDNSサーバーにも瞬時に情報が反映されます。

 レコードを削除するときには/RecordDeleteオプションを用います。これによりゾーン・ファイルで情報を削除した後,即座にnslookupコマンドを実行しても情報が消去されていることが確認できるようになります。やはり,セカンダリのDNSサーバーに対しても瞬時に情報が反映されます。

 単に/RecordDeleteオプションを指定すると,コマンド実行時に本当に削除するかを問い合わせてきますが,「/f」オプションを併せて指定することで,確認なしで削除を実行可能です。


△ 図をクリックすると拡大されます
図6●DnsCmdによるゾーン・ファイルの再読み込み
 なお,DnsCmdコマンドで/ZoneReloadオプションを用いることで,BINDのHUPシグナル送信やGUIの管理コンソールで各ゾーンのコンテキスト・メニューを参照するときに表示される[再読み込み]と同様,コマンド・ラインからゾーン・ファイルの内容をメモリーに再読み込みさせることも可能です(図6)。  このほかのオプションや使用方法の詳細は,DnsCmdコマンドのヘルプやその他の技術情報を参照してください。

高橋 基信