cat /etc/resolv.conf
;修改可通过编辑该文件或使用nmcli
命令是关于如何在CentOS系统中查看和修改当前DNS设置的详细指南:
查看当前的DNS配置
在CentOS中,可以通过多种方式查看现有的DNS服务器地址,以下是常用的几种方法:
查看/etc/resolv.conf
文件
该文件是Linux系统中最基础的DNS客户端配置文件,默认由网络服务自动生成或更新,执行以下命令直接显示内容:
cat /etc/resolv.conf
输出示例如下(每行以nameserver
开头):
nameserver 8.8.8.8 # Google公共DNS nameserver 8.8.4.4 # 备用Google DNS
此文件中列出的即为当前生效的DNS服务器列表,按优先级排序。
使用nmcli
命令(适用于NetworkManager管理的网络)
如果系统通过NetworkManager工具管理网络连接,可以先列出所有连接名称,再查询特定接口的详细信息:
nmcli con show # 列出所有网络连接及其配置参数 nmcli con show "eth0" # 替换为实际接口名(如ens33),查看对应连接的DNS设置
在输出结果中,关注字段如 ipv4.dns
,其值即为该连接使用的DNS服务器地址。
系统解析状态检查工具
通过systemdresolve
命令可获取更全面的解析信息,包括各接口关联的DNS服务器及状态:
systemdresolve status
此命令会详细展示每个网络接口的DNS配置来源、是否启用IPv6解析等高级信息。
修改DNS设置的方法
根据不同的使用场景和管理习惯,可选择以下任意一种方式进行调整:
方法类型 | 适用场景 | 操作步骤摘要 | 持久性保障措施 |
---|---|---|---|
NetworkManager命令行工具 | 图形化网络管理优先的环境 | nmcli con mod <连接名> ipv4.dns "新DNS1,新DNS2" + ipv4.ignoreautodns yes |
无需额外操作,配置自动保存到内部数据库 |
直接编辑网卡脚本文件 | 传统服务模式或无NetworkManager的情况 | 修改/etc/sysconfig/networkscripts/ifcfg* 中的DNS1/DNS2参数 |
确保PEERDNS=no 以禁用DHCP覆盖 |
手动编辑全局解析文件 | 临时测试或绕过自动化管理的快速调整 | 追加nameserver 条目到/etc/resolv.conf |
需同步修改NetworkManager主配置文件阻止覆写 |
具体实施步骤如下:
-
方法1:通过NetworkManager修改指定连接的DNS
- 第一步,查看现有网络连接名称:
nmcli con show
; - 第二步,执行修改命令(将
YourConnectionName
替换为实际名称,如eth0
):nmcli con mod YourConnectionName ipv4.dns "8.8.8.8,8.8.4.4" # 设置Google公共DNS nmcli con mod YourConnectionName ipv4.ignoreautodns yes # 禁止自动获取DHCP分配的DNS
- 第三步,重启连接使配置生效:
nmcli con up YourConnectionName
。
- 第一步,查看现有网络连接名称:
-
方法2:编辑网卡配置文件(静态IP环境常用) 找到对应网卡的配置文件(通常位于
/etc/sysconfig/networkscripts/
目录下,命名格式为ifcfgxxx
):sudo vi /etc/sysconfig/networkscripts/ifcfgeth0
添加或更新以下参数:
DNS1=8.8.8.8 # 主DNS服务器 DNS2=8.8.4.4 # 备用DNS服务器 PEERDNS=no # 确保使用静态配置而非DHCP动态分配的值
保存后重启网络服务:
sudo systemctl restart network
。 -
方法3:直接修改
/etc/resolv.conf
(需防覆盖处理) 若选择此方式,需同时禁止NetworkManager对文件的管控:- 编辑DNS条目:
sudo vi /etc/resolv.conf # 添加类似如下内容(多行nameserver支持多服务器负载均衡) nameserver 114.114.114.114 # 国内114DNS加速节点 nameserver 223.5.5.5 # 阿里云DNS
- 防止被NetworkManager重置:修改其主配置文件:
sudo vi /etc/NetworkManager/NetworkManager.conf # 在[main]部分添加: dns=none
- 最后重启服务:
sudo systemctl restart NetworkManager
。
- 编辑DNS条目:
验证新配置是否生效
完成上述任一操作后,可通过以下命令测试解析功能:
ping www.google.com # 测试域名能否正确转换为IP地址 dig @8.8.8.8 example.com # 强制使用指定DNS服务器进行递归查询
若返回正常的响应包且无错误提示(如“NOERROR”),则表明DNS已成功更新。
常见问题与解答
Q1: 修改后的DNS没有立即生效怎么办?
原因分析:某些情况下需要手动触发缓存刷新或重启相关进程。
解决方案:尝试执行sudo systemdresolve flushcaches
清除本地缓存,或者重启对应的网络服务(如systemctl restart network
)。
Q2: /etc/resolv.conf总是被自动还原如何处理?
根本原因:这是由于NetworkManager默认会重新生成该文件导致的。
彻底解决方法:按照方法3中的步骤,在/etc/NetworkManager/NetworkManager.conf
中设置dns=none
,并重启NetworkManager服务即可锁定手动配置。
注意事项
- 备份原始配置:建议在修改前复制关键文件(如
cp /etc/resolv.conf{,.bak}
); - 多网卡环境:不同接口可能有独立的DNS策略,需针对性调整;
- 安全性考量:避免使用不可信的第三方DNS,优先选择知名公共服务提供商(如Cloudflare的1.1.