news 2026/4/20 14:23:21

别再乱改 netplan 和 resolv.conf 了!Ubuntu 20.04/22.04 DNS 解析问题的正确排查思路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再乱改 netplan 和 resolv.conf 了!Ubuntu 20.04/22.04 DNS 解析问题的正确排查思路

Ubuntu服务器DNS解析故障的终极排查指南:从误区到本质

当你面对Ubuntu服务器上反复出现的"Temporary failure in name resolution"错误时,是否也经历过这样的循环:修改netplan配置→无效;编辑resolv.conf→重启失效;调整resolved.conf→暂时有效但问题依旧?本文将带你跳出这个死胡同,直击现代Ubuntu网络架构的核心。

1. 为什么传统方法不再适用?

十年前,我们习惯直接修改/etc/resolv.conf来配置DNS。但在systemd时代,Ubuntu的网络栈已经重构。理解这一点,就能明白为什么老方法总是碰壁。

关键变化

  • systemd-resolved成为默认的DNS解析管理器
  • /etc/resolv.conf现在通常是一个符号链接
  • Netplan作为抽象层管理网络配置
  • 多个配置文件之间存在优先级关系

注意:直接修改resolv.conf就像在自动驾驶汽车上踩刹车——可能暂时有效,但会破坏系统设计的一致性。

2. 诊断工具箱:精准定位问题根源

遇到DNS问题时,别急着改配置,先运行这几个黄金命令:

resolvectl status systemctl status systemd-resolved journalctl -u systemd-resolved -n 50 --no-pager

解读诊断结果

输出项健康状态特征问题表现
Global DNS Servers显示可用的DNS服务器IP空白或错误的ISP DNS
Link DNS与网络接口匹配的DNS显示127.0.0.53但服务未运行
DNS Over TLS根据需求启用或禁用意外启用导致企业网络失败
Current DNS Server显示实际使用的服务器显示"loopback"但无缓存

我曾在一个企业环境中发现,虽然resolvectl status显示DNS配置正确,但journalctl日志暴露出TLS证书验证失败——这才是真正的罪魁祸首。

3. 配置的优先级迷宫:谁在真正生效?

现代Ubuntu中,DNS配置可能来自多个源头,理解它们的优先级至关重要:

  1. 最高优先级netplan apply生成的运行时配置
  2. 次优先级/etc/systemd/resolved.conf的静态设置
  3. 最低优先级:DHCP自动获取的DNS设置

典型误区对比

修改位置预期效果实际局限
/etc/resolv.conf立即改变DNS解析重启后被覆盖,仅临时有效
Netplan YAML文件持久化DNS设置需要正确理解YAML语法
resolved.conf系统级默认DNS不覆盖Netplan的接口特定设置
# 查看实际生效的DNS解析路径 systemd-resolve --statistics

4. 专业级解决方案:持久化修复DNS问题

基于多年运维经验,我总结出这个可靠的工作流程:

4.1 正确配置Netplan

network: version: 2 ethernets: eth0: dhcp4: no addresses: [192.168.1.10/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] search: [mydomain.com]

应用配置并检查:

sudo netplan apply networkctl status

4.2 优化systemd-resolved配置

编辑/etc/systemd/resolved.conf

[Resolve] DNS=8.8.8.8 1.1.1.1 FallbackDNS=9.9.9.9 208.67.222.222 Domains=mydomain.com DNSOverTLS=opportunistic

然后重启服务:

sudo systemctl restart systemd-resolved

4.3 确保服务持久化

防止重启后失效:

sudo systemctl enable systemd-resolved sudo systemctl start systemd-resolved

5. 高级技巧:DNS问题深度处理

场景一:企业内网DNS解析

resolvectl domain eth0 "internal.corp" resolvectl dns eth0 10.0.0.53

场景二:DNS缓存问题处理

sudo systemd-resolve --flush-caches resolvectl statistics | grep -i cache

场景三:多网络接口DNS策略

# 在Netplan中为不同接口指定不同DNS eth1: nameservers: addresses: [10.0.0.53] search: [internal.corp]

记住这个排查金律:先查状态,再改配置;先理解架构,再动手调整。Ubuntu的网络栈设计有其内在逻辑,与其对抗不如善用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 14:22:27

如何在Windows上直接运行安卓应用:APK Installer终极指南

如何在Windows上直接运行安卓应用:APK Installer终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接安装安卓应用,却…

作者头像 李华
网站建设 2026/4/20 14:22:27

rust-字符串(切片)、元组、结构体、枚举、数组

1.字符串(切片) 1. 基本概念 切片(Slice):指向集合中一段连续元素的引用,无所有权,只借用。字符串切片:&str,对 String 的部分 / 全部引用,只读。底层&am…

作者头像 李华
网站建设 2026/4/20 14:20:30

STM32 SDIO+DMA读写SD卡,为什么你的程序总卡死在等待函数里?

STM32 SDIODMA读写SD卡:破解等待函数卡死的五大关键陷阱 在嵌入式开发领域,SD卡存储方案因其高性价比和大容量特性成为主流选择。然而,当工程师们尝试在STM32平台上实现SDIODMA的高效读写时,一个令人头疼的问题频繁出现——程序在…

作者头像 李华
网站建设 2026/4/20 14:18:48

MySQL的索引类型

我来详细讲解MySQL的索引类型,这是面试高频考点,也是SQL优化的核心基础。一、按数据结构分类1. BTree索引(InnoDB默认)结构特点: [10 | 30 | 50] / | \ \ [3|7|9] [20|25] [40|45] [60|70|80] / | \ / \ / \ / | \ 叶子…

作者头像 李华