插件窝 干货文章 如何在Ubuntu上查看和刷新DNS缓存?

如何在Ubuntu上查看和刷新DNS缓存?

缓存 sudo bash systemd 659    来源:    2025-05-11

在 Ubuntu 上查看和刷新 DNS 缓存的方法取决于系统使用的 DNS 解析服务。以下是不同场景下的操作指南:


一、查看 DNS 缓存

1. 如果使用 systemd-resolved(Ubuntu 默认服务)

bash sudo systemd-resolve --statistics 或查看完整缓存记录: bash sudo journalctl -u systemd-resolved --no-pager | grep "Cache entry"

2. 如果使用 dnsmasq(常见于桌面版或手动安装)

bash sudo cat /var/cache/dnsmasq/dnsmasq_dnssec.log

3. 其他工具(如 nscd

bash sudo strings /var/cache/nscd/hosts


二、刷新 DNS 缓存

1. 刷新 systemd-resolved 缓存

bash sudo systemd-resolve --flush-caches 验证是否生效: bash sudo systemd-resolve --statistics | grep "Current Cache Size"

2. 刷新 dnsmasq 缓存

bash sudo systemctl restart dnsmasq

3. 刷新 nscd 缓存

bash sudo systemctl restart nscd

4. 通用方法(强制所有应用重新查询)

bash sudo /etc/init.d/networking restart 或仅针对 NetworkManager: bash sudo nmcli networking off && sudo nmcli networking on


三、验证 DNS 缓存是否刷新

使用 dignslookup 测试域名解析,观察查询时间:

dig example.com | grep "Query time"

首次查询后再次执行,若 Query time 显著降低,则可能仍有缓存。


注意事项

  1. 权限要求:所有命令需 sudo 权限。
  2. 服务确认:先检查实际运行的 DNS 服务: bash sudo systemctl status systemd-resolved dnsmasq nscd
  3. 临时禁用 IPv6:若遇到解析问题,可尝试: bash echo "precedence ::ffff:0:0/96 100" | sudo tee -a /etc/gai.conf

根据你的系统配置选择对应方法即可。