在Linux系统中,DNS(域名系统)缓存用于加快域名解析速度,但当域名对应的IP地址发生变化或需要清除错误的解析记录时,就需要手动刷新DNS缓存,不同Linux发行版使用的DNS缓存服务不同,刷新方法也存在差异,本文将详细介绍Linux系统中刷新DNS的多种方法,涵盖主流发行版及不同场景下的操作步骤。
理解DNS缓存与刷新的必要性
DNS缓存是操作系统或应用程序将域名与IP地址的对应关系临时存储在本地内存中的机制,目的是减少对DNS服务器的查询次数,提升访问速度,但缓存可能导致以下问题:
- 域名解析错误:网站更换服务器后,本地缓存仍指向旧IP,导致无法访问。
- DNS污染:网络劫持或ISP(互联网服务提供商)返回错误解析结果。
- 测试需求:开发或调试时需要验证新域名解析是否生效。
此时需通过刷新DNS缓存清除旧记录,强制系统重新向DNS服务器查询最新IP。
通用方法:修改/etc/hosts文件(无需刷新缓存)
如果需要手动指定域名与IP的映射(如本地开发环境),可直接编辑/etc/hosts
文件,该文件的优先级高于DNS服务器解析,修改后无需刷新缓存即可生效。
操作步骤:
- 使用
sudo
权限打开/etc/hosts
文件(普通用户无写入权限):sudo nano /etc/hosts
- 添加或修改域名与IP的映射,格式为
IP地址 域名
,0.0.1 localhost 192.168.1.100 test.example.com
- 保存文件(在
nano
编辑器中按Ctrl+O
,回车确认,再按Ctrl+X
退出)。
注意事项:
- 该方法仅影响本地解析,不会清除系统或应用程序的DNS缓存。
- 修改后若仍无法解析,检查是否有其他DNS缓存服务(如
systemd-resolved
)覆盖了hosts
文件配置。
基于systemd-resolved的系统刷新DNS(Ubuntu 18.04+、CentOS 8+等)
现代Linux发行版(如Ubuntu 18.04+、Fedora、CentOS 8+等)默认使用systemd-resolved
服务管理DNS缓存,该服务通过本地回环地址0.0.53
提供DNS解析。
检查systemd-resolved服务状态
systemctl status systemd-resolved
若服务未运行,需先启动并设置开机自启:
sudo systemctl start systemd-resolved sudo systemctl enable systemd-resolved
刷新DNS缓存
使用systemd-resolve
命令刷新缓存:
sudo systemd-resolve --flush-caches
执行后可通过以下命令查看缓存状态,确认是否已清除:
systemd-resolve --statistics
修改DNS服务器后刷新
若需修改系统DNS服务器(如使用公共DNS或自定义DNS),需编辑Netplan
、NetworkManager
等网络配置工具的配置文件,修改后刷新缓存并重启网络服务。
以Ubuntu Netplan为例:
- 编辑网络配置文件(通常位于
/etc/netplan/
目录下):sudo nano /etc/netplan/01-network-manager-all.yaml
- 添加
nameservers
字段,指定DNS服务器(如Google DNS:8.8.8
、8.4.4
):network: version: 2 ethernets: enp0s3: # 替换为实际网卡名 dhcp4: no addresses: [192.168.1.100/24] # 静态IP(可选) nameservers: addresses: [8.8.8.8, 8.8.4.4] search: [example.com] # 可选:域名后缀
- 应用配置并刷新缓存:
sudo netplan apply sudo systemd-resolve --flush-caches
使用nscd服务刷新DNS(CentOS 7、RHEL 7等)
部分传统Linux发行版(如CentOS 7、RHEL 7)使用nscd
(Name Service Cache Daemon)管理DNS缓存,需通过nscd
命令刷新。
检查nscd服务状态
systemctl status nscd
若未安装,需先安装:
sudo yum install nscd # CentOS/RHEL sudo apt install nscd # Debian/Ubuntu(若未预装)
刷新DNS缓存
sudo nscd -i hosts
-i hosts
参数表示仅刷新主机名(域名)缓存,若需刷新其他缓存(如group
、passwd
),可替换对应参数。
重启nscd服务
若刷新后未生效,可重启服务:
sudo systemctl restart nscd
使用dnsmasq刷新DNS(路由器或本地DNS服务器)
dnsmasq
是一个轻量级DNS和DHCP服务器,常用于路由器或本地网络环境,若Linux系统运行了dnsmasq
服务,需通过其特定命令刷新缓存。
检查dnsmasq服务状态
systemctl status dnsmasq
刷新DNS缓存
方法1:发送SIGHUP
信号重载配置(同时刷新缓存):
sudo killall -HUP dnsmasq
方法2:重启服务(若重载无效):
sudo systemctl restart dnsmasq
配置dnsmasq使用本地缓存
若需启用dnsmasq
的DNS缓存功能,编辑其配置文件/etc/dnsmasq.conf
:
sudo nano /etc/dnsmasq.conf
取消注释或添加以下行:
cache-size=1000 # 缓存条目数,默认150
保存后重启服务使配置生效。
强制刷新DNS的其他技巧
重启网络服务
若上述方法无效,可尝试重启系统网络服务,强制清除所有网络相关缓存:
- 使用NetworkManager的系统(Ubuntu、CentOS 7+):
sudo nmcli networking off sudo nmcli networking on
- 使用systemd-networkd的系统(Debian、Fedora):
sudo systemctl restart systemd-networkd
- 传统网络服务(CentOS 6、RHEL 6):
sudo service network restart
清除浏览器DNS缓存
浏览器会独立维护DNS缓存,即使系统缓存已刷新,浏览器仍可能返回旧结果,需手动清除浏览器缓存:
- Chrome/Edge:按
Ctrl+Shift+Delete
,选择“缓存的图片和文件”,点击“清除数据”。 - Firefox:按
Ctrl+Shift+Delete
,选择“缓存”,点击“清除现在”。
不同刷新方法的适用场景总结
为方便选择,以下表格总结了常见Linux系统中刷新DNS的方法及适用场景:
方法 | 适用系统/服务 | 命令/操作 | 说明 |
---|---|---|---|
修改/etc/hosts | 所有Linux系统 | sudo nano /etc/hosts |
手动指定域名映射,无需刷新缓存 |
systemd-resolve | Ubuntu 18.04+、CentOS 8+、systemd-resolved | sudo systemd-resolve --flush-caches |
现代发行版默认DNS缓存服务 |
nscd | CentOS 7、RHEL 7、传统发行版 | sudo nscd -i hosts |
需安装nscd 服务 |
dnsmasq | 运行dnsmasq服务的系统(如路由器、本地DNS) | sudo killall -HUP dnsmasq |
轻量级DNS/DHCP服务器,需重载配置 |
重启网络服务 | 所有Linux系统 | sudo systemctl restart NetworkManager |
强制清除所有网络缓存,但可能短暂断网 |
相关问答FAQs
Q1:为什么刷新DNS后仍无法解析域名?
A1:可能原因包括:
- 本地缓存未完全清除:部分应用程序(如浏览器、Docker)有独立DNS缓存,需单独清除;
- ISP缓存延迟:互联网服务提供商的DNS缓存可能未更新,可尝试更换公共DNS(如8.8.8.8);
- hosts文件配置错误:检查
/etc/hosts
中是否有冲突的域名映射; - 防火墙或安全组拦截:确认防火墙未阻止DNS查询(默认端口53);
- DNS服务器故障:尝试使用其他DNS服务器,如
1.1.1
(Cloudflare)或114.114.114
(国内公共DNS)。
Q2:如何查看Linux系统当前使用的DNS服务器?
A2:可通过以下命令查看:
- 查看系统全局DNS:
cat /etc/resolv.conf # 传统方法,部分系统可能显示systemd-resolved的本地地址
- 查看systemd-resolved管理的DNS(Ubuntu 18.04+等):
systemd-resolve --status
在输出中找到
Current DNS Server
行,即为当前使用的DNS服务器。 - 查看NetworkManager配置的DNS(Ubuntu、CentOS 7+):
nmcli dev show | grep "DNS"
- 查看nscd缓存状态(若使用nscd服务):
nscd -g
输出中的
hosts
部分显示DNS缓存相关信息。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30528.html