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 +shortnslookup 和 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 反馈 — 无需本地设置。
此课程中的所有课时
- 基本网络配置
- 了解防火墙(UFW/firewalld)
- 端口管理与安全
- DNS 配置与故障排查