DNS 服务器日志排查是什么
『部分客户端解析失败』这类问题靠推断很难收敛,打开查询日志就能直接看到谁问了什么、得到什么结果。BIND 用 rndc querylog 临时开启查询日志,Unbound 调高 verbosity,dnsmasq 用 log-queries,systemd-resolved 则看 journal。查询日志信息密度高、见效快,但涉及内部主机名与访问轨迹,属于敏感数据,排查结束必须立即关闭并按规定清理。
基本信息
| 适用平台 | Linux 与常见 DNS 软件(BIND、Unbound、dnsmasq、systemd-resolved) |
|---|---|
| 开关方式 | rndc querylog、verbosity、log-queries 配置项 |
| 查看位置 | DNS 软件自己的日志文件或 journalctl |
| 数据属性 | 含内部主机名与访问轨迹,属敏感数据 |
典型使用场景
- 部分客户端解析异常:对照日志确认请求是否到达服务器、返回什么 rcode
- 解析被策略拦截:确认是客户端没发查询,还是服务器返回了拒绝
- 定位异常查询源:找出大量无效查询或扫描行为来自哪台主机
- 验证变更是否生效:改完记录后看新查询返回是否已更新
- 排障收尾:关闭日志并归档必要的片段作为证据
临时开启与查看
临时开启与查看
# BIND:开启查询日志,排查完成记得关闭
rndc querylog on
# 排查结束后关闭
rndc querylog off
# Unbound:提高日志级别并实时观察
unbound-control verbosity 2
journalctl -u unbound -f
# dnsmasq:需在配置中加 log-queries 后重启,再观察日志
journalctl -u dnsmasq -f
# systemd-resolved
journalctl -u systemd-resolved -f日志内容判读
| 日志信息 | 含义 | 下一步 |
|---|---|---|
| 查询记录无对应条目 | 请求未到达该服务器 | 检查客户端指向与网络路径 |
| 返回 NXDOMAIN | 域名或记录不存在 | 核对记录与视图配置 |
| 返回 REFUSED | ACL 或策略拒绝 | 检查 allow-query 与来源限制 |
| 查询量异常放大 | 可能扫描或有程序异常重试 | 定位来源并评估限速 |
排查完立刻关闭查询日志:忘记关闭是最常见的问题,既占用磁盘又长期留下敏感记录,还可能在合规检查中被判定为数据留存不当。
在高 QPS 的解析器上长期开启查询日志会同时压垮磁盘与 I/O 性能:只开几分钟、只针对必要的时间窗,是最稳妥的做法。