Windows Server 2008 よりドメイン コントローラーが UDP 138 を利用したリクエストに応答する動作の変更点とそれに起因して発生する問題について
こんにちは、Windows プラットフォーム サポートの馬場です。
今回は、Windows Server 2008 よりドメイン コントローラーが UDP 138 を利用したリクエストに応答する動作の変更点とそれに起因して発生する問題についてご紹介します。
Windows Server 2003 のドメイン コントローラーから Windows Server 2008 以降のドメイン コントローラーに移行した後、NetBIOS 名のみを利用してドメイン名を解決するように構成している環境において、移行前は正常に行えていたとしても、以下のような問題が発生する可能性がございます。
* Active Directory 環境では DNS による名前解決ができることを前提としており、 NetBIOS 名のみを利用している場合には、グループ ポリシーの適用がおこなえないなどの問題の他、予期しない問題が生じる可能性がある点についてはご留意ください。
- ドメイン コントローラーへのログオンに失敗する
- 共有フォルダにアクセスできない
- リモート サーバーに接続できない
など
こちらの問題が発生した際、以下のようなエラー メッセージが表示されます。
"現在、ログオン要求できるログオン サーバーはありません"
このように、認証要求先となるドメイン コントローラーを見つけられないことを示すエラー メッセージがでてきます。
※注意: 事象により表示されるエラー メッセージは、異なることがございます。
現在、直面している問題がこちらのシナリオに当てはまる場合、Windows Server 2008 にて行われた動作変更の影響が考えられます。
NetBIOS でドメイン ログオンのための名前解決を実施した場合、名前解決の結果得られたドメイン コントローラーに対して UDP 138 を利用した疎通確認を行います。
その疎通確認に対して応答が得られたことをもって、ドメイン コントローラーの検索処理が完了します。
この UDP 138 を利用した疎通確認のリクエストに対しての処理が Windows Server 2003 以前とそれ以降では以下のように異なります。
- Windows Server 2003 R2 以前
UDP 138 を利用したリクエストを受け取るとそのまま応答を返します。
- Windows Server 2008 以降
UDP 138 を利用したリクエストを受け取ると、そのリクエスト元のコンピューター名の解決を NetBIOS で行います。
その解決ができた場合に応答を返し、名前解決が出来ない場合には応答を返しません。
以上の動作の違いにより、ドメイン コントローラーがリクエスト元のコンピューター名を NetBIOS を利用して解決ができない場合に問題が発生します。
この問題に対しての解決方法は 2 つあります。
方法1: クライアントが DNS でドメイン コントローラーの名前解決ができるように設定します (強く推奨します)
ドメイン コントローラーの SRV レコードをもつ DNS サーバーを確認し、その DNS サーバーがクライアントの参照先 DNS サーバーとなるように設定します。
方法2: ドメイン コントローラーが NetBIOS でクライアントの名前解決ができるように設定します
方法 2 については、多数のクライアントが存在する場合には、 NetBIOS 名解決ができるように WINS サーバーを利用していただくことが必要ですが、
この問題に合致していないかの確認や、暫定的な対処としては、ドメイン コントローラーに LMHOSTS を設定する方法が有効です。
LMHOSTS の設定方法は次のとおりです。
===========================
LMHOSTS 設定方法
===========================
1. ドメイン コントローラーに管理者権限をもつユーザーでログオンします。
2. [コントロール パネル] の [フォルダ オプション] を開き、 [表示] タブにある "登録されている拡張子は表示しない" のチェックボックスを外し、ファイルの拡張子が表示されるようにします。
3. %systemroot%\system32\drivers\etc フォルダを開きます。
4. lmhosts ファイル (拡張子無し) があれば、そのファイルを開きます。 lmhosts ファイルが無く、 lmhosts.sam があれば、拡張子を削除し lmhosts とした上で、 notepad で開きます。
5. 次のようなエントリを追加し、保存します。
<クライアントの IP アドレス> <クライアント名> #PRE
6. コマンド プロンプトを開き、 nbtstat -R を実行し、 nbtstat -c を実行します。
7. 追加したエントリが表示されるか確認します。
- 参考情報
[タイトル] How Domain Controllers respond to LDAP Ping on UDP 138 port