为什么需要刷新DNS缓存?
DNS缓存存储了域名与IP的映射关系,加速访问速度,但以下情况需手动刷新:
- 域名解析错误:网站迁移服务器后IP变更,缓存未更新。
- 修改本地DNS配置:如更改
/etc/hosts
或DNS服务器地址。 - 网络安全需求:清除可能被污染的缓存记录。
不同系统环境的刷新方法
根据使用的DNS解析服务选择对应命令:
Systemd-Resolved(Ubuntu 18.04+、Fedora、Debian 10+)
sudo systemd-resolve --flush-caches # 清除缓存 sudo systemd-resolve --statistics # 验证:查看"Current Cache Size"是否为0
DNSMasq(OpenWRT、部分Ubuntu定制版)
sudo systemctl restart dnsmasq # 重启服务(自动清除缓存)sudo killall -HUP dnsmasq # 重载配置并清缓存
NSCD(Name Service Caching Daemon)
sudo systemctl restart nscd # 重启服务 # 或直接清除缓存文件 sudo rm -f /var/cache/nscd/hosts && sudo nscd -i hosts
NetworkManager(图形界面常用)
sudo nmcli general reload dns # 重载DNS配置 # 重启NetworkManager sudo systemctl restart NetworkManager
无缓存服务的手动刷新
若系统无DNS缓存服务(如默认Alpine Linux),直接修改解析配置:
sudo cp /etc/resolv.conf /etc/resolv.conf.bak # 备份 sudo sed -i 's/nameserver .*/nameserver 8.8.8.8/' /etc/resolv.conf # 替换DNS
验证DNS缓存是否刷新
使用诊断工具检查解析结果是否更新:
dig example.com # 查看解析IP是否最新 nslookup example.com # 检查非缓存响应 ping -c 1 example.com # 确认连通性
注意:部分命令需安装
dnsutils
(Debian/Ubuntu)或bind-utils
(RHEL/CentOS)。
常见问题解决
- 权限不足:所有命令需
sudo
提权。 - 服务未运行:用
systemctl status dnsmasq
检查服务状态。 - 未生效:尝试重启网络
sudo systemctl restart networking
或设备。 - 临时禁用IPv6:在
/etc/sysctl.conf
添加net.ipv6.conf.all.disable_ipv6=1
后执行sysctl -p
。
最佳实践建议
- 明确环境:先通过
systemctl status systemd-resolved
等命令确认当前DNS服务。 - 修改配置后操作:编辑
/etc/resolv.conf
或NetworkManager设置后必须刷新。 - 脚本自动化:运维中可将命令写入部署脚本(如
ansible
任务)。 - 避免过度刷新:频繁操作可能增加DNS服务器负载。
引用说明:本文方法参考Linux官方文档(systemd-resolved、dnsmasq)及Red Hat/Canonical知识库,对于发行版差异,请以Arch Wiki为综合指南。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8015.html