当启用了 DAI 的网络设备与 Windows Server 2012 R2 中的 DHCP 故障转移一起使用时,DHCP 客户端将被阻止

本文提供了一种解决方法,说明在启用 DAI 的网络设备与 Windows Server 2012 服务器上的 DHCP 故障转移一起使用时,DHCP 客户端被阻止的问题。

原始 KB 数: 2978225

现象

假设出现了下面这种情景:

  • 使用运行 Windows Server 2012 R2 的服务器部署动态主机配置协议(DHCP)故障转移。
  • 在此环境中,你将部署一对主动-主动(重复)DHCP 中继代理。
  • DHCP 探查和动态 ARP 检查(DAI)在网络设备上启用,例如交换机。

在此方案中,DHCP 客户端被阻止并遇到其他网络问题。

原因

之所以出现此问题,是因为重复的 DHCP 中继代理会导致 DHCP 服务器始终接收连接到网络的每个客户端的重复 DHCP 消息。 对于这两个 DHCP 请求,启用 DHCP 故障转移的服务器会发送到客户端不同的 ACK 消息,这些消息具有不同的租约持续时间值。 这会导致一个争用条件,即客户端接受接收的第一个值并忽略第二个值。 但是,DAI 遵循第二个值。 这会创建租约不匹配,并导致 DAI 阻止客户端访问网络。

解决方法

若要解决此问题,请使用以下方法之一:

  • 防止重复的 DHCP 请求。 为此,请使用以下选项之一:

    • 删除第二个 DHCP 中继代理。
    • 在主动-被动模式下操作 DHCP 中继代理。 为此,如果路由器冗余协议为 HSRP,请使用虚拟路由器组。
  • 配置 DAI,使其遵循第一个 DHCP 租约持续时间值(尽可能)。

  • 如果无法将 DAI 配置为遵循第一个租约持续时间值,请关闭或删除导致冲突的 DAI 功能。

  • 不要将 DHCP 故障转移与两个中继代理和开关上的 DAI 结合使用。

详细信息

为了提供冗余,某些组织更喜欢配置双中继(每个路由器指向两个 DHCP 服务器)。 使用虚拟路由器冗余协议(VRRP)时,此配置很常见。

在使用一个 IP 地址的典型 VRRP 配置中,一个路由器被指定为“活动”设备,另一个路由器设置为“备用”模式。 检测信号在路由器之间交换。 如果活动路由器未响应,备用路由器将接管共享 IP 地址。

DHCP 窃听使交换机设备能够检查 DHCP 流量,并跟踪分配给哪个主机交换机端口的 IP 地址。 此信息对 DAI 非常有用。 DHCP 租约持续时间到期后,流量信息就会从设备数据库中删除。 然后,已启用 DAI 的交换机将阻止端口。

Windows Server 2012 服务器上的 DHCP 故障转移无法保证重复 DHCP 请求的租约持续时间一致。 此行为是特意这样设计的。 这是因为 DHCP 服务器可能会发出最大客户端潜在顾客时间(MCLT)或范围租约持续时间值,具体取决于以下情况:

  • 收到第一个请求后,DHCP 服务器会发送包含 MCLT 租约持续时间值的 ACK,然后再尝试与合作伙伴同步。 这也称为延迟更新。

  • 如果同步响应在重复请求之前到达,DHCP 服务器会认为其合作伙伴是最新的。 然后,它会发送包含作用域租约持续时间值的 ACK。 这是正常行为。

  • 如果重复请求在同步响应之前到达,则会发生“原因部分中所述的争用条件。 在这种情况下,DHCP 服务器会将其合作伙伴视为不同步。这会导致第二个 ACK 使用 MCLT 租约持续时间值。 无法阻止发送重复的 DHCP ACK 消息。 这是因为 Windows Server 2012 服务器上的 DHCP 故障转移始终通过为每个 DHCP 请求发送一个 DHCP ACK 来响应,即使 DHCP 请求具有相同的事务 ID。 此行为是特意这样设计的。

其他信息

  • DHCP 事务 ID 是客户端将已发送的消息与收到的消息相关联的方法。 RFC 并不表示服务器应基于事务 ID 删除消息。

  • 目前,我们认为,根据 RFC 2131 中提供的事务 ID 的以下定义,不保证设计更改:

    xid 4
    事务 ID 是客户端选择的随机数,由客户端和服务器用来关联客户端和服务器之间的消息和响应。