内网域名无法解析但公网正常,说明DNS服务运行正常,问题在于内网解析路径或配置:需检查/etc/resolv.conf是否指向内网DNS、systemd-resolved或NetworkManager是否接管、直连测试内网DNS响应与记录、排查/etc/nsswitch.conf和/etc/hosts干扰、清除缓存,并验证内网DNS服务端zone配置与日志。

内网域名无法解析,但公网域名正常,说明DNS服务本身在运行,问题出在内网域名的解析路径或配置上。核心思路是:确认请求是否发到了正确的内网DNS、该DNS是否持有对应记录、有没有被缓存或覆盖干扰。
检查 /etc/resolv.conf 是否指向内网 DNS
执行 cat /etc/resolv.conf,看 nameserver 是否为你的内网 DNS 地址(如 10.1.1.10 或 192.168.5.5)。如果显示的是 127.0.0.53 或 8.8.8.8,那请求根本没到内网 DNS。
再运行 ls -l /etc/resolv.conf:若为软链接(如指向 /run/systemd/resolve/stub-resolv.conf),说明 systemd-resolved 在接管,需用 resolvectl status 查看实际生效的 DNS;若指向 /var/run/NetworkManager/resolv.conf,则由 NetworkManager 管理,应通过 nmcli 修改连接的 DNS 设置,而非直接改文件。
验证内网 DNS 是否响应且有记录
绕过本地 resolver,直连测试:
- dig @10.1.1.10 host.internal.example +short —— 若无返回,说明该 DNS 没配这条记录,或 zone 未加载
- dig @10.1.1.10 host.internal.example NS —— 查看权威服务器是否指向你预期的内网 DNS
- nslookup host.internal.example 10.1.1.10 —— 看是否超时:超时说明网络不通或端口被拦;无结果说明 DNS 服务运行但无记录
排查本地干扰项
内网域名容易被以下几类配置“劫持”或跳过:
- /etc/nsswitch.conf 中 hosts: 行是否含 files 且排在 dns 前?若有 host.internal 条目误写进 /etc/hosts,会直接命中,不再查 DNS
- systemd-resolved 默认启用缓存,执行 resolvectl flush-caches 清除后重试
- 某些环境会把内网域名加到 search 列表(如 search internal.example),此时查 host 会自动补全为 host.internal.example —— 但若 search 配错,反而导致拼接错误
确认内网 DNS 自身配置是否完整
登录内网 DNS 服务器(如 BIND)检查:
- named.conf 中是否正确定义了 internal.example 的 zone,并指向正确的 db 文件
- db 文件里是否有对应 A 记录,SOA 序列号是否已更新(修改后需 reload 或 increment serial)
- 执行 named-checkzone internal.example /etc/bind/zones/db.internal.example 验证语法
- 查看日志:journalctl -u bind9 -n 50 --no-pager,找拒绝查询或加载失败线索


















