0Pricing
Linux Server Deployment & SSH Mastery · 课时

DNS 配置与故障排查

理解 Linux 服务器如何将主机名解析为 IP 地址:配置解析器、编辑 /etc/hosts,并使用 dig、nslookup 和 host 诊断即使网络正常也会导致连接中断的 DNS 问题。

DNS 配置与故障排查 是 CoddyKit 上的免费 Linux Server Deployment & SSH Mastery 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Server Deployment & SSH Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

DNS 为何对服务器很重要

即使您的网络和防火墙设置都无可挑剔,如果服务器无法解析名称,仍然可能无法访问外部网络。DNS 会将 example.com 这样的便于人类识别的主机名转换为 IP 地址。

了解名称解析的工作方式,以及如何排查相关问题,是必备的网络技能。

解析路径

当程序需要获取某个名称对应的 IP 时,Linux 通常会按以下顺序检查来源:

  • 本地 /etc/hosts 文件
  • 已配置的 DNS 服务器(解析器)

该顺序由 /etc/nsswitch.conf 中的 hosts: 行控制。

grep hosts /etc/nsswitch.conf
# hosts: files dns

/etc/hosts 文件

/etc/hosts 会在本地将名称映射到 IP,从而绕过 DNS。它非常适合测试、配置内部主机名,或将域名固定到特定 IP。

每一行都包含一个 IP,后面跟着一个或多个名称。

127.0.0.1   localhost
192.168.1.50  db.internal db

解析器配置在哪里

传统配置文件是 /etc/resolv.conf,其中列出了名称服务器。在现代系统中,它通常由 systemd-resolved 或 NetworkManager 管理,因此直接编辑可能不会持久生效。

修改任何内容之前,请先检查实际使用的配置。

cat /etc/resolv.conf
resolvectl status

设置 DNS 服务器

在使用 systemd-resolved 的系统上,请按网络接口设置 DNS,而不要编辑 resolv.conf。在基于 Netplan 的服务器上,请在 YAML 配置中定义它。

此示例为一个网络接口设置公共解析器。

sudo resolvectl dns eth0 1.1.1.1 8.8.8.8
resolvectl dns eth0

使用 dig 查询记录

dig 是功能最强大的 DNS 查询工具。它会显示应答以及查询元数据。

+short 选项会将输出缩减为仅显示应答,非常适合脚本使用。

dig example.com
dig +short example.com

查询特定记录类型

DNS 会存储多种记录类型。请指定类型,以检查邮件服务器、名称服务器或别名。

  • A — IPv4 地址
  • AAAA — IPv6 地址
  • MX — 邮件服务器
  • NS — 名称服务器
  • CNAME — 别名
dig example.com MX +short
dig example.com NS +short

nslookup 和 host

nslookup 和 host 是比 dig 更简单的替代工具。它们适合快速检查以及反向查询(从 IP 查询名称)。

反向查询会查询某个地址对应的 PTR 记录。

host example.com
nslookup example.com
dig -x 8.8.8.8 +short

查询指定服务器

要测试某个解析器是否存在问题,请使用 @ 语法将查询指向指定服务器。如果公共解析器可以正常工作,而您的解析器不行,那么问题就在您的 DNS 配置中。

dig @1.1.1.1 example.com +short
dig @8.8.8.8 example.com +short

排查问题的流程

当名称无法解析时,请逐层排查:

  • 您能直接 ping 通某个 IP 吗?(排除网络问题)
  • dig @1.1.1.1 name 能正常工作吗?(排除名称本身的问题)
  • 使用默认解析器运行 dig name 能正常工作吗?(定位解析器配置问题)
  • 是否存在过时的 /etc/hosts 条目覆盖了该结果?
ping -c1 1.1.1.1
dig @1.1.1.1 example.com +short
dig example.com +short

最佳实践

确保名称解析可靠:

  • 至少使用两个解析器以实现冗余
  • 如果 resolv.conf 由系统自动管理,请不要手动编辑
  • 使用 /etc/hosts 进行测试,但要清理过时条目
  • 在脚本中优先使用 dig +short,以获得简洁输出

快速检查

测试您对 DNS 问题排查的掌握情况。

回顾

现在您可以在服务器上配置和排查 DNS:

  • 通过 /etc/nsswitch.conf 和 /etc/hosts 配置解析顺序
  • 在 resolv.conf / systemd-resolved 中配置解析器
  • 使用 dig、host 和 nslookup 查询,包括指定记录类型和服务器
  • 采用分层的问题排查流程

这为您的网络和防火墙技能补充了名称解析这一层。

常见问题解答

「DNS 配置与故障排查」课时是免费的吗?

是的 — 「DNS 配置与故障排查」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Linux Server Deployment & SSH Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

「DNS 配置与故障排查」这节课中我会学到什么?

理解 Linux 服务器如何将主机名解析为 IP 地址:配置解析器、编辑 /etc/hosts,并使用 dig、nslookup 和 host 诊断即使网络正常也会导致连接中断的 DNS 问题。 你通过在浏览器中直接运行的动手代码来练习 Linux Server Deployment & SSH Mastery,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Linux Server Deployment & SSH Mastery 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Linux Server Deployment & SSH Mastery 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「DNS 配置与故障排查」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Linux Server Deployment & SSH Mastery 课中编写并运行代码吗?

能。每节 Linux Server Deployment & SSH Mastery 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 基本网络配置
  2. 了解防火墙(UFW/firewalld)
  3. 端口管理与安全
  4. DNS 配置与故障排查
← 返回 Linux Server Deployment & SSH Mastery