You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04 DNS缓存异常问题求助:默认DNS缓存如何选择解析源?

Ubuntu 22.04 DNS缓存异常问题求助:默认DNS缓存如何选择解析源?

各位好,我最近在Ubuntu 22.04上碰到了DNS缓存相关的麻烦事儿,想跟大家请教下。

背景情况

我自己搭建了内部域名环境,跑着一台BIND DNS服务器,既负责解析内网里的75台主机,也做外网域名的缓存解析(虽说现在这提升的速度远不如20年前明显)。

对普通用户来说,DNS缓存是为了减轻ISP DNS服务器的负载,但对我这种需要内网所有主机都能通过域名访问的人来说,必须保证所有DNS查询都能正确指向我的内部DNS才行。我用autofs搭配NFS自动挂载音乐、视频、照片这些存储卷,要是用IP管理太麻烦,维护75台机器的/etc/hosts根本不现实,所以域名解析必须靠谱。

遇到的具体问题

最近多次出现NFS自动挂载失效的情况,查nslookup发现本地运行的DNS缓存里根本没有我内网服务器的记录。我试过不少方案:

  • 尝试配置让本地缓存依赖我的内网DNS(192.168.20.10),完全没用;
  • 手动修改/etc/resolv.conf然后设为 immutable,但因为它是软链接,改完没多久就被NetworkManager改回去了。

临时解决脚本

最后我写了个脚本暂时解决了问题,但这显然不是根本办法:

#!/bin/bash

[[ $(id -u) -ne 0 ]] && echo "This must run as root" && exit

systemctl disable systemd-resolved.service

systemctl stop systemd-resolved

grep "dns=none" /etc/NetworkManager/NetworkManager.conf || sed -i '/\[main\]/a dns=none' /etc/NetworkManager/NetworkManager.conf

rm /etc/resolv.conf

printf "nameserver 192.168.20.10\nsearch mydomain.prv\n" > /etc/resolv.conf

chattr +i /etc/resolv.conf

这个脚本确实能让DNS查询直接指向我的内网服务器,但我还是想搞清楚根本问题:为什么DNS缓存一开始能正常用我的内网DNS,过段时间就会绕过它,只解析外网域名?

核心疑问

这里想请教大家几个关键点:

  • Ubuntu 22.04默认用的是哪个DNS缓存服务?我看到有人说是dnscache,但我系统里没这个命令;倒是有dnsmasq,会不会是它?
  • 默认DNS缓存是怎么选择解析源的?我试过在netplan里添加DNS服务器,但没效果;
  • 我的系统是从18.04升级到22.04的,会不会是升级遗留的“垃圾文件”导致的问题?

其实我完全可以接受用本地DNS缓存,只要它能始终依赖我的内网DNS服务器就行,但找了好久都没找到靠谱的配置方法。现在只能先用这个脚本顶着,但还是希望能彻底解决问题,让系统正常工作。

备注:内容来源于stack exchange,提问作者George H. Lenzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:39:13