帮助中心 >
  关于网络安全 >
  Linux下如何查看DNS解析记录?

Linux下如何查看DNS解析记录?

时间 : 2025-12-15 15:02:15
编辑 : DNS.COM

  当出现域名无法访问、访问速度异常、解析结果不一致等情况时,第一步往往不是重启服务,而是查看DNS解析记录和解析过程是否正常。Linux系统本身提供了多种工具和途径,可以从不同层面帮助我们定位DNS解析行为。Linux并不会像Web服务器那样默认保存完整的“DNS解析历史记录”。所谓“查看DNS解析记录”,更多指的是通过系统配置、实时查询工具、缓存信息和日志手段,来观察当前或近期的DNS解析行为。这一点在理解后,后续的操作就会更加清晰。

  在Linux系统中,DNS解析的核心配置文件是 /etc/resolv.conf。这是系统进行域名解析时最基础、也是最重要的入口。通过查看该文件,可以知道当前系统使用了哪些DNS服务器以及解析顺序。常见的查看方式如下:

cat /etc/resolv.conf

  或者使用更适合长文件阅读的方式:

less /etc/resolv.conf

  在输出内容中,nameserver 后面所列出的IP地址,就是系统在解析域名时会请求的DNS服务器地址。如果你发现解析结果异常,首先应确认这里是否被篡改,尤其是在使用公共网络、云服务器或被入侵的环境中。有时DNS劫持问题的根源,正是这个文件被恶意修改。

  不过,仅查看DNS服务器配置,并不能直接反映“解析结果是否正确”。此时,就需要借助命令行查询工具来获取实时的DNS解析结果。其中最常用、也是最推荐的工具是 dig。相比传统的 nslookup,dig 输出信息更加详细,非常适合排查问题。

  使用 dig 查看某个域名的解析记录非常简单,例如:

dig example.com

  执行后,你会看到一段结构化输出,其中包含查询时间、使用的 DNS 服务器、返回的记录类型以及最终解析到的 IP 地址。重点关注 ANSWER SECTION,这里展示的就是 DNS 服务器返回的真实解析结果。如果你想查看特定类型的记录,例如 A 记录或 MX 记录,可以这样写:

dig example.com A
dig example.com MX

  在实际排障中,dig 还有一个非常有价值的用途,就是指定 DNS 服务器进行解析对比。这在判断“本地 DNS 是否被污染”时尤其重要。例如:

dig example.com @8.8.8.8

  通过将同一个域名分别交给不同 DNS 服务器解析,你可以快速判断解析异常是来源于本地配置,还是外部 DNS 服务的问题。

  如果你更倾向于使用较为简单直观的工具,nslookup 也是一个可选方案。虽然它在新系统中逐渐被边缘化,但在某些环境中仍然可用。例如:

nslookup example.com

  输出中同样会显示 DNS 服务器地址以及解析结果。相比 dig,nslookup 更适合做快速验证,而不适合深入分析解析链路。

  除了主动查询,很多人关心的是:Linux 能不能查看已经解析过的 DNS 记录? 这就涉及到 DNS 缓存的问题。默认情况下,大多数 Linux 系统本身并不缓存 DNS,而是将请求直接交给外部 DNS 服务器。但在一些环境中,系统会启用缓存服务,例如 systemd-resolved、dnsmasq 或 nscd。

  如果你的系统使用的是 systemd-resolved,可以通过以下命令查看当前缓存的 DNS 解析记录:

systemd-resolve --statistics

  虽然该命令不会直接列出所有域名,但可以确认缓存是否启用、缓存命中次数等信息。如果你希望查看某个域名的解析情况,可以使用:

resolvectl query example.com

  该命令会展示解析结果、使用的接口以及 DNS 服务器来源,对于排查多网卡、多 DNS 环境下的问题非常有帮助。

  and 如果系统中运行了 `nscd`(Name Service Cache Daemon),可以通过以下方式查看其状态:

nscd -g

  在输出中,你可以看到 hosts 缓存的统计信息,从侧面判断 DNS 是否走了缓存。如果缓存异常,清空缓存往往是排障的关键一步:

nscd -i hosts

  在某些服务器或网关环境中,还会部署 dnsmasq 作为本地 DNS 缓存和转发服务。如果启用了日志功能,dnsmasq 的日志中往往可以看到详细的 DNS 查询记录。这些日志通常位于:

/var/log/syslog

  或

/var/log/messages

  可以通过 grep 快速过滤 DNS 相关内容:

grep dnsmasq /var/log/syslog

  对于希望实时查看 DNS 解析过程的场景,例如怀疑系统在后台频繁请求异常域名,可以借助抓包工具 tcpdump。DNS 默认使用 53 端口,抓取相关流量的命令如下:

tcpdump -i eth0 port 53

  如果希望看到更直观的域名信息,而不是原始二进制数据,可以加上解析选项:

tcpdump -i eth0 port 53 -n

  通过这种方式,你可以实时看到系统正在查询哪些域名,这在安全分析和入侵排查中非常有价值。当然,抓包操作需要 root 权限,并且不适合长时间在高流量服务器上执行。

  此外,在排查 DNS 解析问题时,还应结合 /etc/hosts 文件一起检查。Linux 在解析域名时,会优先查询该文件,如果存在对应条目,将直接返回结果而不走 DNS。查看方式如下:

cat /etc/hosts

  有时访问异常并非 DNS 服务器问题,而是 hosts 文件中存在过期或错误的静态映射。

  从整体来看,Linux下查看 DNS解析记录并不是单一命令就能解决的问题,而是一个结合配置文件、查询工具、缓存机制和日志分析的综合过程。不同的工具各有侧重:resolv.conf 用于确认解析入口,dig 和 nslookup 用于验证解析结果,缓存工具帮助理解系统行为,而抓包则提供了最底层、最真实的数据视角。

DNS Amy
DNS Luna
DNS Becky
DNS NOC
标题
电子邮件地址
类型
信息
验证码
提交