当 DHCP 服务器停止发送选项 81 时,客户端计算机不会发送 DDNS 更新

本文可帮助解决以下问题:当动态主机配置协议 (DHCP) 服务器停止发送 DHCP 响应的 DHCPREQUEST (REQ) 和 DHCPACK (ACK) 数据包中的客户端完全限定域名 (FQDN) 选项时,Windows 客户端计算机不会发送动态域名系统(DNS)更新的问题。

你有一个 DHCP 服务器,该服务器正在向客户端计算机租用 IP 地址,并且已从 DHCP 服务器端启用选项 81 配置。 选项 81 配置为对传入的 DHCP 客户端请求执行动态 DNS (DDNS) 更新。 使用此配置,DHCP 服务器对客户端执行 DDNS 更新,并始终将 Option 81 发送回客户端。

注意

DHCP 服务器上的配置设置包括:

  • 始终动态更新 DNS 记录
  • 删除租约时放弃 A 和 PTR 记录
  • 动态更新不请求更新的 DHCP 客户端的 DNS 记录(例如运行 Windows NT 4.0 的客户端)

客户端计算机会持续运行并持续执行 REQ-ACK 进程(无需完成 DORA 进程),根据 DHCP 租约时间进行 IP 地址租约扩展。 理想情况下,DHCP 续订的持续时间为 50% 和 87.5%。

注意

DORA 代表发现、套餐、请求和确认。

当 DHCP 服务器停止发送选项 81 时,客户端计算机假定 DHCP 服务器仍在处理 DDNS 更新,并且不会按预期触发更新本身。 即使重启客户端计算机(考虑租约尚未过期),客户端计算机也不会对 REQ-ACK 数据包执行 DDNS 更新。

因此,不会填充 DNS 记录,因为 DHCP 服务器和客户端计算机都不会更新记录。 如果启用了 DNS 清理,可能会删除受影响计算机的记录。

客户端计算机未收到选项 81,并且依赖于缓存

客户端计算机更新并缓存从 ACK 帧内的 DHCP 服务器收到的 DHCP 选项 81 配置。 每次从附加选项 81 的 DHCP 服务器返回 ACK 时,都会进行此更新。 此缓存存储在以下注册表值中:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Interface GUID}\DCHPInterfaceOptions

重要

不要对此注册表进行任何更改,因为注册表包含不应手动更改的信息。

客户端计算机未收到选项 81,因此它没有任何内容可以更新,完全依赖于缓存。

客户端计算机需要执行完整的 DORA 过程

若要解决此问题,客户端计算机需要执行完整的 DORA 进程来更新缓存。 DORA 进程可以通过以下方法之一启动:

  • 使客户端计算机的 IP 地址过期。 例如,关闭操作系统的租约持续时间。
  • ipconfig /release在计算机上运行命令ipconfig /renew
  • 运行脚本,将设备设置为使用 ipconfig /registerdns 命令手动注册 DNS。

诊断和日志收集

若要确定遇到此问题,请执行以下步骤:

  1. 在有问题的客户端计算机上,在事件查看器中启用以下事件日志:

    应用程序和服务日志>Microsoft>Windows>Dhcp 客户端>Microsoft-Windows-DHCP 客户端事件/操作

  2. 启用后,打开提升的命令提示符窗口并运行以下命令:

    ipconfig /renew
    

    然后,某些事件将在 Dhcp-Client>Microsoft-Windows-DHCP 客户端事件/操作生成。

  3. 搜索任务类别为 DNS 状态事件的事件 ID 50042。 此事件提供 DNS 标志值。

  4. 如果 DNS 标志值设置为 64,则表示客户端计算机不会发送动态更新本身,而是依赖于 DHCP 服务器。

    当 DHCP 服务器未发送回选项 81 时,注册表缓存可能会导致值 64。

    在某些情况下,值 64 也可能指示 DHCP 服务器使用选项 81 进行响应,这会替代客户端选项:

    显示 DHCP 服务器响应的选项 81(覆盖客户端选项)的屏幕截图。

    本文修复了缓存而不是 DHCP 服务器响应导致值 64 的问题。

收集跟踪日志

若要诊断问题,请使用 netsh

  1. 打开提升的 Windows 命令提示符。

  2. 运行以下命令启动网络跟踪:

    Netsh trace start overwrite=yes persistent=yes traceFile=C:\DDNSTrace.etl capture=yes report=disabled maxSize=16000 provider={1C95126E-7EEA-49A9-A3FE-A378B03DDB4D} keywords=0xffffffffffffffff level=0xff provider= {1540FF4C-3FD7-4BBA-9938-1D1BF31573A7} keywords=0xffffffffffffffff level=0xff provider= {9CA335ED-C0A6-4B4D-B084-9C9B5143AFF0} keywords=0xffffffffffffffff level=0xff provider= {609151DD-04F5-4DA7-974C-FC6947EAA323} keywords=0xffffffffffffffff level=0xff provider= {76325CAB-83BD-449E-AD45-A6D35F26BFAE} keywords=0xffffffffffffffff level=0xff provider={A7B8B859-D00E-45CC-85B8-89EA5D015C62} keywords=0xffffffffffffffff level=0xff provider={CFAA5446-C6C4-4F5C-866F-31C9B55B962D} keywords=0xffffffffffffffff level=0xff provider={CA030134-54CD-4130-9177-DAE76A3C5791} keywords=0xffffffffffffffff level=0xff provider="Microsoft-Windows-DNS-Client" keywords=0xffffffffffffffff level=0xff provider="Microsoft-Windows-Dhcp-Client" keywords=0xffffffffffffffff level=0xff provider={CC3DF8E3-4111-48d0-9B21-7631021F7CA6} keywords=0xffffffffffffffff level=0xff
    
  3. 运行下面的命令:

    ipconfig /renew
    
  4. 运行以下命令停止网络跟踪:

    netsh trace stop