响应码是分诊台
域名查询的应答里有一个状态字段,它像医院的分诊台一样把问题先分到不同的责任方:正常、域名不存在、服务器处理失败、拒绝服务、报文格式错误,每一种都对应截然不同的下一步动作。很多人排查域名问题卡住,就是因为只看到『查不到』而不看状态码,于是把服务器故障当成域名写错,或者把域名被删除当成网络不通。
基本信息
| 观察位置 | 完整查询输出头部状态字段,简化输出模式下不显示 |
|---|---|
| 常见取值 | 正常、域名不存在、服务器失败、拒绝、报文格式错误 |
| 判断顺序 | 先看状态码定性,再看是哪个服务器返回的,最后看应答内容 |
| 易混概念 | 域名不存在与域名存在但该类型无记录,是两件完全不同的事 |
| 记录要求 | 每个服务器返回的状态码要分开记录,混在一起无法复核 |
状态码判读
| 状态 | 含义 | 常见指向 |
|---|---|---|
| 正常 | 查询被正确处理,可能带回若干条答案 | 无答案时属于该类型记录缺失,不是域名问题 |
| 域名不存在 | 该域名在授权范围内确实不存在 | 域名拼写错误、记录被删除、新域名尚未生效 |
| 服务器失败 | 服务器自身处理查询失败 | 安全扩展校验失败、上游超时、权威服务异常 |
| 拒绝 | 服务器拒绝为该请求服务 | 访问控制限制、向权威索取递归、来源不在白名单 |
| 报文格式错误 | 服务器无法解析请求内容 | 协议扩展不兼容、老旧设备、报文被中途篡改 |
| 空应答 | 域名存在但所问类型没有记录 | 记录类型写错、记录未配置、类型与业务不匹配 |
典型使用场景
- 快速定性:拿到状态码即可判断责任方是本地、上游还是权威
- 区分两种『查不到』:域名不存在与类型缺失的处理方式完全不同
- 验证安全扩展:状态码异常时确认是否由校验失败引起
- 核对权限:看到拒绝时确认是否查错了对象或缺少授权
- 留证交接:把每台服务器返回的状态码一并记录后交由对应方处理
判码与复核
判码与复核
dig example.com | grep -E 'status|ANSWER:|SERVER:' # 状态、答案数与实际应答服务器
dig example.com A @10.0.0.53 | grep status # 内网服务器视角
dig example.com A @8.8.8.8 | grep status # 公共服务器视角
dig example.com +norecurse @10.0.0.53 | grep status # 取消递归请求,看缓存侧态度
dig example.com MX | grep -E 'status|ANSWER:' # 换类型查询,验证是否为类型缺失组合结论
| 现象 | 结论方向 | 下一步 |
|---|---|---|
| 内网返回不存在、公共返回正常 | 内网解析的正向区或条件转发出错 | 核对内网解析服务配置与转发规则 |
| 多台服务器都返回服务器失败 | 上游或权威侧问题 | 直查权威并联系域名管理方 |
| 返回拒绝 | 请求对象或来源不符合授权 | 确认是否向权威索取递归、来源是否在白名单 |
| 返回正常但无答案 | 该类型记录确实缺失 | 核对记录类型与业务需要是否匹配 |
| 状态码与答案内容矛盾 | 存在缓存旧值或中间设备改写 | 逐级查缓存并抓包确认报文 |
排查结论里务必写清『哪台服务器、什么状态码、什么答案』三要素,只写一句『解析不了』会让下游无从下手。
同一域名在不同服务器上出现不同状态码时,优先怀疑本地解析服务与缓存,而不是先怀疑权威。
看到服务器失败就直接重启解析服务会破坏现场:先留存日志与查询证据,再决定是清缓存、查上游还是修配置。