Active Directoryネットワーク内のクライアントシステムは、どのサイトに存在するかをどのようにして見つけるのですか?


21

Windowsの管理を開始するためのプレゼンテーションをまとめていたとき、私はすぐに質問しなかったことに驚いていることに感銘を受けました。

そんなこと知ってる:

  • ADは、複製を支援し、クライアントコンピューターとドメインサービス間のドメインに必要な通信の待ち時間を短縮するために、サイトに論理的にセットアップされます。
  • サイトは、それらに適用されるサブネットによって定義されます
  • _msdcsサブドメインには、一般的なルックアップ(_tcp)およびサイト固有のルックアップ(_sites)用のSRVレコードの階層が含まれています
  • コンピュータはどういうわけか自分がどのサイトにいるかを知っていますか、またはドメインコントローラーがDNSの魔法で透過的に決定します...またはそれを行いますか?

このブログ投稿は、ADネットワーク内のクライアントコンピューターが、どのサイトのメンバーであるかを「知る」ことができることを示唆しています。私の質問は、もしそうなら、彼らはどうやってそれを見つけるのですか?

クライアント自体が知らない場合、DCはそのクライアントコンピューターに最も近いADサービスを選択するプロセスでマシンをどのように支援しますか?

回答:


29

答えは、クライアントが初めてActive Directoryに認証するとき、クライアントがどのサイトにいるのかわからないということです。

最初にドメインに参加するとき、クライアントは一般的なDNSおよびLDAPクエリを作成し、ドメイン内のすべてのドメインコントローラーのリストを取得し、リストを下ってLDAPバインドを試行し、バインドする最初の成功したDC-つまり認証する最初のDC。

クライアントがドメインに参加すると、Active Directoryはクライアントに所属サイトを通知します。管理者がAD Sites&ServicesにクライアントのIPサブネットを配置し、サイトに関連付けたため、Active Directoryはこれを認識しています。

Active Directoryは、クライアントにADサイトが何であるかを伝え、クライアントはそれをHKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DynamicSiteNameレジストリ値の独自のレジストリに保存します。そうすれば、クライアントが次に起動するときに、そのサイトにあるDCのみを取得するために、どのサイト固有のDNSクエリを作成するかがわかります。

もちろん、完全な動作はKB247811文書化されていますが、自分で確認したい場合は、WiresharkまたはNetMonを実行してパケットトレースを実行し、トレースの実行中にドメインに参加できます。DNSクエリとLDAPバインドの正確なシーケンスが表示されます。クライアントはADによってどのサイトに属しているかが通知されているため、以降のDNSクエリとLDAPバインドはサイト固有のサブゾーンに対して行われます。

Netlogonサービスは定期的にADサイト情報を更新するため、別のネットワークに移動すると、クライアントは新しいサイトを自動的に取得します。これは、HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\SiteNameTimeoutレジストリ値で調整できます。(リンク


ああ!あなたは私を打ち負かしました!
MDマーラ

4
@MDMarraまれにしか発生しないミスターです。
ライアンリース

好奇心から、ネットログオンチェックは再実行されますか?たとえば、Site1にあるシステムがあり、その後、人と機器をSite2に移動した場合、マシンはSite1を識別し、Site1と通信し続けますか?
ピーターグレース

実際に私はそれを取り戻します。Netlogonは、再起動せずに動的サイト名を更新できます:technet.microsoft.com/en-us/library/cc958488.aspx
Ryan Ries

@RyanRiesを回答テキストに挿入したい場合、それは素晴らしいでしょう。それ以外の場合は、回答を編集してそれを組み込みます。
ピーターグレース

8

実際には、相互に関連するいくつかの機能/ APIがあります。長いものの、実際にはActive Directoryの興味深い読み物です。

以下の説明に関係なく、次の2つの点に注意する必要があります。

  • ローカルサイトのDCが何らかの理由で応答しない場合、クライアントはドメイン内のドメインコントローラーに接続することが予想されます。これは正常な動作であり、常にデフォルトの動作です。なぜそれが発生しているのか明らかでない場合があります。

  • それは次善の策です。次のシナリオを考えてみましょう。3つのサイト:ニューヨーク市(ハブ/データセンター-高速)、ロサンゼルス(NYCに話しました-高速)、カザフスタン(NYCに話しました-間違いなく高速)。LAサイトのクライアントが何らかの理由でローカルDCに接続できない場合、カザフスタンで認証されることは考えられません。

いくつかの解決策があります。どちらかまたは両方を行うことができます。

  • Microsoftは、TryNextClosestSiteという適切な名前のグループポリシー/レジストリ設定を作成しました。つまり、LAクライアントは、DCを探して惑星をローミングする前にNYCを試す必要があります。ブリリアント!8年かかりましたが、ついにVista / 2008でそれを実現しました。既定では有効になっていませんが、これを有効にするにはGPOを作成する必要があります。

  • そのDCが他のサイトのクライアントにサービスを提供することを本当に望まないスポークサイトの場合、登録しないDNSレコードを指定するグループポリシー/レジストリ設定を作成できます。これはDNSニーモニックと呼ばれます。


最も近いサイトでドメインコントローラーを見つける(DsGetSiteName API)
http://technet.microsoft.com/en-us/library/cc978016.aspx

IPアドレスからサイト名へのマッピング

「Net Logonの起動中、各ドメインコントローラーのNet Logonサービスは、構成コンテナー内のサイトオブジェクトを列挙します。各ドメインコントローラーのNet Logonは、サイトオブジェクトに加えられた変更も通知されます。NetLogonは、 IPアドレスをサイト名にマップするために使用されるメモリ内構造。

「ドメインコントローラーを検索しているクライアントがDNSからドメインコントローラーのIPアドレスのリストを受け取ると、クライアントはドメインコントローラーのクエリを開始し、使用可能なドメインコントローラーを見つけます。ActiveDirectoryはクエリをインターセプトします。クライアントのIPアドレス、およびドメインコントローラー上のNet Logonに渡すNet Logonは、クライアントIPアドレスに最も近いサブネットオブジェクトを見つけることにより、サブネットからサイトへのマッピングテーブルでクライアントIPアドレスを検索し、次の情報を返します。

  • クライアントが配置されているサイトの名前、またはクライアントのIPアドレスに最も近いサイトの名前。

  • 現在のドメインコントローラーが配置されているサイトの名前。

  • 見つかったドメインコントローラーがクライアントに最も近いサイトに配置されている(ビットが設定されている)か、配置されていない(ビットが設定されていない)かを示すビット。

「ドメインコントローラーはクライアントに情報を返します。応答には、ドメインコントローラーを説明する他のさまざまな情報も含まれます。クライアントは情報を調べて、より良いドメインコントローラーを見つけるかどうかを判断します。

「返されたドメインコントローラーが最も近いサイトにある場合(返されたビットが設定されている場合)、クライアントはこのドメインコントローラーを使用します。

「クライアントは、ドメインコントローラーがクライアントの位置を主張しているサイトで既にドメインコントローラーを見つけようとした場合、クライアントはこのドメインコントローラーを使用します。

「ドメインコントローラーが最も近いサイトにない場合、クライアントはサイト情報を更新し、サイトで新しいドメインコントローラーを見つけるために新しいDNSクエリを送信します。2番目のクエリが成功すると、新しいドメインコントローラーが使用されます。 2番目のクエリが失敗すると、元のドメインコントローラーが使用されます。

「コンピューターによって照会されているドメインが、コンピューターが参加しているドメインと同じである場合、コンピューターが存在するサイト(ドメインコントローラーによって報告される)はコンピューターレジストリに格納されます。クライアントはこれを格納しますHKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Netlogon \ ParametersのDynamicSiteNameレジストリエントリのサイト名。したがって、DsGetSiteName APIは、コンピューターが配置されているサイトを返します。

DsGetDcName関数
http://msdn.microsoft.com/en-us/library/ms675983%28VS.85%29.aspx

ロケーターの種類
http://technet.microsoft.com/en-us/library/cc978019.aspx

ディレクトリサービス関数
http://technet.microsoft.com/en-us/subscriptions/ms675900%28v=vs.85%29.aspx

Active DirectoryのDNSサポートの仕組み
http://technet.microsoft.com/en-us/library/cc759550%28v=ws.10%29.aspx

クライアントのサイト外にあるドメインコントローラーの場所を最適化する方法
http://support.microsoft.com/kb/306602

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.