在Linux系统中,查询DNS服务器地址最直接的方法是通过查看/etc/resolv.conf文件或使用systemd-resolve命令,前者适用于传统配置,后者适用于现代 systemd 系统。
很多刚接触 Linux 的朋友在排查网络故障时,往往卡在不知道当前系统到底在用什么 DNS 服务器,这就像去医院看病不知道挂哪个科室一样,方向错了,后面的努力都是白费,Linux 的 DNS 配置并没有 Windows 那么直观的图形界面,但它背后的逻辑非常清晰,只要掌握了几个关键命令和配置文件的位置,你就能像老网管一样,一眼看穿网络的“底细”。
传统方式:直接读取 resolv.conf 配置文件
这是最经典、也最通用的方法,在绝大多数 Linux 发行版中,/etc/resolv.conf 是系统的 DNS 解析核心配置文件,它记录了系统在进行域名解析时,应该优先联系哪台 DNS 服务器。
使用 cat 命令查看文件内容
你可以直接在终端中输入以下命令:
cat /etc/resolv.conf
输出结果通常长这样:
nameserver 8.8.8.8 nameserver 114.114.114.114 search localdomain
这里的 nameserver 后面跟随的 IP 地址,就是系统正在使用的 DNS 服务器地址,如果有多个 nameserver 行,系统会按照从上到下的顺序依次尝试,如果第一个 DNS 无响应,才会尝试第二个。
注意事项:文件可能被覆盖
需要注意的是,在某些使用 NetworkManager 或 systemd-networkd 的系统上,/etc/resolv.conf 可能只是一个符号链接(Symlink),指向 /run/systemd/resolve/stub-resolv.conf 或其他动态生成的文件,这意味着你直接修改这个文件,重启网络服务后可能会失效,理解它背后的管理机制比单纯修改文件更重要。
现代方式:使用 systemd-resolve 命令查询
随着 systemd 成为主流 Linux 发行版(如 Ubuntu 16.04+、CentOS 7+、Debian 8+)的初始化系统,传统的 resolv.conf 逐渐被更强大的 systemd-resolved 服务取代,这种方式不仅能看到 DNS,还能看到详细的解析状态。

查看全局 DNS 配置
运行以下命令可以获取当前系统的全局 DNS 信息:
systemd-resolve --status
或者在较新的系统中,使用更简洁的命令:
resolvectl status
输出信息非常丰富,你会看到类似这样的结构:
Global
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 8.8.8.8
DNS Servers: 8.8.8.8 114.114.114.114
DNS Domain: ~.
这里清晰地列出了 Current DNS Server(当前正在使用的 DNS)和 DNS Servers(备用 DNS 列表),这种方法的优势在于,它能区分不同网络接口(如 eth0, wlan0)的 DNS 配置,让你知道哪个网卡在用哪个 DNS。
查询特定接口的 DNS
如果你的服务器有多个网卡,比如同时连接了内网和外网,你可能想知道某个特定接口(eth0)使用的是哪个 DNS,可以使用:
systemd-resolve --status eth0
或者
resolvectl status eth0
这样你就能精准定位问题,避免因为混淆不同网络的 DNS 设置而导致解析错误。
高级技巧:使用 dig 和 nslookup 验证 DNS
我们不仅想知道“系统配置了哪个 DNS”,更想知道“这个 DNS 是否真的能解析域名”以及“解析结果是什么”,这时候,dig 和 nslookup 就成了必不可少的工具。
dig 命令:精准查询
dig(Domain Information Groper)是网络管理员最常用的 DNS 查询工具,它不仅显示结果,还显示查询过程、耗时等详细信息。
查询百度百度的 DNS 服务器地址,可以使用:
dig @8.8.8.8 www.baidu.com
这里的 @8.8.8.8 指定了查询的 DNS 服务器,输出结果中,ANSWER SECTION 部分会显示解析出的 IP 地址,如果查询成功,你会看到

status: NOERROR,这表明 DNS 解析正常。
nslookup 命令:简单直观
nslookup 是一个更简单的交互式工具,适合快速测试。
nslookup www.baidu.com
输出示例:
Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: www.baidu.com Address: 14.215.177.39
这里显示的 Server 就是实际处理你查询请求的 DNS 服务器地址,如果这个地址和你预期的不一致,说明你的系统可能受到了本地缓存或上游 DNS 的影响。
不同场景下的 DNS 查询对比
为了让你更直观地理解,我们将几种常用方法进行对比。
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
cat /etc/resolv.conf |
快速查看当前生效的 DNS | 简单直接,几乎所有 Linux 都支持 | 无法区分不同接口,可能被动态覆盖 |
systemd-resolve --status |
现代 systemd 系统,多网卡环境 | 信息详细,可区分接口,显示状态 | 仅适用于 systemd 系统,旧系统不支持 |
dig @IP domain |
验证特定 DNS 的解析能力 | 精准测试,显示详细过程 | 需要知道目标域名,稍显复杂 |
nslookup domain |
快速测试 DNS 连通性 | 简单易用,交互友好 | 信息较少,不如 dig 详细 |
业内专家指出,在排查网络问题时,建议先使用

cat /etc/resolv.conf 确认系统配置,再用 systemd-resolve --status 确认接口状态,最后用 dig 验证解析结果,这种层层递进的方法,能覆盖 90% 以上的 DNS 问题。
常见问题解答:Linux如何查询DNS服务器地址
如何永久修改 Linux 的 DNS 服务器地址?
修改 DNS 的方法取决于你的网络管理工具,如果使用 NetworkManager,可以使用 nmcli 命令:
nmcli con mod "连接名称" ipv4.dns "8.8.8.8 114.114.114.114" nmcli con up "连接名称"
如果使用 systemd-networkd,则需要编辑 /etc/systemd/network/ 下的 .network 文件,添加 DNS= 行,直接修改 /etc/resolv.conf 通常不是推荐做法,因为它可能被覆盖。
为什么 dig 查询的结果和 resolv.conf 中的 DNS 不一致?
这通常是因为本地 DNS 缓存或递归解析器的存在。resolv.conf 中的 DNS 是系统配置的“第一跳”,但实际查询可能经过本地缓存(如 dnsmasq 或 systemd-resolved 的缓存)或上游递归服务器。dig @IP 直接查询特定服务器,绕过了本地缓存,因此结果可能更直接反映该服务器的状态。
如何测试 DNS 解析速度?
可以使用 dig 的 +time 和 +tries 参数来测试响应时间:
dig @8.8.8.8 www.baidu.com +time=2 +tries=1
输出中的 Query time 字段显示了查询耗时(毫秒),数值越小,表示该 DNS 服务器响应越快,对于企业用户来说,选择低延迟的 DNS 服务器能显著提升网页加载速度,据统计,优化 DNS 解析速度可使网页打开时间缩短 20%-30%。
查询 DNS 服务器地址并非难事,关键在于理解 Linux 的网络架构,从简单的文件读取到复杂的命令验证,每一步都揭示了系统背后的逻辑,掌握这些方法,不仅能解决眼前的网络问题,更能让你对 Linux 网络管理有更深的理解,配置只是第一步,验证才是关键。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/403939.html
