Linux系统刷新DNS缓存的具体步骤和命令有哪些?

在Linux系统中,DNS(域名系统)缓存用于加快域名解析速度,但当域名对应的IP地址发生变化或需要清除错误的解析记录时,就需要手动刷新DNS缓存,不同Linux发行版使用的DNS缓存服务不同,刷新方法也存在差异,本文将详细介绍Linux系统中刷新DNS的多种方法,涵盖主流发行版及不同场景下的操作步骤。

linux如何刷新dns

理解DNS缓存与刷新的必要性

DNS缓存是操作系统或应用程序将域名与IP地址的对应关系临时存储在本地内存中的机制,目的是减少对DNS服务器的查询次数,提升访问速度,但缓存可能导致以下问题:

  1. 域名解析错误:网站更换服务器后,本地缓存仍指向旧IP,导致无法访问。
  2. DNS污染:网络劫持或ISP(互联网服务提供商)返回错误解析结果。
  3. 测试需求:开发或调试时需要验证新域名解析是否生效。

此时需通过刷新DNS缓存清除旧记录,强制系统重新向DNS服务器查询最新IP。

通用方法:修改/etc/hosts文件(无需刷新缓存)

如果需要手动指定域名与IP的映射(如本地开发环境),可直接编辑/etc/hosts文件,该文件的优先级高于DNS服务器解析,修改后无需刷新缓存即可生效。

操作步骤

  1. 使用sudo权限打开/etc/hosts文件(普通用户无写入权限):
    sudo nano /etc/hosts
  2. 添加或修改域名与IP的映射,格式为IP地址 域名
    0.0.1   localhost
    192.168.1.100   test.example.com
  3. 保存文件(在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),需编辑NetplanNetworkManager等网络配置工具的配置文件,修改后刷新缓存并重启网络服务。

linux如何刷新dns

以Ubuntu Netplan为例

  1. 编辑网络配置文件(通常位于/etc/netplan/目录下):
    sudo nano /etc/netplan/01-network-manager-all.yaml
  2. 添加nameservers字段,指定DNS服务器(如Google DNS:8.8.88.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]  # 可选:域名后缀
  3. 应用配置并刷新缓存:
    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参数表示仅刷新主机名(域名)缓存,若需刷新其他缓存(如grouppasswd),可替换对应参数。

重启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

取消注释或添加以下行:

linux如何刷新dns

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:可能原因包括:

  1. 本地缓存未完全清除:部分应用程序(如浏览器、Docker)有独立DNS缓存,需单独清除;
  2. ISP缓存延迟:互联网服务提供商的DNS缓存可能未更新,可尝试更换公共DNS(如8.8.8.8);
  3. hosts文件配置错误:检查/etc/hosts中是否有冲突的域名映射;
  4. 防火墙或安全组拦截:确认防火墙未阻止DNS查询(默认端口53);
  5. DNS服务器故障:尝试使用其他DNS服务器,如1.1.1(Cloudflare)或114.114.114(国内公共DNS)。

Q2:如何查看Linux系统当前使用的DNS服务器?
A2:可通过以下命令查看:

  1. 查看系统全局DNS
    cat /etc/resolv.conf  # 传统方法,部分系统可能显示systemd-resolved的本地地址
  2. 查看systemd-resolved管理的DNS(Ubuntu 18.04+等):
    systemd-resolve --status

    在输出中找到Current DNS Server行,即为当前使用的DNS服务器。

  3. 查看NetworkManager配置的DNS(Ubuntu、CentOS 7+):
    nmcli dev show | grep "DNS"
  4. 查看nscd缓存状态(若使用nscd服务):
    nscd -g

    输出中的hosts部分显示DNS缓存相关信息。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30528.html

(0)
酷番叔酷番叔
上一篇 2025年9月25日 22:36
下一篇 2025年9月25日 22:57

相关推荐

  • linux如何查看是否有安装vnc

    Linux中,可以使用命令vncserver -version或which vncserver来

    2025年8月17日
    3700
  • Linux系统编译内核的完整流程、工具准备、步骤及注意事项有哪些?

    在Linux系统中编译内核是一项高级操作,通常用于定制系统功能、优化性能或修复内核漏洞,虽然过程相对复杂,但遵循详细步骤可以顺利完成,以下是完整的内核编译流程,从准备工作到最终测试,涵盖关键环节和注意事项,准备工作编译内核前需确保系统环境满足要求,避免中途因依赖或资源不足失败,备份数据内核编译涉及系统核心组件……

    2025年10月6日
    900
  • Linux如何开启TOA获取真实IP?

    TOA的作用与原理当客户端请求通过负载均衡器(如LVS)转发时,后端服务器默认只能看到负载均衡器的IP,TOA技术通过在TCP报文的Option字段插入真实客户端IP,使后端服务通过内核态直接解析原始IP,适用于高并发场景(如CDN、游戏服务器),开启TOA的两种方式方式1:动态加载内核模块(推荐)步骤1:安装……

    2025年7月29日
    4400
  • Linux反编译工具有哪些必备推荐?

    在Linux系统中,反编译工具主要用于将已编译的二进制文件(如可执行程序、库文件)转换为可读性更高的汇编代码或高级语言代码(如C语言),以下是详细的操作指南和工具推荐,请务必遵守法律法规,仅用于合法用途(如漏洞分析、恶意软件研究或调试自有软件),objdump(基础反汇编)功能:GNU Binutils套件中的……

    2025年6月16日
    5600
  • Linux系统如何禁止USB设备的使用?

    在Linux系统中,禁止USB设备接入是常见的安全管理需求,尤其在需要防止数据泄露、未授权设备接入或限制外设使用的场景下,以下从内核模块控制、设备级管理、运行时干预等多个维度,详细介绍Linux禁止USB的方法及操作步骤,通过内核模块禁用USB存储设备内核模块是Linux设备驱动的核心形式,通过禁用相关模块可从……

    2025年9月17日
    2500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信