菜鸟科技网

Ubuntu命令如何查看DNS配置?

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

Ubuntu命令如何查看DNS配置?-图1
(图片来源网络,侵删)

以下是几种最常用和最有效的方法,从简单到复杂排列。


使用 resolvectl (推荐,现代系统)

对于使用 systemd-resolved 服务管理 DNS 的现代 Ubuntu 系统(通常是 Ubuntu 18.04 及更高版本),resolvectl 是官方推荐的命令。

查看全局 DNS 服务器

这个命令会显示系统当前使用的 DNS 服务器列表,以及搜索域等信息。

resolvectl status

输出示例:

Ubuntu命令如何查看DNS配置?-图2
(图片来源网络,侵删)
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 自动生成和管理。

Ubuntu命令如何查看DNS配置?-图3
(图片来源网络,侵删)

直接查看文件内容

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.18.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.DNSIP6.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 字段。


使用 nslookupdig (测试 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 SECTIONANSWER SECTION 下方是详细信息,在最底部,Query timeSERVER 字段也很有用。


如何选择?

命令/文件 用途 优点 缺点
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
分享:
扫描分享到社交APP
上一篇
下一篇