问题出现得很突然,日志倒是留得挺全。公司内网访问 git.corp.example.com 解析到 203.0.113.20 这个公网地址,流量绕出去再回来,内网直连的 10.0.5.30 反而闲置,抓包能看到请求从公网出口出去又被防火墙挡回。
刚开始盯着「客户端缓存了旧的公网解析,TTL 还没到期」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。内网 DNS 上没有这条记录,递归查询拿到的就是公网权威的 A 记录。另一种情况是权威区里同时存在内外网两条 A,视图没按来源网段匹配。
另外,内网 DNS 把 corp 域也转发到公网,没有配条件转发。
上来先确认答案来自哪台服务器
dig git.corp.example.com | grep -E 'SERVER|ANSWER SECTION' -A2
直接问内网 DNS 有没有内网记录
dig +short git.corp.example.com @10.0.0.2
然后在 BIND 里补一个内网视图
grep -n -A6 'view "internal"' /etc/named.conf && named-checkconf -z /etc/named.conf
末了清掉客户端缓存再验证
resolvectl flush-caches 2>/dev/null || systemd-resolve --flush-caches
别只看报错消失,验证要多做一步。内网机器解析 git.corp.example.com 得到 10.0.5.30,抓包里不再有公网出口的往返,页面打开时间明显下降。
补一句。双视图要保证内网视图里包含全部内网域名,漏一条就回落到公网;改完先 dig 加 @ 指定服务器验证,别被本地缓存骗了。这类问题最好一次改到位,反复小改反而容易把原因搅混。
