Active-Directory

通過 LDAP 查找最近的域控制器

  • November 19, 2021

我在 Unix 主機上,正在尋找一種程式方式來確定最近的 DC。Microsoft 有一篇很好的文章解釋瞭如何執行 DNS 查找,我可以像這樣輕鬆地找到可用 DC 的列表:

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

但關於尋找最接近的,它解釋說:

客戶端找到域控制器後,通過使用 LDAP 建立通信以獲取對 Active Directory 的訪問權限。作為協商的一部分,域控制器根據客戶端的 IP 子網辨識客戶端所在的站點。如果客戶端正在與不在最近(最佳)站點中的域控制器進行通信,則域控制器將返回客戶端站點的名稱。

到目前為止,我還沒有找到在 LDAP 查詢期間“返回客戶端站點名稱”的位置。是否有我應該執行的特定查詢來獲得這個,或者可以在未加入域的 Unix 主機上執行的其他一些技術?

編輯:感謝 Sim 的指導,我學會瞭如何在知道我的網站後找到正確的 DC(在本例中,“mysite”是 example.com 的一部分):

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

但這留下瞭如何確定我的網站的問題。文件一再表明,我連接的任何 DC 都可以為我解決這個問題,但我找不到說明它如何向我返回資訊的文件。我什至嘗試將 DNS 查詢直接發送到 DC 以查看他們是否會在我的站點位於頂部的情況下訂購 SRV 結果,但他們沒有。

如果有幫助,這篇 TechNet 文章將引導您了解在最近的站點中查找域控制器的邏輯。

既然您在 Unix 上,您是否看過 Samba 是如何做到這一點的?看起來這是使用 CLDAP 完成的。此部落格條目 - 加入 Samba 域可能會提供更多答案。

整個算法看起來像

  1. 解決_ldap._tcp.dc._msdcs.example.com
  2. 根據 rfc-2782 選擇一個
  3. 向其發送 LDAP Ping 並讀取客戶端站點(如果返回)
  4. 解決 _ldap._tcp.Client-Site._sites.dc._msdcs.example.com
  5. 根據 rfc-2782 選擇一個

完畢!

LDAP Ping 是

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

引用自:https://serverfault.com/questions/77947