核心命令
nslookup (Name LookUP)
这是最经典、最广为人知的 DNS 查询工具,它有两种模式:交互式和非交互式。

基本用法 (非交互式):
nslookup [域名] [DNS服务器]
[域名]: 你想要查询的域名,www.google.com。[DNS服务器](可选): 指定要使用的 DNS 服务器,8.8.8(Google DNS) 或1.1.1(Cloudflare DNS),如果不指定,则使用系统默认的 DNS 服务器。
示例:
# 查询 www.google.com 的 A 记录,使用默认 DNS 服务器 $ nslookup www.google.com Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: Name: www.google.com Address: 142.250.74.78 Name: www.google.com Address: 2404:6800:4005:80c::200e # 查询 www.google.com 的 A 记录,使用 Google DNS 服务器 $ nslookup www.google.com 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: www.google.com Address: 142.250.74.78 Name: www.google.com Address: 2404:6800:4005:80c::200e # 查询 MX (邮件交换) 记录 $ nslookup -query=mx example.com
交互式模式:
直接输入 nslookup 进入交互模式,然后输入命令。

$ nslookup > set type=mx # 设置查询类型为 MX 记录 > example.com > exit # 退出交互模式
dig (Domain Information Groper)
dig 是一个比 nslookup 更强大、更灵活的 DNS 查询工具,其输出信息更详细、格式更易于脚本解析,在现代 Linux 系统中,它是首选的 DNS 诊断工具。
基本用法:
dig [@DNS服务器] [域名] [查询类型]
@DNS服务器(可选): 指定 DNS 服务器,前面需要加 符号。[域名]: 你想要查询的域名。[查询类型](可选): 指定查询的记录类型,如A,AAAA,MX,TXT,NS,SOA等,默认是A。
示例:
# 查询 www.google.com 的 A 记录,使用默认 DNS 服务器 $ dig www.google.com # 查询 www.google.com 的 A 记录,使用 Google DNS 服务器 $ dig @8.8.8.8 www.google.com # 查询 example.com 的 MX 记录 $ dig example.com MX # 查询 example.com 的所有记录 (ANY) $ dig example.com ANY # 只显示查询答案部分,适合脚本使用 $ dig +short www.google.com 142.250.74.78 2404:6800:4005:80c::200e
dig 输出详解:
dig 的输出分为几个部分:

HEADER: 请求的头部信息。QUESTION: 你提出的查询问题。ANSWER SECTION: DNS 服务器返回的答案。AUTHORITY SECTION: 权威 DNS 服务器信息。ADDITIONAL SECTION: 额外的辅助信息。QUERY TIME: 查耗时,单位毫秒。
host
host 是一个简单、快速的命令行工具,专门用于 DNS 查询,它的输出比 dig 简洁,比 nslookup 更现代化。
基本用法:
host [域名] [DNS服务器]
[域名]: 你想要查询的域名。[DNS服务器](可选): 指定 DNS 服务器。
示例:
# 查询 www.google.com,使用默认 DNS 服务器 $ host www.google.com Using domain server: Name: 192.168.1.1 Address: 192.168.1.1#53 Aliases: www.google.com has address 142.250.74.78 www.google.com has address 142.250.74.110 www.google.com has IPv6 address 2404:6800:4005:80c::200e www.google.com has IPv6 address 2404:6800:4005:80c::2010 # 查询 example.com 的 MX 记录 $ host -t MX example.com # 使用 Google DNS 服务器查询 $ host www.google.com 8.8.8.8
其他相关命令
getent hosts
这个命令并不直接是 DNS 查询工具,但它会查询系统的名称服务开关库,包括 /etc/hosts 文件和配置的 DNS 服务,它的作用是“解析主机名到 IP 地址”。
基本用法:
getent hosts [域名或IP]
示例:
# 解析 www.google.com $ getent hosts www.google.com 142.250.74.78 www.google.com 142.250.74.110 www.google.com 2404:6800:4005:80c::200e www.google.com 2404:6800:4005:80c::2010 www.google.com # 解析 IP 到主机名 (反向解析) $ getent hosts 8.8.8.8 dns.google. has address 8.8.8.8
注意: getent hosts 的行为受 /etc/nsswitch.conf 文件控制,如果配置为 hosts: files dns,它会先检查 /etc/hosts,再查询 DNS。
ping
ping 通过发送 ICMP 包来测试网络连通性,但它内部会首先对目标主机名进行 DNS 解析。
示例:
$ ping www.google.com PING www.google.com (142.250.74.78) 56(84) bytes of data. 64 bytes from hkg12s01-in-f14.1e100.net (142.250.74.78): icmp_seq=1 time=15.2 ms ...
可以看到,ping 的第一行输出了域名解析后的 IP 地址。
如何检查当前系统使用的 DNS 服务器?
在使用上述命令时,如果不指定 DNS 服务器,它们会使用系统默认的配置,你可以通过以下文件查看:
-
/etc/resolv.conf(最直接) 这个文件列出了系统当前使用的 DNS 服务器(nameserver)和搜索域(search)。cat /etc/resolv.conf # 输出示例 nameserver 192.168.1.1 nameserver 8.8.8.8 search localdomain
-
NetworkManager (桌面系统, 如 Ubuntu, Fedora) 对于使用 NetworkManager 的系统,DNS 配置通常由它管理,你可以使用
nmcli查看。nmcli connection show "你的连接名" | grep ipv4.dns # 或查看所有活跃连接的 DNS nmcli connection show --active | grep ipv4.dns
-
systemd-resolved(现代发行版, 如 Ubuntu 18.04+, Debian 10+) 许多现代系统使用systemd-resolved作为本地 DNS 解析器,它会在0.0.53监听,并实际转发到配置的 DNS 服务器。# 查看 systemd-resolved 的 DNS 配置 resolvectl status
| 命令 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
dig |
功能强大,输出详细,格式规范,适合脚本 | 相对复杂,初学者可能觉得输出信息过多 | 首选的 DNS 诊断工具,深度排查,自动化脚本 |
nslookup |
经典,几乎所有系统都自带,交互式模式方便 | 输出格式不一致,功能相对有限 | 快速查询,兼容性要求高的旧环境 |
host |
简单、快速、输出清晰 | 功能比 dig 少 |
快速检查域名解析,获取 MX 等记录 |
getent hosts |
反映系统最终解析结果(包含 hosts 文件) | 不是一个纯粹的 DNS 工具 | 检查系统是否能正确解析域名,排查 /etc/hosts 问题 |
ping |
测试网络连通性,附带 DNS 解析 | 无法控制查询类型(如 MX),输出不详细 | 快速测试主机名是否可达和解析是否正常 |
推荐使用场景
- 日常快速检查:
host或ping。 - 深入故障排查:
dig是你的最佳选择,它能提供最全面的 DNS 交互信息。 - 编写脚本:
dig +short是提取 IP 地址等信息的利器。 - 检查系统配置:
getent hosts和cat /etc/resolv.conf。
