在 Ubuntu 系统中,查看 DNS 配置有多种方法,适用于不同的场景(查看系统全局设置、查看当前会话的缓存、或检查特定网卡的配置)。

以下是几种最常用和最有效的方法,从简单到复杂排列。
使用 resolvectl (推荐,现代系统)
对于使用 systemd-resolved 服务管理 DNS 的现代 Ubuntu 系统(通常是 Ubuntu 18.04 及更高版本),resolvectl 是官方推荐的命令。
查看全局 DNS 服务器
这个命令会显示系统当前使用的 DNS 服务器列表,以及搜索域等信息。
resolvectl status
输出示例:

Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1 8.8.8.8
DNS Domain: lan
- DNS Servers: 这里列出了所有配置的 DNS 服务器,系统会按顺序尝试使用它们。
- DNS Domain: 搜索域,用于解析不完整的主机名(查询
myhost会自动尝试myhost.lan)。
查询特定域名的 DNS 解析过程
这个命令非常有用,可以显示系统为了解析一个域名,实际查询了哪些 DNS 服务器以及结果。
resolvctl query [域名]
示例:查询 www.google.com
resolvectl query www.google.com
输出示例:
www.google.com: 142.250.199.110
-- link: enp3s0
-- scope: site
-- service: mdns
-- proto: udp, edge
-- family: inet2, IN
-- class: IN
-- ttl: 300
-- device: enp3s0 (ether)
- 这个输出不仅显示了 IP 地址,还告诉你查询是通过哪个网络接口 (
enp3s0) 和哪个 DNS 服务器完成的。
检查 /etc/resolv.conf 文件
/etc/resolv.conf 文件是传统的 DNS 配置文件,在 systemd-resolved 管理的系统上,它通常是一个符号链接,指向 /run/systemd/resolve/stub-resolv.conf,该文件由 systemd-resolved 自动生成和管理。

直接查看文件内容
cat /etc/resolv.conf
输出示例:
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub listener of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 127.0.0.53
nameserver 127.0.0.53: 这表示所有 DNS 请求都首先发送到本机的systemd-resolved服务(监听在0.0.53),该服务再负责将请求转发到配置的真实 DNS 服务器(如168.1.1或8.8.8)。
查看被管理的原始配置文件
如果你想看到 systemd-resolved 实际配置的上游 DNS 服务器,可以查看它管理的文件:
cat /run/systemd/resolve/resolv.conf
输出示例:
nameserver 192.168.1.1
nameserver 8.8.8.8
通常与 resolvectl status 中显示的 DNS 服务器一致。
使用 nmcli (NetworkManager 的命令行工具)
如果你的网络连接由 NetworkManager 管理(这是 Ubuntu 桌面版的默认情况),可以使用 nmcli 来查看和修改 DNS 设置。
查看活动连接的 DNS
nmcli device show [设备名]
示例:查看名为 enp3s0 的网卡配置
nmcli device show enp3s0
在输出中,寻找 IP4.DNS 或 IP6.DNS 字段。
输出示例:
...
IP4.DNS[1]: 8.8.8.8
IP4.DNS[2]: 1.1.1.1
IP4.DNS[3]: 192.168.1.1
...
查看所有连接的 DNS
nmcli connection show
这个命令会列出所有网络配置文件(包括禁用的),你可以从中找到 DNS 字段。
使用 nslookup 或 dig (测试 DNS 解析)
这两个工具不用于查看 配置,而是用于 测试 DNS 是否能正常工作,它们会告诉你当前系统实际使用的 DNS 服务器是如何解析域名的。
使用 nslookup
nslookup [域名]
示例:
nslookup www.github.com
输出示例:
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
www.github.com canonical name = github.com.
Name: github.com
Address: 140.82.121.3
Name: github.com
Address: 140.82.121.4
- Server: 显示了本次查询所使用的 DNS 服务器,在
systemd-resolved系统上,通常是0.0.53。
使用 dig
dig 提供了更详细的信息。
dig [域名]
示例:
dig www.github.com
在输出的 HEADER 部分,你会看到 ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345,在 QUESTION SECTION 和 ANSWER SECTION 下方是详细信息,在最底部,Query time 和 SERVER 字段也很有用。
如何选择?
| 命令/文件 | 用途 | 优点 | 缺点 |
|---|---|---|---|
resolvectl status |
查看全局 DNS 配置 (推荐) | 官方推荐,信息全面,清晰显示 DNS 服务器、搜索域等。 | 仅适用于 systemd-resolved 系统。 |
cat /etc/resolv.conf |
查看当前生效的 DNS 解析器 | 简单直接,所有系统都可用。 | 在现代系统上可能只看到本地回环地址,信息不完整。 |
nmcli device show |
查看 NetworkManager 管理的 DNS | 适用于 NetworkManager 环境,可以精确到每个网络连接。 | 需要知道设备名,信息分散。 |
nslookup / dig |
测试 DNS 解析是否正常 | 强大的测试工具,能验证 DNS 配置是否生效。 | 不用于查看配置,只用于测试结果。 |
日常使用建议:
- 快速查看全局配置:使用
resolvectl status。 - 测试某个网站是否能解析:使用
nslookup www.example.com。 - 排查 NetworkManager 相关问题:使用
nmcli device show。
