在Linux系统管理中,域名系统(DNS)扮演着至关重要的角色,它负责将我们易于记忆的域名(如www.google.com)解析为机器能够识别的IP地址,在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 addr
或 ifconfig
命令查看你的网络接口名称。
ip addr
输出结果中,你会看到类似 ens33
或 eth0
的接口名。
步骤2:编辑网络接口配置文件
使用文本编辑器(如vi或nano)打开对应的配置文件,这里以 ens33
为例:
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
步骤3:添加或修改DNS配置
在文件中,添加或修改以下两行,你可以指定一个或多个DNS服务器,常用的公共DNS包括Google的 8.8.8
和 Cloudflare 的 1.1.1
。
DNS1=8.8.8.8
DNS2=1.1.1.1
确保 BOOTPROTO
设置为 dhcp
或 static
都不影响DNS的配置,保存并退出文件。
步骤4:重启网络服务
为了让配置生效,需要重启网络服务。
sudo systemctl restart network
使用nmcli(推荐,同样适用于CentOS 7)
即使在CentOS 7中,也推荐使用nmcli
(NetworkManager Command-Line Interface)工具,它更为现代和统一。
- 查看连接名称:
nmcli connection show
- 修改连接的DNS(假设连接名为
ens33
):sudo nmcli connection modify ens33 ipv4.dns "8.8.8.8 1.1.1.1"
- 重启连接:
sudo nmcli connection down ens33 && sudo nmcli connection up ens33
适用于 CentOS 8 / Stream / RHEL 9 及衍生系统 (推荐)
从CentOS 8开始,ifcfg
脚本的管理方式逐渐被 nmcli
和 keyfiles
取代。nmcli
成为了官方推荐的标准网络配置工具。
步骤1:查看网络连接名称
nmcli connection show
你会看到一个列表,找到你正在使用的连接名称,Wired connection 1
或 ens33
。
步骤2:修改DNS设置
使用 nmcli connection modify
命令来添加DNS服务器,这里的关键是,我们不仅要设置DNS,还要告诉系统忽略从DHCP服务器获取的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修改是否生效
配置完成后,可以通过以下几种方式验证:
检查
/etc/resolv.conf
文件:cat /etc/resolv.conf
你应该能看到你设置的DNS服务器地址,并且文件头部通常会有注释,说明它是由NetworkManager管理的。
使用解析工具:
使用nslookup
或dig
命令来测试域名解析。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服务器的选择或网络环境有关,而不是配置方法本身的问题,可能的原因有:
- DNS服务器限制:你可能设置了一个仅对国内域名解析优化或有特殊缓存策略的DNS服务器,它无法正确解析国外域名,尝试更换为全球通用的公共DNS,如Google的
8.8.8
或Cloudflare的1.1.1
。 - 网络防火墙:服务器所在网络或上游防火墙可能限制了对特定国外域名的访问或ICMP协议(
ping
使用的协议)。 - IPv6问题:有时ping不通是因为系统尝试使用IPv6解析,但网络环境不支持,可以尝试使用
ping -4 google.com
强制使用IPv4进行测试,如果这样能通,说明是IPv6配置的问题。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复