在CentOS系统中一键更换DNS的详细方法
准备工作
(一)确认网络接口名称
在终端中输入以下命令来查找当前系统的网络接口名称,这是后续操作的重要依据。
nmcli d
该命令会列出系统中所有的网络连接及其相关信息,包括接口名称(如eth0
、ens33
等)。
(二)备份原有DNS配置(可选但推荐)
在进行DNS更换之前,备份原有的DNS配置文件是个不错的习惯,以防后续出现问题可以快速恢复,如果使用NetworkManager管理网络,相关配置可能在/etc/sysconfig/networkscripts/
目录下对应的接口配置文件中;如果是传统的network service管理方式,同样在该目录下有相应的配置文件,可以使用cp
命令进行备份,例如备份ifcfgeth0
文件:
sudo cp /etc/sysconfig/networkscripts/ifcfgeth0 /etc/sysconfig/networkscripts/ifcfgeth0.bak
使用NetworkManager方式一键更换DNS
(一)编写更换DNS脚本
可以创建一个脚本文件来实现一键更换DNS的功能,使用文本编辑器(如vi
或nano
)创建一个新的脚本文件,例如命名为change_dns.sh
:
sudo vi change_dns.sh
在文件中添加以下内容:
#!/bin/bash # 定义新的DNS服务器地址 DNS1="8.8.8.8" DNS2="8.8.4.4" # 获取所有网络接口名称 interfaces=$(nmcli t f NAME con show | grep v "") # 遍历每个接口并设置DNS for interface in $interfaces; do echo "正在设置接口 $interface 的DNS..." sudo nmcli con mod "$interface" ipv4.dns "$DNS1 $DNS2" sudo nmcli con mod "$interface" ipv4.ignoreautodns yes done # 重启所有网络接口以使更改生效 for interface in $interfaces; do sudo nmcli con down "$interface" && sudo nmcli con up "$interface" done echo "DNS更换完成!"
上述脚本中,DNS1
和DNS2
定义了要设置的DNS服务器地址(这里以谷歌的公共DNS为例),然后通过nmcli
命令获取所有网络接口名称,并遍历每个接口设置DNS,最后重启网络接口使更改生效。
(二)赋予脚本执行权限
保存并退出编辑器后,需要为脚本文件赋予执行权限,否则无法直接运行,使用以下命令:
sudo chmod +x change_dns.sh
(三)执行脚本一键更换DNS
现在可以直接执行脚本来完成DNS的一键更换:
sudo ./change_dns.sh
执行后,脚本会自动遍历系统中的所有网络接口,将它们的DNS设置为指定的值,并重启接口使设置生效。
使用传统network service方式一键更换DNS
(一)编写更换DNS脚本
同样创建一个脚本文件,例如命名为change_dns_传统.sh
:
sudo vi change_dns_传统.sh
在文件中添加以下内容:
#!/bin/bash # 定义新的DNS服务器地址 DNS1="8.8.8.8" DNS2="8.8.4.4" # 查找所有网络接口配置文件 config_files=$(ls /etc/sysconfig/networkscripts/ifcfg*) # 遍历每个配置文件并修改DNS设置 for config_file in $config_files; do echo "正在修改配置文件 $config_file 的DNS..." sudo sed i "/DNS1=/c DNS1=$DNS1" "$config_file" sudo sed i "/DNS2=/c DNS2=$DNS2" "$config_file" done # 重启网络服务以使更改生效 sudo systemctl restart network echo "DNS更换完成!"
这个脚本通过sed
命令直接修改/etc/sysconfig/networkscripts/
目录下所有接口配置文件中的DNS设置,然后重启网络服务。
(二)赋予脚本执行权限
与前面类似,保存并退出编辑器后,赋予脚本执行权限:
sudo chmod +x change_dns_传统.sh
(三)执行脚本一键更换DNS
执行以下命令来运行脚本,实现一键更换DNS:
sudo ./change_dns_传统.sh
脚本会遍历所有接口配置文件,修改其中的DNS设置,并重启网络服务使新设置生效。
验证DNS更换是否成功
无论是使用哪种方式更换DNS,更换完成后都需要进行验证,以确保DNS设置已经正确生效。
(一)查看DNS配置信息
可以使用以下命令来查看当前系统的DNS配置信息:
nmcli dev show | grep DNS
或者查看对应接口配置文件中的DNS设置(对于传统network service方式):
cat /etc/sysconfig/networkscripts/ifcfg<interface> | grep DNS
其中<interface>
替换为实际的网络接口名称。
(二)测试DNS解析功能
使用ping
命令来测试DNS解析是否正常工作,
ping google.com
如果能够正常解析并ping通,说明DNS更换成功且工作正常。
以下是一个简单的对比表格,展示了使用NetworkManager方式和传统network service方式更换DNS的一些特点: | 更换方式 | 优点 | 缺点 | | | | | | NetworkManager方式 | 配置相对灵活,可针对每个连接单独设置,支持动态管理 | 对于不熟悉命令行操作的用户来说,命令可能较为复杂 | | 传统network service方式 | 操作简单直接,适合熟悉配置文件编辑的用户 | 修改后需重启网络服务,可能会短暂中断网络连接,且对于多连接管理不够灵活 |
相关问题与解答
(一)问题:更换DNS后网络连接正常,但无法访问某些网站怎么办?
解答:这可能是由于新设置的DNS服务器无法解析某些特定域名,或者这些网站的服务器对某些DNS有限制,可以尝试更换其他可靠的DNS服务器地址,如腾讯的DNS(119.29.29.29和182.254.116.116)或阿里的DNS(223.5.5.5和223.6.6.6)等,再次执行更换DNS的脚本进行尝试,也可以检查本地防火墙设置,确保没有阻止对这些网站的访问。
(二)问题:如何在不重启网络接口的情况下使DNS设置生效?
解答:对于使用NetworkManager方式管理的网络,可以使用以下命令来释放并重新获取IP地址,从而使新的DNS设置生效(以eth0
接口为例):
sudo nmcli con down eth0 && sudo nmcli con up eth0
对于传统network service方式管理的网络,可以使用以下命令来释放并重新获取IP地址:
sudo ifdown <interface> && sudo ifup <interface>
其中<interface>
替换为实际的网络接口名称。