在CentOS 7系统中,DNS(域名系统)配置是确保服务器能够正确解析域名至IP地址的关键环节,无论是为了提升网络访问速度、绕过DNS污染,还是为了接入特定的内部网络资源,正确地更改DNS设置都是一项基础且重要的系统管理任务,本文将详细介绍在CentOS 7中更改DNS的几种主流方法,并分析其优劣,以帮助您根据实际需求选择最合适的方案。
使用 nmcli
命令行工具(推荐)
nmcli
(NetworkManager Command-Line Interface)是CentOS 7中与NetworkManager服务交互的首选命令行工具,它功能强大,能够动态、持久地修改网络配置,包括DNS设置,且操作相对安全,是现代Linux发行版推荐的方式。
查看当前网络连接名称
需要确定您要修改的网络连接的名称,这通常不是网卡设备名(如ens33),而是NetworkManager中定义的连接配置名。
nmcli connection show
执行后,您会看到一个列表,其中NAME
就是连接名称,常见的连接名称可能是ens33
、Wired connection 1
或System eth0
。
修改指定连接的DNS服务器
假设您的连接名称是ens33
,您可以使用以下命令来设置DNS服务器,这里以Google的公共DNS(8.8.8.8和8.8.4.4)为例。
sudo nmcli connection mod "ens33" ipv4.dns "8.8.8.8 8.8.4.4"
connection mod
:修改连接配置。"ens33"
:您的连接名称,建议用引号括起来以防名称中包含空格。ipv4.dns
:指定IPv4的DNS服务器地址,多个地址用空格隔开。
重启网络连接使配置生效
修改配置后,需要重新激活网络连接才能让新的DNS设置生效。
sudo nmcli connection down "ens33" && sudo nmcli connection up "ens33"
这个命令会先断开连接,然后重新连接,执行后,NetworkManager会自动将新的DNS信息写入到/etc/resolv.conf
文件中。
验证DNS设置
您可以通过查看/etc/resolv.conf
文件来验证DNS是否已成功更改。
cat /etc/resolv.conf
您应该能看到类似如下的输出,其中包含了您刚刚设置的DNS服务器:
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
可以使用nslookup
或dig
命令来测试域名解析是否正常工作。
nslookup www.google.com
手动编辑网络接口配置文件(传统方法)
对于习惯传统配置方式的管理员,或者在不使用NetworkManager的环境中,可以直接编辑网络接口的配置文件,这种方法是持久化的,但需要手动操作和重启网络服务。
定位并编辑配置文件
网络接口配置文件位于/etc/sysconfig/network-scripts/
目录下,文件名通常为ifcfg-<接口名>
,例如ifcfg-ens33
。
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
添加或修改DNS参数
在文件中,添加或修改以下两行,如果文件中已有DNS1
和DNS2
,直接修改其值即可。
DNS1=8.8.8.8
DNS2=8.8.4.4
重要提示:为了防止DHCP服务器在获取IP时自动覆盖您手动设置的DNS,建议在文件中添加或确保PEERDNS
参数的值为no
。
PEERDNS=no
重启网络服务
保存并退出编辑器后,需要重启网络服务以使配置生效。
sudo systemctl restart network
重启后,系统会读取新的配置文件,并将DNS设置应用到/etc/resolv.conf
中。
直接编辑 /etc/resolv.conf
(临时方法)
这是一种最直接但通常是临时性的方法,在CentOS 7中,由于NetworkManager会管理此文件,直接修改它很可能在系统重启或网络服务重启后被覆盖。
编辑文件
sudo vi /etc/resolv.conf
设置DNS服务器
清空文件原有内容(或注释掉),然后添加您需要的DNS服务器。
nameserver 8.8.8.8
nameserver 8.8.4.4
重要警告:此方法仅适用于临时测试或紧急情况,任何由NetworkManager触发的网络事件(如重新连接)都可能导致此文件被重置,从而丢失您的手动配置,不推荐在生产环境中使用此方法进行永久性更改。
方法对比
为了更清晰地选择合适的方法,下表对上述三种方法进行了比较:
方法 | 持久性 | 易用性 | 推荐场景 |
---|---|---|---|
nmcli 命令 | 持久化 | 高 | 首选方法,适用于所有使用NetworkManager的CentOS 7系统 |
编辑 ifcfg-* 文件 | 持久化 | 中 | 传统服务器环境,或需要精细控制网络参数的场景 |
编辑 resolv.conf | 临时 | 高 | 临时测试、快速故障排除、救援模式 |
验证与故障排除
完成DNS更改后,除了查看/etc/resolv.conf
,更可靠的验证方式是使用解析工具。
使用
nslookup
:nslookup www.baidu.com
如果能返回正确的IP地址,说明DNS配置成功。
使用
dig
:dig @8.8.8.8 www.github.com
此命令直接向指定的DNS服务器(8.8.8.8)发起查询,可以用来判断特定DNS服务器是否可达及响应速度。
如果解析失败,请检查:
- DNS服务器地址是否正确。
- 网络连接是否正常(
ping 8.8.8.8
)。 - 防火墙或SELinux是否阻止了DNS查询(通常使用UDP 53端口)。
相关问答FAQs
我按照方法二修改了ifcfg-ens33
文件,重启网络后/etc/resolv.conf
里的DNS还是被改成了别的地址,这是为什么?
解答:这通常是因为您的网络接口配置为通过DHCP自动获取IP地址,而DHCP服务器在分配IP的同时也提供了DNS服务器信息,即使您在ifcfg-ens33
文件中设置了DNS1
和DNS2
,如果PEERDNS
参数的值为yes
(或者未设置,默认为yes),那么NetworkManager在获取到DHCP信息后,会用DHCP提供的DNS覆盖您的手动设置,解决方法是在ifcfg-ens33
文件中明确添加一行 PEERDNS=no
,这样系统就会优先使用您在文件中静态配置的DNS地址。
我需要为我的服务器配置一个内部域名解析,同时保留一个公共DNS作为备用,应该如何操作?
解答:这是一个非常常见的需求,您可以将内部DNS服务器作为首选,公共DNS作为备用,以使用nmcli
为例,假设您的内部DNS服务器是168.1.100
,公共DNS是114.114.114
,您可以这样设置:
sudo nmcli connection mod "ens33" ipv4.dns "192.168.1.100 114.114.114.114"
然后重启连接,系统在解析域名时,会首先尝试向168.1.100
查询,如果该服务器无法解析(查询的是公共域名),则会继续向114.114.114
查询,这样既保证了内部域名的快速解析,又能正常访问互联网,如果您还需要设置域名搜索后缀(在访问server01
时自动补全为server01.internal.com
),可以使用以下命令:
sudo nmcli connection mod "ens33" ipv4.dns-search "internal.com"
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复