Q

Active Directoryドメインを構築したところ,Windows 2000からは問題なく参加できるのですが,Windows XPからは図1のようなエラーが出てドメインに参加することができません。なぜなのでしょう


図1●単一ラベルDNS名でActive Directoryドメインを構築するとWindows XPからドメインに参加できなくなる

A

この問題はActive Directoryのドメイン名をトップ・レベル・ドメイン(TLD)にしたことが原因と思われます。TLDとは,いわゆる「com」「jp」「net」「org」のように,「.」(ドット)で区切られたドメイン名の最後尾にあるコードを指します。インターネットのトップ・レベルに当たり,通常は特殊なドメイン名になります。ちなみに,マイクロソフトのサポート技術情報ではTLDを「単一ラベルDNS名(single-label dns names)」と呼んでいることが多いようなので,ここではその用語を使って説明します。

 Active Directoryのドメイン名はActive Directoryをインストールするウィザードの中で指定します。ここで,[新しいドメインの完全なDNS名]に通常は「w2k.nikkeibp.co.jp」のようなインターネットの一般的な命名規則に沿った名前を入力します。

 もし,「w2k」だけのような規則に反した単純な名前を入力すると警告が表示されますが,無視するとそのまま「w2k」という単一ラベルDNS名でActive Directoryドメインが構成されてしまいます(図2)。このようなActive DirectoryドメインにWindows XPマシンを参加させようとすると今回のようなエラーが出て失敗します。


図2●Active Directoryのインストール・ウィザードで単一ラベルDNS名を設定しようとすると警告メッセージを表示するが[はい]を選択すればそのまま設定できてしまう

Windows XPからはDNS更新に問題
 これは,Windows XPではネットワークの実装が変わり,単一ラベルDNS名のドメインに対してはダイナミック・アップデートをしないようになったためです。この問題を解決するには2つの方法があります。

 1つはWindows XPでWINSを使用する方法です。名前解決をWINSサーバーで処理することにすれば,とりあえずドメインに参加できるようになります。具体的な手順としては,まずWINSサーバーを用意し,Windows XPの「WINSのアドレス」にWINSサーバーのアドレスを入力します。

 もう1つはWindows XPでLMHOSTSファイルを使用する方法です。環境やサーバー・スペックの問題でWINSサーバーを用意できない場合は,該当するWindows XPマシン上にLMHOSTSファイルを作成しても名前解決が行えます。

 これで,とりあえずは単一ラベルDNS名となっているActive DirectoryにWindows XPを参加させることは可能になります。しかし,その場合でもDNSゾーンのレコードを動的には更新できません。そのため,Windows XPから動的に名前解決する必要がある場合は,さらにDNSサーバーとWindows XPのそれぞれのレジストリを変更する必要があります。

 具体的には,DNSサーバーとなっているWindows 2000 Serverは
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip\ Parametersのキーに,クライアントのWindows XPは
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\DnsCache\Parametersのキーに,UpdateTopLevelDomainZonesというREG_DWORD値をそれぞれ追加します。値のデータは「0x1」に設定します。

子ドメインからの名前解決にも問題が
 単一ラベルDNS名を使っていると,子ドメインを追加した場合にも問題が発生する点に注意してください。

 Windows 2000/XPでは,ホスト名をFQDNに従ったフル・コンピュータ名で入力しなくても,自分の所属するドメイン名を自動的に付加(サフィックス)してDNSに問い合わせます。それで名前解決ができなければ,DNSのレベルを1つずつ上げながら名前解決を繰り返すようになっています。

 例えば,「sub.w2k.nikkeibp.co.jp」というドメインに所属するマシンで「dc01」というホスト名を入力すると,まず「dc01.sub.w2k.nikkeibp.co.jp」という名前でDNSに問い合わせ,それで解決しなければ次に「dc01.w2k.nikkeibp.co.jp」という名前,というように問い合わせていきます(図3)。その途中で該当するあて先が存在すれば,そのアドレスに実際の問い合わせをします。この仕組みによって,通常は子ドメインから親ドメインへの名前解決はFQDNを意識しなくても動作するようになっています


図3●Windowsクライアントでフル・コンピュータ名以外を入力すると所属するドメイン名を自動的に付加してDNSサーバーにアドレスを問い合わせる
発見されないと1つずつ階層を上げて繰り返し問い合わせるが,最後の単一ラベルDNS名についてはDNSサーバーに問い合わせない仕様になっている。

 しかし,ドメイン名を単一ラベルDNS名にしている場合は,この仕組みがうまく働きません。これは,ドメイン名を自動追加するこの仕組みが,ルートから2番目のサフィックスまでしか働かず,最後の単一ラベルDNS名には適用されない仕様だからです。これは,Windows XPだけでなくWindows 2000でも同様です。

 このため,例えば「w2k」という単一ラベルDNS名になっている場合には,子ドメイン「sub」のマシンからは「dc01.sub.w2k」の名前解決は問い合わせますが,「dc01.w2k」という親ドメインのサフィックスを使った名前解決は行われません。


図4●TCP/IP詳細設定の[DNS]タブの画面で名前解決が必要な親ドメインなどのサフィックスをか働かず,最後の単一ラベルDNS明示的に追加すれば解決する

 この問題を解決するには[TCP/IPの詳細設定]-[DNS]タブの[以下のDNSサフィックスを順に追加する]に親ドメインのDNSサフィックスを記入します(図4)。このように子ドメインのサーバーに明示的に親ドメインのサフィックスを追加することによって名前解決ができるようになります。

 これらの問題は単一ラベルDNS名でActive Directoryを構成していて,これからWindows XPの利用を検討していたり,合併や統合のためにドメインの追加を検討したりしている場合には注意が必要です。まだ設計中であれば単一ラベルDNS名での構築を再検討した方がよいでしょう。

花崎隆直