図1●Windows 2000 Serverの共有フォルダをWindows 2000 Professionalで[ネットワークドライブの割り当て]をしようとするとエラーが出ることがある
Q

Windows 2000 Serverの共有フォルダに対しWindows 2000 Professionalから[ネットワークドライブの割り当て]を実行しようとしたところ,図1のようなエラーが出て接続できませんでした。コマンド・ラインからnet viewやnet useといったコマンドも試してみましたが,やはり

システム エラー 52 が発生しました。
ネットワーク上に同じ名前があります。

というエラーになってしまいました。しかし,この名前にpingを使用しても問題ありませんし,NT 4.0 Workstation/Serverからは同じ共有フォルダへちゃんと接続できます。いったい「同じ名前」とは何で,なぜWindows 2000からは接続できないのでしょうか?

A

この問題は,Windows 2000 Server上で設定しているコンピュータ名(NetBIOS名)とは異なるUNC名などを使用して接続しようとする場合に発生します。いずれの場合も出ているエラー・メッセージは「システムエラー52(ネットワーク上に同じ名前があります)」という内容ですが,この“同じ名前”には大した意味はなく,実際には「システムエラー53(ネットワークパスが見つかりません)」と類似のエラーと考えた方がよさそうです。

 MicrosoftのKnowledge Baseに「Connecting to SMB Share on a Windows 2000-Based Server May Not Work with an Alias Name (Q281308)」というドキュメントがあり,この現象を解説しています。ここでは,Windows 2000上のサーバー・サービス(SMBサービス)の仕様を変更してNetBIOS名のチェックを厳しくしたため,サーバーが認識しているコンピュータ名とは別の名前で要求があっても受け付けない,と説明しています。このため,IPレベルでは通信できていてもWindowsのサーバーとしては接続できないという現象が発生しているようです(図2)。


△ 図をクリックすると拡大されます
図2●Windows 2000はサーバー上での名前のチェックを厳しくしているため,自分で認識しているものとは違う名前で要求があっても受け付けない

IPレベルで通信できていてもサーバーとしての接続は別
 もう少し詳しく説明すると,このエラーが出るときには,クライアントからリクエストした名前でIPアドレスを特定する名前解決の作業は,ネーム・サーバーなどを使って無事に完了しています。しかし,この名前解決に使ったhostsファイルやLMHOSTSファイルのエントリ,あるいはDNS/WINSのレコードに載っているホスト名が,サーバー上で設定したコンピュータ名とは異なっているということです。

 一般的なIPネットワークではNIC(実際にはIPアドレス)ごとに別々のホスト名を割り当てて,“接続先”を明確にしています。ところがWindows 2000ではNetBIOSとの互換性を意識しているためか,NICごとに別のホスト名を割り当てるという設定ができません。このため,複数NICを持っているマシンに対して,DNSへ静的に登録されている別のホスト名でアクセスできるような場合が出てきます。このような場合にこのエラーと遭遇するケースが多いでしょう。

 しかし,この説明通りならば,クライアントが,NT 4.0,Windows 2000(NT 5.0),Windows XP(NT 5.1)のどのOSであっても一様な動作をするはずですが,実際には若干異なった動作になります。テストとして,NetBIOS名を使用した接続として「net view \\host」,FQDNを使用した接続として「net view \\host.domain.name」,IPアドレスを使用した接続として「net view \\1.2.3.4」を,クライアントとサーバーのOSを変えて実行した結果が表1です。


表1●クライアントとサーバーのバージョンを変えた接続テストの結果

 正確に記載されたドキュメントが見当たらないので動作やネットワーク・パケットのトレースからの推測ですが,Windows 2000ではWorkstationサービスのロジックも大幅に変更されているようです。例えば,同じNT 4.0のサーバーに接続しても,ネットワーク上を流れるパケットの内容や出るエラーがNT 4.0クライアントの場合とは異なります。つまり,接続先のサーバーOSのバージョンによって動作を変えているようなのです。

別名でのリクエストを受け付けるようレジストリを修正すればOK
 さて,ご質問の問題に対する解決策ですが,NetBIOS名のチェックはWindows 2000での“仕様変更”にあたるようなので,なるべくこれに沿って新しい名前を設定するのがベストです。しかし,ネットワーク全体への影響を避けるため,ホスト名などに手を付けずに回避したい場合はサーバーへ追加のNetBIOS別名を設定するか,あるいはサーバーにQ281308に対するホットフィックス(Windows 2000のSP3に含まれる予定)を適用してからレジストリを設定します。

 追加のNetBIOS名を設定するには,regedt32.exeでHKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\LanmanServer\ParametersのキーにREG_SZ型またはREG_MULTI_SZ型のOptionalNamesという値を追加し,そこに追加したいNetBIOS名をデータとして入力します。ホットフィックスを適用した場合は,上記と同じキーにDisableStrictNameCheckingというREG_DWORD型の値を追加し“1”を設定します。

 いずれの場合も,設定後に再起動すればNetBIOS名のチェックに関するエラーは表示されなくなります。このホットフィックスを適用した場合について動作を確認した結果を表1に併記しました。確かにNT 4.0と似た動作をしますが,厳密にはNT 4.0互換ともいい難く,どちらかというと“何でもあり”の状態になってしまうようです。

小森博司