关键看三点:本地dns是否对外提供递归服务、是否有异常高频查询、日志中是否存在大量外部ip请求;需禁用递归、清空根提示、配置防火墙acl限制53端口、启用调试日志审计,并用dns策略“递归范围”实现子网级控制。

直接查递归是否被滥用,关键看三点:本地 DNS 是否对外提供递归服务、是否有异常高频查询、日志里有没有大量来自外部 IP 的请求。
确认递归是否实际关闭
Windows Server 默认开启递归,但仅靠勾选“禁用递归”还不够,必须验证是否真正生效:
- 打开 DNS 管理器 → 右键服务器 → “属性” → “高级” → 勾选“禁用递归(也禁用循环查找)”
- 切换到“根提示”选项卡,清空所有 IP —— 否则禁用后仍可能回退查询
- 执行 net stop dns && net start dns 重启服务
- 在服务器本地运行:nslookup -type=soa example.com 127.0.0.1,应返回 “Query refused” 或超时;若返回 SOA 记录,说明递归仍在运行
检查防火墙是否限制了 53 端口访问
DNS 服务本身不支持细粒度 ACL,必须依赖系统防火墙做源头控制:
- 只允许内网可信子网(如 192.168.10.0/24、10.20.30.0/24)的 UDP/TCP 53 入站请求
- 拒绝所有其他来源,尤其是公网 IP 段(0.0.0.0/0)
- 注意:不能用“转发器”替代递归关闭——转发器不校验源 IP,外部请求仍可穿透
分析调试日志识别可疑行为
启用 DNS 调试日志是发现隐蔽滥用的关键手段:
- 在 DNS 管理器 → 服务器属性 → “调试日志”选项卡中,勾选“查询”和“拒绝”,指定独立日志路径
- 重点排查:同一外部 IP 在短时间内发起大量 A/AAAA 查询,尤其域名含随机子域(如 abc123.example.com)、长字符串或非常规后缀
- 用 PowerShell 快速提取 Top 10 异常客户端:
Get-WinEvent -LogName "DNS Server" | Where-Object {$_.Id -eq 257} | Group-Object -Property @{e={$_.Properties[1].Value}} | Sort-Object Count -Descending | Select-Object -First 10
验证业务是否因递归策略误配而中断
有些故障表面是应用报错,根源却是 DNS 递归被误关或误开:
- 当 OAuth 回调失败、证书校验超时、第三方 API 连接异常时,先在业务服务器上对比测试:
nslookup api.thirdparty.com 127.0.0.1 vs nslookup api.thirdparty.com 8.8.8.8 - 若前者失败后者成功,说明本地 DNS 递归策略有问题 —— 可能是全关没留内网白名单,或防火墙规则误拦了业务子网
- 如需为不同子网差异化控制(如办公网可递归、生产网不可),应使用 DNS 策略中的“递归范围”,而非全局开关











