Ubuntu 22.04下如何将特定网站排除在DNS缓存之外(而非完全禁用缓存)
Ubuntu 22.04下如何将特定网站排除在DNS缓存之外(而非完全禁用缓存)
看起来你遇到的是DNS缓存导致的域名解析不一致问题——每次访问特定大学网站都得手动清缓存确实麻烦,下面针对Ubuntu 22.04默认的DNS服务给出可行方案,帮你单独禁用该网站的DNS缓存,不用关掉整个缓存服务:
前提:确认当前DNS缓存服务
Ubuntu 22.04默认使用systemd-resolved作为DNS缓存服务,先确认它在运行:
systemctl status systemd-resolved
如果输出显示"active (running)",就用下面的方案一;如果你的系统用的是dnsmasq(比如部分桌面环境自定义配置),则用方案二。
方案一:针对systemd-resolved配置单个域名不缓存
- 在
/etc/systemd/resolved.conf.d/目录下新建一个自定义配置文件(比如99-university-site-nocache.conf,文件名可以自定义,只要以.conf结尾):
sudo nano /etc/systemd/resolved.conf.d/99-university-site-nocache.conf
- 在文件中添加以下内容(把
your-university-site.com替换成你要排除的大学网站域名):
[Resolve] # 指定要禁用缓存的域名 Domain=your-university-site.com # 对该域名禁用DNS缓存 Cache=no # (可选)如果该网站有指定的DNS服务器,可以在这里添加,比如: # DNS=192.168.1.100
- 保存并退出编辑器(nano里按
Ctrl+O保存,Ctrl+X退出)。 - 重启systemd-resolved服务使配置生效:
sudo systemctl restart systemd-resolved
方案二:针对dnsmasq配置单个域名不缓存
如果你的系统使用dnsmasq作为DNS缓存服务:
- 编辑dnsmasq的主配置文件:
sudo nano /etc/dnsmasq.conf
- 在文件末尾添加一行(替换成目标域名):
no-cache=your-university-site.com
- 保存退出后重启dnsmasq服务:
sudo systemctl restart dnsmasq
验证配置是否生效
你可以先手动清空一次DNS缓存:
# 针对systemd-resolved sudo systemd-resolve --flush-caches # 针对dnsmasq sudo systemctl restart dnsmasq
之后访问目标网站的主域名和带路径的地址,看看是否不用再手动清缓存就能正常访问了。另外,也可以用resolvectl query your-university-site.com查看解析结果,确认缓存是否被禁用。
备注:内容来源于stack exchange,提问作者Thrilla




