如何在 Windows 中强制 Kerberos 使用 TCP 而不是 UDP

本文介绍如何强制 Kerberos 使用 TCP 而不是 UDP。

原始 KB 数: 244474

总结

Windows Kerberos 身份验证包是 Windows Server 2003、Windows Server 2008 和 Windows Vista 中的默认身份验证包。 它与 NTLM 质询/响应协议共存,在客户端和服务器都可以协商 Kerberos 的实例中使用。 对注释(RFC)1510 的请求指出,当客户端联系 KDC 时,客户端应将用户数据报协议 (UDP) 数据报发送到端口 88(密钥分发中心 (KDC) 的 IP 地址。 KDC 应使用回复数据报响应发送方 IP 地址处的发送端口。 RFC 还表示 UDP 必须是尝试的第一个协议。

注意

RFC 4120 现已过时 RFC 1510。 RFC 4120 指定 KDC 必须接受 TCP 请求,并且应在端口 88(十进制)上侦听此类请求。 默认情况下,Windows Server 2008 和 Windows Vista 将首先尝试使用 TCP 进行 Kerberos,因为 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 测试。 。 。 。 。 。 。 。 。 。 。 :失败 [致命] 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 数据包到达目标无序,则会丢弃碎片化 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. 重新启动计算机。

这是 Windows 2000、XP 和 Server 2003 的解决方案方法。 Windows Vista 和更新版本对 MaxPacketSize 使用默认值为“0”,这也关闭了对 Kerberos 客户端使用 UDP。

以下模板是一个管理模板,可以导入到组策略中,以便为运行 Windows Server 2003、Windows XP 或 Windows 2000 的所有企业计算机设置 MaxPacketSize 值。 若要查看组策略对象编辑器中的 MaxPacketSize 设置,请在“视图”菜单上单击“显示策略”,以便未选择“仅显示策略”。 此模板修改“策略”部分外的注册表项。 默认情况下,组策略对象编辑器不显示这些注册表设置。