Windows 上同一域名解析出不同 IP 时,用 Resolve-DnsName 分别向两台 DNS 服务器查询相同的完整域名和记录类型。比较返回的地址、别名、TTL 和错误,再判断差异来自内外网视图、缓存还是查询路径。

适用环境和前提

示例适用于 Windows 11 或 Windows Server 2022、2025 上的 Windows PowerShell 5.1,需要 DnsClient 模块,并能从故障客户端访问要比较的两台 DNS 服务器。本文根据 Microsoft 文档整理,未在目标网络实测。请用实际的完整域名和 DNS 地址替换示例值。内部域名只向获准使用的解析器查询。

先记录故障客户端的 DNS 配置

Get-DnsClientServerAddress | Format-Table InterfaceAlias, AddressFamily, ServerAddresses

同时记录故障是否只发生在连接 VPN 时,以及出问题的客户端使用哪个网络接口。接口列表用于建立对照,应用实际使用的解析路径还可能受 VPN、名称解析策略或应用自己的 DNS 配置影响。

固定域名和记录类型,逐个查询

$fqdn = 'app.example.com.'
$servers = '192.0.2.53', '198.51.100.53'
foreach ($server in $servers) {
    Write-Output "DNS $server"
    Resolve-DnsName -Name $fqdn -Server $server -Type A -DnsOnly -NoHostsFile
}

末尾的点把名称写成完整域名。Server 指定查询服务器,Type A 查询 IPv4 地址。排查 IPv6 时,把两次查询都改成 AAAA。DnsOnly 限定为 DNS 查询,NoHostsFile 跳过 hosts 文件。记录原始输出,保留别名和报错。Microsoft Resolve-DnsName 参数文档。

解释差异并验证业务访问

  1. 两边都返回地址但地址不同,先确认内外网是否设计为返回不同记录,再核对别名目标、DNS 变更时间和缓存。TTL 差异本身不足以确定根因。
  2. 一边返回名称不存在,另一边成功时,向 DNS 管理员核对该服务器能看到的区域或转发路径。一边超时则从故障客户端检查到该服务器的网络路径,并记录查询时间。
  3. 修复后在同一客户端、同一网络下重复两组查询,再按业务域名测试访问。若 DNS 结果符合预期,继续查看实际连接的远端地址和 TCP 结果。

进一步核对 DNS 转发与缓存时,参见 Microsoft DNS 转发验证文档。从解析结果转到端口排查,可参考 用 Test-NetConnection 核对 Windows 端口连通性。