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
相关产品推荐
相关产品推荐

