内外网解析不一致是什么
同一域名在内网解析到私网地址、在外网解析到公网地址,这是常见且合理的设计(Split Horizon,又称分裂视图)。它的实现方式有视图(view)、条件转发或内外两套独立 DNS。排查时第一步不是断定『解析错了』,而是先确认这条不一致是不是设计使然,再去追哪一侧视图或转发配置缺了记录。
基本信息
| 常见实现 | BIND view + match-clients、条件转发 zone、内外两套独立服务器 |
|---|---|
| 取证方式 | 分别指定内网 DNS 与公网 DNS 查询同一域名并对比 |
| 典型故障 | 新建记录只加到一侧视图,导致内网或外网用户解析失败 |
| 变更要求 | 改动前先画出『哪张视图管哪些客户端』 |
典型使用场景
- 内网用户访问自家站点绕行公网:确认内网视图是否缺少 A 记录
- 安全组只放行内网地址:外网解析到的公网地址被拒,表现为『部分人打不开』
- 新增子域上线:内外两侧视图都要加记录,漏一侧即出现单向不可用
- 云上混合架构:VPC 内 DNS 与自建 DNS 解析结果不一致时做对照取证
双向取证
双向取证
# 内网视角
dig +short app.example.com @10.0.0.53
# 外网视角
dig +short app.example.com @8.8.8.8
# 逐台内网 DNS 对照,确认多台解析器视图是否一致
dig +short app.example.com @10.0.0.54
# 若内网 DNS 采用转发而非视图,检查条件转发 zone 配置是否指向正确的上游BIND 视图配置片段
BIND 视图配置片段
view "internal" {
match-clients { 10.0.0.0/8; 192.168.0.0/16; };
recursion yes;
zone "example.com" { type master; file "/etc/bind/db.example.com.internal"; };
};
view "external" {
match-clients { any; };
recursion no;
zone "example.com" { type master; file "/etc/bind/db.example.com.external"; };
};不一致来源对照
| 来源 | 表现 | 处置方向 |
|---|---|---|
| 视图缺记录 | 内网解析不出或指向旧地址 | 补齐对应视图的 zone 文件并递增序列号 |
| 条件转发错配 | 内网 DNS 把查询转给公网权威 | 核对 forwarders 与 forward zone 范围 |
| 缓存未过期 | 改完仍在返回旧地址 | 等 TTL 过期或在内网 DNS 上清理缓存 |
| 客户端越过内网 DNS | 个别终端结果与预期不同 | 检查终端 DNS 设置与加密 DNS 功能是否开启 |
最常见的漏配模式是『新建子域只加了外网视图』:内部用户解析失败,外部用户正常。变更前把视图与客户端网段的对应关系写清楚,能避免这类一半可用的问题。
排障时不要拿公网解析结果去解释内网现象,也不要用内网结果去解释外部用户投诉;两个视角必须分别取证,混用会得出完全错误的结论。