如何在 Windows 中強制 Kerberos 使用 TCP,而不是 UDP (部分機器翻譯)

本文說明如何強制 Kerberos 使用 TCP 而非 UDP。

適用於:Windows 10 - 所有版本,Windows Server 2012 R2
原始 KB 編號: 244474

摘要

Windows Kerberos 驗證套件是 Windows Server 2003、Windows Server 2008 和 Windows Vista 中的預設驗證套件。 它與 NTLM 挑戰/回應通訊協定並存,並用於用戶端和伺服器可以交涉 Kerberos 的實例。 RFC) 1510 (批注要求指出用戶端應在用戶端連絡 KDC 時,將使用者數據報協定 (UDP) 數據報傳送至密鑰發佈中心 IP 位址的埠 88 (KDC) 。 KDC 應該以回復數據報回應發件者 IP 位址的傳送埠。 RFC 也會指出 UDP 必須是第一個嘗試的通訊協定。

注意事項

RFC 4120 現在已淘汰 RFC 1510。 RFC 4120 指定 KDC 必須接受 TCP 要求,而且應該在埠 88 上接聽這類要求 (十進位) 。 根據預設,Windows Server 2008 和 Windows Vista 會先針對 Kerberos 嘗試 TCP,因為 MaxPacketSize 預設值現在是 0。 您仍然可以使用 MaxPacketSize 登錄值來覆寫該行為。

UDP 封包大小的限制可能會在網域登入時造成下列錯誤訊息:

事件記錄檔錯誤 5719
來源 NETLOGON

域網域沒有可用的 Windows NT 或 Windows 2000 域控制器。 發生下列錯誤:

目前沒有任何登入伺服器可用來服務登入要求。

此外,Netdiag 工具可能會顯示下列錯誤訊息:

  • 錯誤訊息 1

    DC 清單測試。 . . . . . . . . . . :失敗的 [WARNING] 無法呼叫 DsBind (COMPUTERNAMEDC.domain.com 159.140.176.32) 。 [ERROR_DOMAIN_CONTROLLER_NOT_FOUND]

  • 錯誤訊息 2

    Kerberos 測試。 . . . . . . . . . . :失敗的 [FATAL] Kerberos 沒有 MEMBERSERVER$ 的票證。] 此問題徵兆的 Windows XP 事件記錄檔為 SPNegotiate 40960 和 Kerberos 10。

其他相關資訊

重要事項

這個章節、方法或工作包含修改登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必謹慎地依照這些步驟執行。 為了有多一層保護,請先備份登錄再進行修改。 如此一來,您就可以在發生問題時還原登錄。 如需進一步了解如何備份及還原登錄的相關資訊,請參閱如何在 Windows 中備份及還原登錄

如果您使用 Kerberos 的 UDP,當您收到下列訊息時,用戶端電腦可能會停止回應 (停止回應) :載入您的個人設定。

根據預設,Windows Server 2003 使用 UDP 的數據報封包大小上限為 1,465 個字節。 針對 Windows XP 和 Windows 2000,此上限為 2,000 個字節。 傳輸控制通訊協定 (TCP) 用於大於此最大值的任何數據報表。 修改登錄機碼和值,即可變更使用 UDP 的數據報封包大小上限。

根據預設,Kerberos 會使用無連線 UDP 數據報封包。 根據各種因素,包括安全標識碼 (SID) 歷程記錄和群組成員資格,某些帳戶會有較大的 Kerberos 驗證封包大小。 視虛擬專用網 (VPN) 硬體設定而定,這些較大的封包在通過 VPN 時必須分散。 此問題是由這些大型 UDP Kerberos 封包的片段所造成。 由於 UDP 是無連線通訊協定,因此,如果分散的 UDP 封包依序抵達目的地,則會卸除這些封包。

如果您將 MaxPacketSize 變更為值 1,則會強制用戶端使用 TCP 透過 VPN 通道傳送 Kerberos 流量。 因為 TCP 是以連線為導向,所以它是跨 VPN 通道的更可靠傳輸方式。 即使已卸除封包,伺服器也會重新要求遺漏的數據封包。

您可以將 MaxPacketSize 變更為 1,以強制用戶端透過 TCP 使用 Kerberos 流量。 如果要執行這項操作,請依照下列步驟執行:

  1. 啟動 [登錄編輯程式]。

  2. 找出並選取登錄子機碼:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters

    注意事項

    如果 Parameters 索引鍵不存在,請立即建立它。

  3. [編輯] 功能表中,指向 [新增],然後按一下 [DWORD 值]

  4. 輸入 MaxPacketSize,然後按 ENTER。

  5. 按兩下 MaxPacketSize,在 [值資料] 方塊中輸入1,按兩下以選取 [十進位] 選項,然後按兩下 [確定]

  6. 結束登錄編輯程式。

  7. Restart your computer.

這是 Windows 2000、XP 和 Server 2003 的解決方案方法。 Windows Vista 和更新版本會針對 MaxPacketSize 使用預設值 “0”,這也會關閉 Kerberos 用戶端的 UDP 使用。

下列範本是可匯入 群組原則 的系統管理範本,可讓執行 Windows Server 2003、Windows XP 或 Windows 2000 的所有企業計算機設定 MaxPacketSize 值。 若要在 [物件 編輯器 群組原則 中檢視 MaxPacketSize 設定,請單擊 [檢視] 功能表上的 [僅顯示原則],這樣就不會選取 [僅顯示原則]。 此範本會修改 [原則] 區段外的登錄機碼。 根據預設,群組原則 物件 編輯器 不會顯示這些登錄設定。