CentOS修改DNS重启后失效,如何才能永久生效?

在Linux系统管理中,域名系统(DNS)扮演着至关重要的角色,它负责将我们易于记忆的域名(如www.google.com)解析为机器能够识别的IP地址,在CentOS系统中,正确配置并永久保存DNS设置,是确保服务器网络连通性和服务稳定性的基础,本文将详细介绍如何在CentOS的不同版本中永久修改DNS配置,并解释其背后的原理。

CentOS修改DNS重启后失效,如何才能永久生效?

理解临时与永久配置的区别

许多初学者会直接编辑 /etc/resolv.conf 文件来修改DNS,这个文件确实存放了系统当前使用的DNS服务器地址,在大多数现代CentOS版本中,这个文件是由网络管理服务(如NetworkManager)动态生成的,直接修改它虽然能立即生效,但一旦网络服务重启或服务器重启,该文件的内容就会被覆盖,恢复为原来的设置,这被视为一种临时方法。

要实现永久修改,我们需要从网络配置的源头入手,告诉网络管理服务我们希望使用哪些DNS服务器。


适用于 CentOS 7 及更早版本

在CentOS 7及更早的版本中,网络配置主要通过位于 /etc/sysconfig/network-scripts/ 目录下的脚本文件进行,每个网络接口(如eth0, ens33)都有一个对应的配置文件,通常命名为 ifcfg-<接口名>

步骤1:确定网络接口名称

使用 ip addrifconfig 命令查看你的网络接口名称。

ip addr

输出结果中,你会看到类似 ens33eth0 的接口名。

步骤2:编辑网络接口配置文件

使用文本编辑器(如vi或nano)打开对应的配置文件,这里以 ens33 为例:

sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33

步骤3:添加或修改DNS配置

在文件中,添加或修改以下两行,你可以指定一个或多个DNS服务器,常用的公共DNS包括Google的 8.8.8 和 Cloudflare 的 1.1.1

CentOS修改DNS重启后失效,如何才能永久生效?

DNS1=8.8.8.8
DNS2=1.1.1.1

确保 BOOTPROTO 设置为 dhcpstatic 都不影响DNS的配置,保存并退出文件。

步骤4:重启网络服务

为了让配置生效,需要重启网络服务。

sudo systemctl restart network

使用nmcli(推荐,同样适用于CentOS 7)

即使在CentOS 7中,也推荐使用nmcli(NetworkManager Command-Line Interface)工具,它更为现代和统一。

  1. 查看连接名称
    nmcli connection show
  2. 修改连接的DNS(假设连接名为 ens33):
    sudo nmcli connection modify ens33 ipv4.dns "8.8.8.8 1.1.1.1"
  3. 重启连接
    sudo nmcli connection down ens33 && sudo nmcli connection up ens33

适用于 CentOS 8 / Stream / RHEL 9 及衍生系统 (推荐)

从CentOS 8开始,ifcfg 脚本的管理方式逐渐被 nmclikeyfiles 取代。nmcli 成为了官方推荐的标准网络配置工具。

步骤1:查看网络连接名称

nmcli connection show

你会看到一个列表,找到你正在使用的连接名称,Wired connection 1ens33

步骤2:修改DNS设置

使用 nmcli connection modify 命令来添加DNS服务器,这里的关键是,我们不仅要设置DNS,还要告诉系统忽略从DHCP服务器获取的DNS信息,以防止我们的设置被覆盖。

CentOS修改DNS重启后失效,如何才能永久生效?

# 将 <connection_name> 替换为你的实际连接名
sudo nmcli connection modify <connection_name> ipv4.dns "8.8.8.8 1.1.1.1"
sudo nmcli connection modify <connection_name> ipv4.ignore-auto-dns yes
  • ipv4.dns "...":设置首选和备用DNS服务器。
  • ipv4.ignore-auto-dns yes:这是至关重要的一步,它确保NetworkManager不会使用DHCP服务器提供的DNS,从而保护我们的手动配置。

步骤3:应用配置

修改后,需要重新激活网络连接使配置生效。

# 将 <connection_name> 替换为你的实际连接名
sudo nmcli connection down <connection_name> && sudo nmcli connection up <connection_name>

如何验证DNS修改是否生效

配置完成后,可以通过以下几种方式验证:

  1. 检查 /etc/resolv.conf 文件

    cat /etc/resolv.conf

    你应该能看到你设置的DNS服务器地址,并且文件头部通常会有注释,说明它是由NetworkManager管理的。

  2. 使用解析工具
    使用 nslookupdig 命令来测试域名解析。

    nslookup google.com

    如果命令能够返回 google.com 的IP地址,则说明DNS配置工作正常。

特性 编辑 /etc/resolv.conf 修改 ifcfg-* 文件 使用 nmcli (CentOS 7+) 使用 nmcli (CentOS 8+)
持久性 临时,重启后失效 永久 永久 永久
适用版本 所有版本(不推荐) CentOS 7及更早 CentOS 7及以上 CentOS 8及以上(推荐)
易用性 简单,但易出错 较复杂,需手动编辑文件 较易,命令行操作 最易,命令行操作
推荐度 ★☆☆☆☆ ★★☆☆☆ ★★★★☆ ★★★★★

相关问答 (FAQs)


解答: 这是因为在现代的CentOS系统中,/etc/resolv.conf 文件默认是由 NetworkManager 服务管理的,当系统启动或网络服务重启时,NetworkManager 会根据其自身的配置(来自 ifcfg-* 文件或 nmcli 的设置)重新生成这个文件,从而覆盖了你手动进行的修改,要永久修改DNS,必须修改 NetworkManager 的配置源,而不是直接修改其生成的结果文件。

问题2:使用 nmcli 修改DNS后,ping 国内网站正常,但 ping 国外网站(如google.com)不通,是什么原因?
解答: 这种情况通常与DNS服务器的选择或网络环境有关,而不是配置方法本身的问题,可能的原因有:

  1. DNS服务器限制:你可能设置了一个仅对国内域名解析优化或有特殊缓存策略的DNS服务器,它无法正确解析国外域名,尝试更换为全球通用的公共DNS,如Google的 8.8.8 或Cloudflare的 1.1.1
  2. 网络防火墙:服务器所在网络或上游防火墙可能限制了对特定国外域名的访问或ICMP协议(ping使用的协议)。
  3. IPv6问题:有时ping不通是因为系统尝试使用IPv6解析,但网络环境不支持,可以尝试使用 ping -4 google.com 强制使用IPv4进行测试,如果这样能通,说明是IPv6配置的问题。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-05 22:48
下一篇 2025-10-05 22:51

相关推荐

发表回复

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

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信