共用方式為


域控制器關閉時,網域成員會失敗驗證

本文修正了當您關閉域控制器 (DC) 時,應用程式無法驗證用戶的問題。

原始 KB 編號: 2683606

徵兆

網域上的應用程式會使用 NT局域網路管理員 (NTLM)Kerberos 來驗證使用者。 有些應用程式有一種模式,用戶端通常會重新連線到應用程式伺服器。

當應用程式使用NTLM時,大部分都會受到影響。 如果 Kerberos 許可權屬性憑證 (PAC) 驗證用於應用程式接受的驗證,則使用 Kerberos 的應用程式也可能會受到影響。 在所有情況下都無法關閉這些驗證。

在此情況下,當您關閉 DC 時,應用程式在 DC 未回應網路之前可能無法驗證使用者,而且網域成員已選取不同的 DC 進行驗證。

在診斷記錄和網路追蹤中,您可能會看到使用者登入錯誤登入失敗,或顯示指定帳戶不存在的錯誤0xc0000064 STATUS_NO_SUCH_USER 如果您使用 Kerberos,您可能會看到錯誤 6,KDC_ERR_C_PRINCIPAL_UNKNOWN

原因

可能會發生兩個問題:

  1. 當 DC 處於關機階段時,通常會告訴目前的用戶端使用另一個 DC 進行驗證,並使用錯誤碼0xc00000dc (STATUS_INVALID_SERVER_STATE) 進行驗證。 發生此問題的程式代碼路徑。

  2. 伺服器不會避免在 Netlogon 使用者數據報通訊協定 (UDP) 查詢上回應新的用戶端。 此外,收到DC關機錯誤的用戶端不會避免在稍後的DC搜尋中選取相同的DC。

當用戶端在關機時選取DC時,NTLM或 Kerberos 要求將會再次失敗。 此時,客戶端會進入負快取模式,且稍後的驗證要求將會失敗。

在 NTLM 的情況下,用戶端是應用程式伺服器,因此在選取工作 DC 之前,它無法接受新的用戶端。

解決方法

若要避免此問題,請先停止DC上的Netlogon服務,再起始關機或重新啟動。 若要將此動作自動化,請在DC的本機關機腳本中輸入停止工作。 若要前往本地組原則,請遵循下列步驟:

  1. 啟動 Gpedit.msc

  2. 開啟 [ 設定 ] 樹狀目錄,然後流覽至:計算機設定 > Windows 設定 > 腳本 > 關機。

  3. 在新的文稿命令列中,輸入 net stop netlogon && net stop kdc

雖然您可以將登錄參數 NegativeCachePeriod 設定為低值,但這項變更不會完全避免問題,因為用戶端會更常尋找替代 DC。

其他相關資訊

在用戶端Netlogon.log中,您會看到它從 DC 收到錯誤碼 STATUS_INVALID_SERVER_STATE

<日期><時間> [CRITICAL] NlPrintRpcDebug: 無法取得 EEInfo I_NetLogonSamLogonEx: 1761 (可能合法0xc00000dc)
<日期><時間> [CRITICAL] <網域>:NlpUserValidateHigher:拒絕狀態後存取:0xc00000dc 0
<日期><時間> [SESSION] <網域>:NlSetStatusClientSession:將聯機狀態設定為 c00000dc
<日期><時間> [SESSION] <網域>:NlSetStatusClientSession:從伺服器 \\<dc-name1> 解除系結。<網域 FQDN> (TCP) 1。

當用戶端嘗試關閉 DC 作為其中一個 DC 時的結果:

<日期><時間> [SESSION] <網域>:NlSessionSetup:嘗試會話設定
<日期><時間> [SESSION] <網域>:NlDiscoverDc:啟動同步探索
<日期><時間> [MISC] NetpDcInitializeContext: DSGETDC_VALID_FLAGS 為 c01ffff1
<日期><時間> [MAILSLOT] NetpDcPingListIp: domain>: <Sent UDP ping to 10.10.103.87
<收到日期><時間> [SESSION] NETLOGON_CONTROL_TC_QUERY函式。
<日期><時間> [MAILSLOT] NetpDcPingListIp: domain>: <Sent UDP ping to 10.10.103.93
<日期><時間> [MAILSLOT] NetpDcPingListIp: domain>: <Sent UDP ping to 10.10.103.92

第二個 Ping 會在關機時傳送至 DC。

DC 會回應,不過它已將錯誤傳回給用戶端:

<日期><時間> [LOGON] HM-REBOOT: SamLogon: 輸入 HM-REBOOT-SRV1 網域<>的可轉移網络登入\test1 (透過 HM-REBOOT-SRV1) 輸入
<日期><時間> [LOGON] HM-REBOOT: SamLogon: 從 HM-REBOOT-SRV1 轉移網域\test1 的網络登入 <>(透過 HM-REBOOT-SRV1) 傳回0xC00000DC
...
<在 UDP LDAP 上從 HM-REBOOT-SRV1 <\domain> (null) 收到 Ping 的日期><時間> [MAILSLOT]
<日期><時間> [MAILSLOT] <網域>:P ing 回應 'Sam Logon Response Ex' (null) 至 \\<member 伺服器> 網站:UDP LDAP 上的 Default-First-Site-Name
<日期><時間> [MAILSLOT] <網域>:P ing 回應 'Sam Logon Response Ex' (null) 至 \\<member 伺服器> 網站:UDP LDAP 上的 Default-First-Site-Name

後續步驟

“NegativeCachePeriod” 的參考: