⏱️ DNS 缓存与老化

DNS 服务器 · 第 8 篇 · 适用于 Windows Server 2019 / 2022 / 2025

1. DNS 缓存机制

DNS 缓存是提高解析性能的核心机制,可以显著减少重复查询,提升响应速度。

1.1 缓存类型

1.2 TTL 值

TTL(Time To Live)是 DNS 记录的生存时间,告诉缓存服务器可以缓存多长时间。值越小,变化传播越快;值越大,缓存命中率越高。

2. DNS 服务器缓存管理

1

DNS 管理器 → 展开服务器 → 缓存查找(如果有)

2

右键 DNS 服务器 → 清除缓存,清除 DNS 服务器内存中的所有缓存记录

3

右键 DNS 服务器 → 属性高级选项卡,可以设置缓存大小最大缓存 TTL

PowerShell - DNS 服务器缓存管理
# 查看 DNS 服务器缓存设置
Get-DnsServerCache

# 清除 DNS 服务器缓存(清除所有缓存的查询结果)
Clear-DnsServerCache -Force

# 设置最大缓存 TTL 为 1 天(86400 秒)
Set-DnsServerCache -MaxCacheTtl 86400

# 设置最小缓存 TTL(避免缓存过期的负向答案)为 15 分钟
Set-DnsServerCache -MinCacheTtl 900

# 启用积极的缓存(存储更多查询结果)
Set-DnsServerCache -MaxCacheSize 4GB

3. 客户端缓存管理

CMD / PowerShell - 客户端缓存
# CMD 显示本地 DNS 缓存
ipconfig /displaydns

# CMD 清除本地 DNS 缓存
ipconfig /flushdns

# PowerShell 清除本地 DNS 缓存
Clear-DnsClientCache

# 查看客户端 DNS 配置
Get-DnsClientServerAddress

4. DNS 老化 Scavenging

DNS 老化(Scavenging)是自动清理过期 DNS 记录的过程。长时间运行的网络中,很多计算机早已离网但 DNS 记录仍然存在,这些"僵尸记录"会占用空间并造成解析混乱。

4.1 关键参数

1

DNS 管理器 → 右键 DNS 服务器 → 属性

2

切换到高级选项卡,勾选启用 DNS 老化自动清理

3

点击老化按钮,设置刷新间隔(如 168 小时=7天)和无刷新间隔(如 24 小时)

4

右键区域 → 属性常规 → 点击老化按钮,为区域启用老化清理

5

或者通过任务计划程序定期运行 dnscmd /StartScavenging 进行手动清理

PowerShell - 老化配置
# 在 DNS 服务器级别启用老化,设置清理间隔为 7 天(168 小时)
Set-DnsServerScavenging `
    -ScavengingState $true `
    -ScavengeInterval "168:00:00"

# 在区域级别启用老化
Set-DnsServerZoneAging `
    -Name "iehang.cn" `
    -Aging $true `
    -RefreshInterval "168:00:00" `
    -NoRefreshInterval "24:00:00"

# 查看老化设置
Get-DnsServerZoneAging -Name "iehang.cn"

# 查看哪些记录即将过期
Get-DnsServerResourceRecord -ZoneName "iehang.cn" `
    | Where-Object {$_.TimeStamp -ne $null}

# 手动运行老化清理
Start-DnsServerScavenging

5. 常见问题

Q1:启用老化后记录被意外删除

确保无刷新间隔足够长(建议至少 24 小时),给予静态配置的设备(如打印机、共享器)时间注册。老化只清理有过期时间戳的记录,自动注册的记录会持续刷新。

Q2:客户端记录 TTL 已经过期但没有被清理

确认服务器级别和区域级别都已启用老化:Get-DnsServerScavengingGet-DnsServerZoneAging。检查老化扫描时间间隔是否已过。