5154

Good Luck To You!

CentOS DNS主机解析失败该如何排查解决?

在管理和维护 CentOS 服务器时,理解并正确配置 DNS 与主机名解析是至关重要的基础技能,这直接关系到服务器能否与网络中的其他设备顺畅通信,以及能否通过友好的名称而非难以记忆的 IP 地址来访问服务,本文将深入探讨在 CentOS 环境下,本地主机文件(/etc/hosts)与 DNS 解析配置(/etc/resolv.conf 及 NetworkManager)的工作原理、配置方法及其协同关系。

CentOS DNS主机解析失败该如何排查解决?

本地主机名解析:/etc/hosts 文件

/etc/hosts 是一个存在于所有类 Unix 操作系统(包括 CentOS)中的纯文本文件,它的作用是在本地提供一个静态的、优先级最高的主机名到 IP 地址的映射关系,当系统尝试解析一个主机名时,它会首先查询这个文件。

文件格式与解析优先级

/etc/hosts 文件的每一行通常包含三个字段,由空格或制表符分隔:

IP_address hostname aliases

  • IP_address: 目标主机的 IP 地址(IPv4 或 IPv6)。
  • hostname: 规范的主机名,通常是完全限定域名(FQDN)。
  • aliases: (可选) 主机名的别名,可以有多个。

一个典型的 CentOS 默认 hosts 文件如下所示:

0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

这两行分别定义了 IPv4 和 IPv6 环境下的本地回环地址,关键在于,/etc/hosts 的解析优先级高于 DNS 服务器,这意味着,如果一个主机名同时存在于 hosts 文件和 DNS 记录中,系统将无条件采用 hosts 文件中定义的 IP 地址。

如何编辑 /etc/hosts

编辑此文件需要 root 权限,你可以使用 vinano 等文本编辑器,为了方便本地开发,我们希望将域名 dev.example.com 指向本地服务器的 IP 168.1.50

CentOS DNS主机解析失败该如何排查解决?

  1. 使用 sudo 打开文件:

    sudo vi /etc/hosts
  2. 在文件末尾添加新的一行:

    168.1.50   dev.example.com dev
  3. 保存并退出编辑器,此后,任何在服务器上对 dev.example.comdev 的访问请求都会被直接指向 168.1.50,而不会去查询外部 DNS。

DNS 解析配置:/etc/resolv.conf 与 NetworkManager

当一个主机名在 /etc/hosts 中找不到对应条目时,系统便会转向 DNS 服务器进行查询。/etc/resolv.conf 文件正是用来指定系统使用哪些 DNS 服务器的配置文件。

/etc/resolv.conf 的核心指令

  • nameserver: 指定 DNS 服务器的 IP 地址,可以指定多个,系统会按顺序依次查询,直到获得响应或查询失败。
    nameserver 8.8.8.8
    nameserver 8.8.4.4
  • search: 定义一个域名列表,当查询一个不包含点(如 server1)的主机名时,系统会自动尝试依次附加这些域名进行查询,如果 search mydomain.com local,查询 server1 会依次尝试 server1.mydomain.comserver1.local
    search mydomain.com
  • domain: (可选) 定义本地域名,功能与 search 类似,但只能指定一个域名。

现代 CentOS 中的持久化配置

在较新的 CentOS 版本(如 7, 8, 9)中,直接手动编辑 /etc/resolv.conf 文件通常不是最佳实践,因为网络服务由 NetworkManager 管理,它在重启或网络配置变更时会覆盖此文件。

为了使 DNS 配置持久化,推荐使用 nmcli(NetworkManager 命令行工具)来修改网络连接的配置,为名为 eth0 的网络接口设置 DNS 服务器:

CentOS DNS主机解析失败该如何排查解决?

# 设置 DNS 服务器
sudo nmcli con mod eth0 ipv4.dns "8.8.8.8 1.1.1.1"
# 设置 DNS 搜索域
sudo nmcli con mod eth0 ipv4.dns-search "mydomain.com"
# 重启网络连接以应用更改
sudo nmcli con down eth0 && sudo nmcli con up eth0

通过这种方式,NetworkManager 会自动生成并维护正确的 /etc/resolv.conf 文件,确保配置在网络重启后依然有效。

为了更清晰地理解两者的关系,可以参考下表:

特性 /etc/hosts /etc/resolv.conf (DNS)
作用范围 本机单台 整个网络(通过DNS服务器)
解析优先级 低(在hosts之后查询)
动态性 静态,需手动编辑 动态,由DNS服务器响应
适用场景 本地开发、测试、屏蔽特定域名、加速常用域名访问 解析互联网域名、内部网络服务域名
管理方式 直接编辑文本文件 推荐使用 nmcli 等工具管理

当一个应用程序(如 pingcurl)需要解析主机名时,CentOS 系统遵循以下顺序:

  1. 查询 /etc/hosts 文件,如果找到匹配项,立即返回对应的 IP 地址。
  2. 如果未找到,则查询 /etc/resolv.conf 中配置的 nameserver,向 DNS 服务器发起查询请求。

掌握这一流程对于网络故障排查至关重要,当你发现一个域名解析的 IP 地址不符合预期时,首先就应该检查 /etc/hosts 文件中是否存在覆盖条目。


相关问答FAQs

Q1: 我编辑了 /etc/resolv.conf 文件添加了新的 DNS 服务器,但重启服务器后配置就消失了,这是为什么? A: 这是因为在现代的 CentOS 版本中,网络配置(包括 DNS)由 NetworkManager 服务统一管理。NetworkManager 会在网络启动或重置时根据其自身的配置数据库重新生成 /etc/resolv.conf 文件,从而覆盖你的手动修改,为了使 DNS 配置永久生效,你应该使用 nmcli 命令来修改网络连接的属性,sudo nmcli con mod <连接名称> ipv4.dns "你的DNS服务器地址",然后重启连接,这样,NetworkManager 就会将你的设置持久化保存。

Q2: 如果我在 /etc/hosts 文件和公共 DNS 服务器中都设置了同一个域名(www.google.com),但指向了不同的 IP 地址,我的浏览器最终会访问哪一个? A: 你的浏览器最终会访问 /etc/hosts 文件中指定的 IP 地址,如前所述,Linux 系统的名称解析顺序是优先查询本地的 /etc/hosts 文件,只有当在该文件中找不到匹配的主机名条目时,系统才会继续向 /etc/resolv.conf 中指定的 DNS 服务器发起查询。/etc/hosts 文件中的配置具有最高的优先级,可以用来强制将某个域名指向任意 IP 地址,常用于开发测试或屏蔽恶意网站。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.