私は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の結果を注文するかどうかを確認しますが、注文しません。
このTechNetの記事では、 最も近いサイトでドメインコントローラーを見つける のロジックについて説明します。
Unixを使用しているので、Sambaがこれをどのように行うかを見ましたか?これはCLDAPで行われているようです。この ブログエントリ-Sambaドメインへの参加 は、さらにいくつかの答えを提供する可能性があります。
Cldapの実装は、このファイル*。/ examples/misc/cldap.plのSambaのソースコードにあります。 。/cldap.pl -d domain -s domaincontrollerで呼び出すだけで、以降のDNSクエリで使用できるSITENAMEを取得できます。 MSDNドキュメント: LDAP Pingに対するドメインコントローラーの応答
アルゴリズム全体は次のようになります
完了!
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
まず、ネットワーク上のドメインコントローラーのリストを取得します(最も近い場合とそうでない場合があります)。
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