web-dev-qa-db-ja.com

LDAPを介して最も近いドメインコントローラーを見つける

私はUnixホストを使用しており、最も近いDCを決定するためのプログラム的な方法を探しています。 Microsoftには優れた 記事 DNSルックアップの実行方法を説明しており、次のように利用可能なDCのリストを簡単に見つけることができます。

Dig -t SRV _ldap._tcp.dc._msdcs.example.com

しかし、最も近いものを見つけることに関して、それは説明します:

クライアントはドメインコントローラーを見つけた後、LDAPを使用してActiveDirectoryにアクセスすることで通信を確立します。そのネゴシエーションの一部として、ドメインコントローラーは、そのクライアントのIPサブネットに基づいて、クライアントが存在するサイトを識別します。クライアントが最も近い(最適な)サイトにないドメインコントローラーと通信している場合、ドメインコントローラーはクライアントのサイトの名前を返します。

これまでのところ、LDAPクエリ中にこれが「クライアントのサイトの名前を返す」場所を見つけることができませんでした。これを取得するために実行する必要がある特定のクエリ、またはドメインに参加していないUnixホストで実行できるその他の手法はありますか?

編集:Simのポインタのおかげで、自分のサイト(この例ではexample.comの一部としての「mysite」)を知ったら、正しいDCを見つける方法を学びました):

Dig -t SRV _ldap._tcp.mysite._sites.dc._msdcs.example.com

しかし、これは私のサイトをどのように決定するかという疑問を残します。繰り返しドキュメントには、接続したDCがこれでうまくいくと書かれていますが、情報がどのように返されるかを示すドキュメントが見つかりません。DNSを送信してみましたDCに直接クエリを実行して、私のサイトを一番上にしてSRVの結果を注文するかどうかを確認しますが、注文しません。

4
Rob Napier

このTechNetの記事では、 最も近いサイトでドメインコントローラーを見つける のロジックについて説明します。

Unixを使用しているので、Sambaがこれをどのように行うかを見ましたか?これはCLDAPで行われているようです。この ブログエントリ-Sambaドメインへの参加 は、さらにいくつかの答えを提供する可能性があります。

3
Sim

Cldapの実装は、このファイル*。/ examples/misc/cldap.plのSambaのソースコードにあります。 。/cldap.pl -d domain -s domaincontrollerで呼び出すだけで、以降のDNSクエリで使用できるSITENAMEを取得できます。 MSDNドキュメント: LDAP Pingに対するドメインコントローラーの応答

1
user33187

アルゴリズム全体は次のようになります

  1. _ldap._tcp.dc._msdcs.example.comを解決します
  2. Rfc-2782に従って1つを選択します
  3. LDAP Pingを送信し、返された場合はクライアントサイトを読み取ります
  4. _ldap._tcp.Client-Site._sites.dc._msdcs.example.comを解決します
  5. Rfc-2782に従って1つを選択します

完了!

LDAPPingは

ldapsearch -H CLDAP://server -b '' -s base '(&(NtVer=\06\00\00\00)(AAC=\00\00\00\00))' netlogon

次に、それをNETLOGON_SAM_LOGON_RESPONSE_EXとして読み取ります。ここを参照してください https://msdn.Microsoft.com/en-us/library/cc223807.aspx

1
esmirnov

まず、ネットワーク上のドメインコントローラーのリストを取得します(最も近い場合とそうでない場合があります)。

nslookup -query=srv _ldap._tcp.example.net.local

次に、それらの1つにクエリを実行して、サブネットに基づいてサイトの名前を見つけることができます。

ldapsearch -H ldap://dc123.example.net.local -b 'CN=Subnets,CN=Sites,CN=Configuration,dc=net,dc=local' '(cn=10.10.10.0/24)' siteObject

IPとサブネットマスクを、最も近いDC)を識別したいマシンの1つに必ず置き換えてください。

次に、そのサイトに属するドメインコントローラーを見つけることができます。

nslookup -query=srv _ldap._tcp.sitename._sites.example.net.local
1
Magnus