本文修正了當您關閉域控制器 (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。
原因
可能會發生兩個問題:
當 DC 處於關機階段時,通常會告訴目前的用戶端使用另一個 DC 進行驗證,並使用錯誤碼0xc00000dc (STATUS_INVALID_SERVER_STATE) 進行驗證。 發生此問題的程式代碼路徑。
伺服器不會避免在 Netlogon 使用者數據報通訊協定 (UDP) 查詢上回應新的用戶端。 此外,收到DC關機錯誤的用戶端不會避免在稍後的DC搜尋中選取相同的DC。
當用戶端在關機時選取DC時,NTLM或 Kerberos 要求將會再次失敗。 此時,客戶端會進入負快取模式,且稍後的驗證要求將會失敗。
在 NTLM 的情況下,用戶端是應用程式伺服器,因此在選取工作 DC 之前,它無法接受新的用戶端。
解決方法
若要避免此問題,請先停止DC上的Netlogon服務,再起始關機或重新啟動。 若要將此動作自動化,請在DC的本機關機腳本中輸入停止工作。 若要前往本地組原則,請遵循下列步驟:
啟動 Gpedit.msc
開啟 [ 設定 ] 樹狀目錄,然後流覽至:計算機設定 > Windows 設定 > 腳本 > 關機。
在新的文稿命令列中,輸入
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” 的參考: