新安装的CentOS 7系统配置DNS详解:从入门到精通
刚拿到一台新安装的CentOS 7服务器,那种感觉就像拿到一把还没开刃的宝剑,潜力巨大但需要精心打磨,在将其投入生产环境之前,有一项看似基础却至关重要的配置——DNS设置,DNS(Domain Name System),即域名系统,是互联网的“电话簿”,它负责将我们熟悉的域名(如www.google.com
)翻译成计算机能理解的IP地址(如142.251.42.206
),如果DNS配置不当,你的服务器可能无法访问外网更新软件、无法连接其他服务,甚至无法被外界正常访问。
本文将手把手地带你完成CentOS 7的DNS配置,不仅告诉你“怎么做”,还会解释“为什么这么做”,并提供一些故障排查的技巧,让你彻底掌握这项核心技能。
一、 理解CentOS 7的网络配置文件
在开始动手之前,我们先来认识一下CentOS 7中与DNS相关的几个核心配置文件,与早期的版本不同,CentOS 7同时存在传统配置和新式配置方法,理解它们的关系是关键。
1、/etc/resolv.conf
:这是最核心的DNS配置文件,系统会从这个文件中读取DNS服务器地址(nameserver)和域名搜索域(search)。但请注意:在默认情况下,这个文件是由系统动态生成的,直接修改它可能重启网络后就被覆盖了,我们需要通过其他方式去控制它。
2、/etc/sysconfig/network-scripts/ifcfg-<interface_name>
:这是网络接口的配置文件,其中<interface_name>
是你的网络接口名,通常如ifcfg-ens33
、ifcfg-eth0
等,在这里面配置的DNS1
、DNS2
参数,是控制/etc/resolv.conf
的传统方式之一。
3、/etc/NetworkManager/NetworkManager.conf
:NetworkManager是CentOS 7默认的网络管理服务,它的主配置文件可以设置全局的DNS参数。
4、/etc/hosts
:本地主机名解析文件,它可以绕过DNS,直接提供IP地址和主机名的映射关系,通常用于本地测试或小型网络。
二、 方法一:通过修改网络接口配置文件(推荐)
这是最常用、最持久的方法,适用于大多数场景,尤其是服务器环境。
步骤 1:确定你的网络接口名称
打开终端,输入以下命令:
ip addr
或者
ifconfig
你会看到类似以下的输出:
1: lo: ... 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute dynamic ens33 valid_lft 86384sec preferred_lft 86384sec inet6 fe80::20c:29ff:fexx:xx/64 scope link valid_lft forever preferred_lft forever
这里ens33
就是我的网络接口名,你的可能是eth0
,ens192
等,请记下它。
步骤 2:编辑网络接口配置文件
使用你喜欢的文本编辑器(如vi
,vim
,nano
) 编辑对应的配置文件,这里以ens33
和nano
为例:
sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33
步骤 3:配置DNS参数
在打开的文件中,找到或添加以下两行:
DNS1=8.8.8.8 # 主DNS服务器,这里以Google的公共DNS为例 DNS2=114.114.114.114 # 备DNS服务器,这里以国内114DNS为例
你也可以添加DNS3
。
请确保文件中的BOOTPROTO
参数是static
或none
,并且已经正确配置了IPADDR
,NETMASK
,GATEWAY
等静态IP信息,如果是DHCP获取IP,通常也会自动获取DNS,但为了持久化,我们依然可以加上这两行,它们会覆盖DHCP下发的DNS设置。
一个完整的静态IP配置示例:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 使用静态IP地址 DEFROUTE=yes ... IPADDR=192.168.1.100 # 你的静态IP NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.1.1 # 网关地址 DNS1=8.8.8.8 # 主DNS DNS2=114.114.114.114 # 备DNS ... NAME=ens33 DEVICE=ens33 ONBOOT=yes # 确保开机自启
步骤 4:重启网络服务
保存并退出编辑器后,需要重启网络服务以使更改生效:
sudo systemctl restart network
或者只重启特定的网络接口:
sudo ifdown ens33 && sudo ifup ens33
步骤 5:验证配置
检查/etc/resolv.conf
文件是否已经更新:
cat /etc/resolv.conf
你应该能看到nameserver
行已经变成了你设置的地址:
Generated by NetworkManager nameserver 8.8.8.8 nameserver 114.114.114.114
使用ping
或nslookup
或dig
命令测试DNS解析是否正常工作:
ping -c 4 baidu.com
如果能正常收到回复,说明DNS配置成功!
nslookup google.com dig github.com
三、 方法二:直接修改/etc/resolv.conf
(临时或特殊用途)
正如前面警告所说,直接修改这个文件可能不是永久性的,但在某些特定情况下(比如快速测试、或在容器内),你可以这样做。
sudo nano /etc/resolv.conf
修改为:
nameserver 8.8.8.8 nameserver 1.1.1.1 search localdomain
保存即可立即生效,但一旦系统重启或NetworkManager服务重启,这个文件很可能被重写。
如何防止/etc/resolv.conf
被覆盖?
如果你确实希望直接管理这个文件,可以这样做:
1、 在/etc/NetworkManager/NetworkManager.conf
的[main]
部分添加:
[main] dns=none
2、 然后运行:
sudo systemctl restart NetworkManager
3、 现在你就可以自由编辑/etc/resolv.conf
而不会被覆盖了,但这种方法通常不推荐给新手,因为它绕过了NetworkManager的DNS管理功能。
四、 方法三:使用NetworkManager的命令行工具(nmcli)
nmcli
是管理NetworkManager的强大命令行工具,非常适合在远程终端操作。
查看当前连接:
nmcli connection show
修改连接的DNS(以连接名 ‘ens33’ 为例):
sudo nmcli con mod ens33 ipv4.dns "8.8.8.8 114.114.114.114"
让DNS配置立即生效:
sudo nmcli con down ens33 && sudo nmcli con up ens33
1、DNS解析失败:
命令dig www.example.com
,如果没反应,说明DNS服务器可能无法访问或网络有问题。
检查ping 8.8.8.8
看是否能通,如果能通IP但不能解析域名,绝对是DNS配置问题。
2、清除DNS缓存:
CentOS 7默认没有像Windows那样强大的DNS缓存,但如果你安装了nscd
(Name Service Cache Daemon),则需要清理它:
sudo systemctl restart nscd
3、使用host
和dig
命令:
这两个工具比ping
能提供更详细的DNS查询信息,是排查问题的利器。
dig www.baidu.com @8.8.8.8 # 指定使用8.8.8.8来查询www.baidu.com host github.com 114.114.114.114
4、多网卡环境:
如果服务器有多个网络接口(如内网和外网),确保每个接口的DNS配置是正确的,或者合理配置路由策略,以免解析混乱。
为新安装的CentOS 7配置DNS是一项基础但至关重要的任务,推荐大多数用户使用方法一(修改/etc/sysconfig/network-scripts/ifcfg-ens33
文件),因为它提供了持久、可靠的配置,理解不同配置文件之间的关系,能够让你在遇到问题时快速定位和解决。
一个稳定可靠的DNS配置是你的服务器畅游互联网世界的基石,花几分钟时间正确配置它,将为后续的软件安装、系统更新和服务部署扫清无数障碍,你的CentOS 7宝剑已经开刃,可以去更广阔的世界闯荡了!
文章摘自:https://idc.huochengrm.cn/dns/14368.html
评论