DNS 客户端缓存是什么
Windows 客户端会把解析结果缓存起来以减少查询次数,Get-DnsClientCache 就是查看这张表的入口。每条记录包含名称、记录类型、剩余 TTL 与解析结果。它的典型价值有两个:确认“到底解析到了哪个地址”,以及区分“服务器改了记录”和“本机还在用旧缓存”这两种完全不同的问题。
基本信息
| 适用平台 | Windows 8 / Server 2012 及以上(PowerShell DNS 客户端模块) |
|---|---|
| 命令 | Get-DnsClientCache;Get-DnsClientCache -Name 域名 |
| 关键字段 | Entry、RecordName、RecordType、Status、TimeToLive、Data |
| 清除缓存 | Clear-DnsClientCache 或 ipconfig /flushdns |
| 相关服务 | DNS Client(Dnscache,不可禁用) |
典型使用场景
- 解析结果与预期不符:看清本机缓存里对应的记录与剩余 TTL
- 服务器记录已变更:先清缓存再复测,确认是否为缓存问题
- 排查 CNAME/A 记录指向:看字段里解析出的最终地址
- 负缓存干扰:解析失败也会被缓存,导致“明明修好了还是不通”
- 批量巡检:收集多台机器上关键域名的解析结果做一致性核对
常用示例
常用示例
# 按名称过滤(缓存可能有上千条,先过滤)
Get-DnsClientCache | Where-Object Entry -like '*contoso*'
# 精确查某个域名
Get-DnsClientCache -Name intranet.contoso.com
# 看清各字段含义
Get-DnsClientCache -Name intranet.contoso.com | Select-Object Entry, RecordName, RecordType, Status, TimeToLive, Data
# 清除缓存后复测
Clear-DnsClientCache
Resolve-DnsName intranet.contoso.com
# CMD 等价写法
ipconfig /flushdns输出逐列读法
| 字段 | 含义 | 异常表现 |
|---|---|---|
| Entry | 查询的名称 | 与 RecordName 不同说明存在 CNAME 链 |
| RecordType | 记录类型(A/AAAA/CNAME 等) | 类型不符说明查错了记录 |
| Status | 解析状态 | 非成功表示存在负缓存 |
| TimeToLive | 剩余缓存时间(秒) | 接近 0 说明即将刷新 |
| Data | 解析出的地址或目标 | 与预期不符即为问题现场 |
解析失败同样会被缓存,这叫负缓存。表现是 DNS 记录已经修好,客户端却仍然报找不到主机,此时先 Clear-DnsClientCache 再测,能快速排除缓存干扰。
不要只在一台机器上验证解析结果:DHCP 下发的 DNS 服务器、hosts 文件、代理设置都会影响结果。核对多台机器时先确认它们的 DNS 配置一致。
排障时不要长期依赖 hosts 文件“临时解决”。它绕过 DNS 与变更流程,会让问题在其他人机器上持续存在,也常在半年后变成没人敢删的神秘配置。