dig +subnet 与 ECS 是什么
EDNS Client Subnet(ECS)允许递归解析器把客户端的网段信息带给权威服务器,权威据此返回就近的 CDN 节点地址。dig 的 +subnet 参数可以模拟指定来源网段发起查询,用来排查『解析结果与地域不符』或『CDN 调度到错误节点』的问题。需要注意:普通递归服务器可能忽略 ECS,得到的结果不代表真实用户的解析值。
基本信息
| 适用平台 | BIND 9 的 dig(+subnet 参数),其他工具支持情况不一 |
|---|---|
| 参数写法 | +subnet=114.114.114.0/24;+subnet=0.0.0.0/0 表示不带 ECS |
| 观察位置 | 应答的 OPT 段中可看到 ECS 信息 |
| 协议依据 | RFC 7871 |
典型使用场景
- CDN 调度异常排查:用不同地域网段查询同一域名,观察返回地址是否变化
- 验证权威是否支持 ECS:对比带与不带 ECS 的返回结果
- 用户投诉解析到远端节点:模拟用户网段复现并保留证据
- 切换 CDN 服务商前的评估:确认新方案是否按地域返回不同地址
- 排障报告取证:把不同网段的返回地址并列,形成可比较的证据
带 ECS 查询
带 ECS 查询
# 模拟某地域来源网段查询
dig +subnet=114.114.114.0/24 example.com @8.8.8.8
# 显式声明不带 ECS,作为对照组
dig +subnet=0.0.0.0/0 example.com @8.8.8.8
# 多个网段并列对比,观察是否返回不同地址
for s in 114.114.114.0/24 223.5.5.0/24 8.8.8.0/24; do printf '%s -> ' $s; dig +subnet=$s +short example.com @8.8.8.8 | head -2; done
# 观察 OPT 段里的 ECS 字段
dig +subnet=114.114.114.0/24 example.com @8.8.8.8 | grep -A2 OPT结果判读
| 观察结果 | 含义 | 下一步 |
|---|---|---|
| 不同网段返回不同地址 | ECS 生效且调度按地域 | 结合业务是否期望该行为判断 |
| 所有网段返回同一地址 | ECS 被忽略或未启用 | 确认解析器与权威是否支持 |
| 返回地址明显偏远 | 调度表配置问题 | 联系 CDN 侧核对调度策略 |
| OPT 段无 ECS 信息 | 查询未携带或未被接受 | 换解析器或直接查权威对照 |
ECS 排查的关键是『同一域名、不同来源网段』的对照:单个查询结果说明不了问题,必须并列多组数据才能判断调度是否按地域生效。
不要仅凭 ECS 查询结果下最终结论:终端侧的实际解析可能被本地策略、加密 DNS 或 hosts 覆盖,最终仍应在用户实际环境中验证。