如何检查 Linux 中是否配置了 DNS 服务器

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查你的 Linux 系统是否配置了 DNS 服务器。我们将查看主要配置文件 /etc/resolv.conf 来确定已配置的 DNS 服务器。

接下来,你将使用 nslookup 命令测试 DNS 解析,并验证你的系统能否成功地将域名转换为 IP 地址。最后,我们将检查 systemd-resolved 配置文件 /etc/systemd/resolved.conf,以了解本地 DNS 解析器服务是如何配置的。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") linux/RemoteAccessandNetworkingGroup -.-> linux/ip("IP Managing") subgraph Lab Skills linux/cat -.-> lab-558709{{"如何检查 Linux 中是否配置了 DNS 服务器"}} linux/netstat -.-> lab-558709{{"如何检查 Linux 中是否配置了 DNS 服务器"}} linux/ping -.-> lab-558709{{"如何检查 Linux 中是否配置了 DNS 服务器"}} linux/ip -.-> lab-558709{{"如何检查 Linux 中是否配置了 DNS 服务器"}} end

使用 cat /etc/resolv.conf 检查 DNS

在这一步中,我们将首先了解你的 Linux 系统是如何在互联网上查找网站和服务的。这个过程称为 DNS 解析,它由一个服务来处理,该服务将人类可读的域名(如 google.com)转换为计算机可读的 IP 地址(如 172.217.160.142)。

在许多 Linux 系统上,DNS 解析的主要配置文件是 /etc/resolv.conf。该文件告诉系统要使用哪些 DNS 服务器。

让我们使用 cat 命令查看这个文件的内容。cat 命令是一个简单但强大的工具,用于显示文件的内容。

如果终端尚未打开,请打开它。你可以在桌面左侧找到 Xfce 终端 图标。

现在,输入以下命令并按回车键:

cat /etc/resolv.conf

你应该会看到类似以下的输出:

## This is /run/systemd/resolve/stub-resolv.conf.
## Handled by systemd-resolved(8).
## DNS servers configured in /etc/systemd/resolved.conf.
nameserver 127.0.0.53
options edns0 trust-ad

让我们来分析一下输出内容:

  • # 开头的行是注释,系统会忽略这些行。
  • nameserver 127.0.0.53:这一行是这里最重要的部分。它指定了系统将使用的 DNS 服务器的 IP 地址。在这种情况下,127.0.0.53 是一个特殊的 IP 地址,它指向一个本地 DNS 解析器服务,通常是 systemd-resolved,我们稍后会详细介绍。这个本地解析器会将你的 DNS 请求转发到外部 DNS 服务器。
  • options edns0 trust-ad:这些是与 DNS 查询相关的选项。edns0 是 DNS 的扩展机制,trust-ad 与 DNSSEC(DNS 安全扩展)有关。目前你不需要担心这些选项。

了解 /etc/resolv.conf 是解决与 DNS 相关的网络连接问题的第一步。如果这个文件缺失或包含错误信息,你的系统可能无法解析域名。

点击 继续 进入下一步。

使用 nslookup 测试 DNS 解析

在上一步中,我们查看了 /etc/resolv.conf 文件,该文件告知系统在哪里可以找到 DNS 服务器。现在,让我们使用 nslookup 命令来实际测试系统是否能够解析域名。

nslookup 是一个命令行工具,用于查询域名系统 (DNS),以获取域名与 IP 地址的映射关系,或查询任何其他特定的 DNS 记录。它是进行网络故障排查的基础工具。

让我们使用 nslookup 来查找 example.com 的 IP 地址。在终端中输入以下命令并按下回车键:

nslookup example.com

你应该会看到类似以下的输出:

Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	example.com
Address: 93.184.216.34

让我们来分析一下这个输出:

  • Server: 127.0.0.53:这显示了 nslookup 用于查询的 DNS 服务器的 IP 地址。正如我们在上一步中看到的,这是 /etc/resolv.conf 中指定的本地解析器。
  • Address: 127.0.0.53#53:这是 DNS 服务器的 IP 地址和端口号。DNS 通常使用端口 53。
  • Non-authoritative answer::这表明该答案来自一个缓存 DNS 服务器,而不是 example.com 的权威服务器。
  • Name: example.com:这是你查询的域名。
  • Address: 93.184.216.34:这是 DNS 服务器为 example.com 返回的 IP 地址。当你尝试访问 example.com 时,你的计算机将连接到这个地址。

如果 nslookup 返回了一个 IP 地址,这意味着你的系统成功解析了该域名。如果失败,你可能会看到一条错误消息,表明 DNS 解析存在问题。

你也可以尝试解析其他域名,例如 google.comlabex.io

nslookup google.com

输出将显示与 google.com 关联的 IP 地址。请注意,单个域名可以有多个 IP 地址。

这个命令对于验证你的 DNS 配置是否正常工作以及查找特定域名的 IP 地址非常有用。

点击 继续 进入下一步。

使用 cat /etc/systemd/resolved.conf 检查 resolved 配置

在前面的步骤中,我们了解到 /etc/resolv.conf 通常指向一个本地地址 (127.0.0.53),该地址由 systemd-resolved 处理。这个服务是 systemd 系统和服务管理器的一部分,它为本地应用程序提供网络名称解析功能。

systemd-resolved 的配置通常位于 /etc/systemd/resolved.conf 文件中。让我们检查这个文件,看看本地解析器是如何配置的。

再次使用 cat 命令查看 /etc/systemd/resolved.conf 的内容。在终端中输入以下命令并按下回车键:

cat /etc/systemd/resolved.conf

你应该会看到类似以下的输出:

##  This file is part of systemd.
#
##  systemd is free software; you can redistribute it and/or modify it
##  under the terms of the GNU Lesser General Public License as published by
##  the Free Software Foundation; either version 2.1 of the License, or
##  (at your option) any later version.
#
## Entries in this file show the compile time defaults. Local configuration
## should be placed in a file located in /etc/systemd/resolved.conf.d/.
## See resolved.conf(5) for details.

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=yes
#LLMNR=yes
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yes

让我们来看看这个文件的关键部分:

  • 文件开头的注释解释了其用途和许可信息。
  • [Resolve]:这标志着名称解析主配置部分的开始。
  • DNS=:这行被注释掉了,通常在这里你会列出 systemd-resolved 应使用的上游 DNS 服务器的 IP 地址。由于它被注释掉了,systemd-resolved 可能从其他来源(如你的网络配置,例如 DHCP)获取其 DNS 服务器信息。
  • FallbackDNS=:这行被注释掉了,它允许你指定备用 DNS 服务器,当 DNS= 中列出的主 DNS 服务器无法访问时将使用这些备用服务器。
  • 其他被注释掉的选项控制着 systemd-resolved 行为的各个方面,例如 DNSSEC 验证、基于 TLS 的 DNS、缓存以及对多播 DNS (mDNS) 和链路本地多播名称解析 (LLMNR) 的支持。

在这个环境中,实际使用的 DNS 服务器可能由底层网络基础设施(Docker 容器环境)提供。systemd-resolved 充当本地缓存和转发器。

理解 /etc/systemd/resolved.conf 对于在使用 systemd-resolved 的系统上进行高级 DNS 配置和故障排除非常重要。

你现在已经成功检查了这个 Linux 系统上与 DNS 解析相关的主要配置文件。

点击 继续 完成本次实验。

总结

在本次实验中,我们学习了如何检查 Linux 系统上的 DNS 服务器配置。首先,我们使用 cat 命令查看了 /etc/resolv.conf 文件,它是指定系统所使用的 DNS 服务器的主要配置文件。我们了解到,以 # 开头的行是注释,而 nameserver 行则表示 DNS 服务器的 IP 地址,通常是像 127.0.0.53 这样的本地解析器,由 systemd-resolved 处理。

接着,我们使用 nslookup 命令测试了 DNS 解析,以验证配置的 DNS 服务器是否能成功将域名转换为 IP 地址。最后,我们使用 cat 命令查看 /etc/systemd/resolved.conf 文件,检查了 systemd-resolved 服务的配置,该文件进一步详细说明了本地 DNS 解析器的配置方式以及如何将请求转发到外部 DNS 服务器。这些步骤让你对 Linux 上 DNS 的配置和测试有了基本的了解。