SyntaxHighlighter

2014年8月13日水曜日

[Windows] GlobalNames の罠

WINS の代替機能として紹介される Windows の DNS の GlobalNames ゾーンについて。

設定方法はググればいくらでも出てきます。その通りやれば設定できるのでここでは特に書くことはありません。

問題なのは、そもそも GlobalNames ゾーンって、どういう場合に有効(有意義)で、どういう場合には意味がないかという点です。
Microsoft のサイトの説明を読むと、これを使えば単一ラベルの名前解決ができる、というように読み取れますが、厳密にはそうではありません。例えば、以下のようなシナリオを考えます。

ドメインに参加していないクライアントPCがあるとします。普通にプリインストールされているOEM版Windowsで特殊な設定はしていません。 IP、DNSサーバ、WINSサーバの設定がDHCPで配布されています。 参照先DNSサーバは、GlobalNames ゾーンを持っているADです。WINSサーバも同じADです。 このクライアントから、WINSサーバの機能が動作していたときには、別セグメントのファイルサーバ filesvr1 に単一ラベルでのアクセスができていました(\\filesvr1)。 WINS サーバの機能を廃止するにあたって、GlobalNames ゾーンに filesvr1 のAレコードを登録しました。 この状態でWINSサーバを止めた場合、クライアントPCはこれまで通り \\filesvr1 でファイルサーバにアクセスできると思いますか?

答えは NO です。GlobalNames ゾーンに filesvr1 のレコードがあっても、クライアントPCで filesvr1 の単一ラベル名での名前解決はできません。 これが、冒頭で GlobalNames ゾーンでは単一ラベルでの名前解決ができるとは厳密には言えないと書いた理由です。 これができるようにするためには、クライアントが名前解決する際に使用するサフィックスを設定してやる必要があります。 具体的には、ホスト名を変更する画面の[詳細]ボタンを押すと表示される[このコンピューターのプライマリDNSサフィックス]か、ネットワークアダプタのTCP/IPのプロパティの[詳細設定]の[DNS]タブでサフィックスを設定します。 前者の場合はPCのリブートが必要になります。ここで設定するサフィックスは、filesvr1 が実際に所属しているドメインか、DNSサーバがゾーンを持っているドメインである必要があります。 ここでそもそもサフィックスに filesvr1 のドメイン名を設定できるのであれば(サフィックスは複数設定できます)、GlobalNames ゾーンが無くても単一ラベルでの名前解決はできます。 つまり、このようなケースでは GlobalNames ゾーンを使う意味はほとんど無いです。

ではどのような場合に有効(有意義)かというと、以下のようなシナリオが考えられます。

DNSサーバは foo.bar ゾーンと GlobalNames ゾーンを持っている。 GlobalNames ゾーンには、foo.bar ゾーンにはない filesvr1 のAレコードまたはCNAMEレコードが登録されている。 クライアントPCのDNSサフィックスには foo.bar が予め設定されている。 この状態であれば、GlobalNames ゾーンのおかげで、クライアントは何も設定変更をせずに filesvr1 という単一ラベルでファイルサーバにアクセス可能です。 GlobalNames ゾーンが無かった場合、まずは filesvr1.foo.bar という名前でクエリが行われ、foo.bar ゾーンには filesvr1 は無いので失敗し、次に(デフォルトでは) filesvr1.bar のクエリが行われて失敗し、次に filesvr1 が NetBIOS で検索されるもWINSサーバが無く同セグメントで無ければ見つからないので失敗してアクセスできません。 GlobalNames ゾーンにあれば解決可能です。