1. DNS 缓存机制
DNS 缓存是提高解析性能的核心机制,可以显著减少重复查询,提升响应速度。
1.1 缓存类型
- DNS 服务器缓存:DNS 服务器存储的查询结果(TTL 时间内有效),减少重复向上游查询
- 客户端缓存:操作系统 DNS 解析器缓存(通常保留几分钟到几小时)
- 浏览器缓存:现代浏览器的独立 DNS 缓存
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 关键参数
- 刷新间隔:DNS 服务器检查区域是否有更新的时间间隔
- 无刷新间隔:记录创建后不允许更新的时间(防止频繁刷新)
- 最小 TTL:记录的 TTL 不得低于此值
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-DnsServerScavenging 和 Get-DnsServerZoneAging。检查老化扫描时间间隔是否已过。