Ubuntu Server 20.04 重启后DNS失效的根治方案:深入解析systemd-resolved服务
每次重启Ubuntu Server 20.04后都要手动修复DNS解析?这个看似简单的问题背后隐藏着systemd-resolved服务与系统启动流程的微妙关系。作为运维人员,我们需要的不是临时解决方案,而是彻底理解问题本质并一劳永逸地修复它。
1. 问题现象与初步诊断
当你在Ubuntu Server 20.04上执行ping qq.com时,看到"Temporary failure in name resolution"错误,但直接ping IP地址如8.8.8.8却能正常工作,这明确指向了DNS解析问题。这种症状通常表现为:
- 重启后DNS解析立即失效
- 手动重启systemd-resolved服务后恢复正常
- 网络连接本身没有问题(IP通信正常)
关键诊断命令:
bash复制resolvectl status
这个命令会显示systemd-resolved服务的当前状态,包括使用的DNS服务器和解析状态。正常情况下,你应该看到类似这样的输出:
code复制Global
Protocols: LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. systemd-resolved服务工作原理
要彻底解决问题,必须理解systemd-resolved在Ubuntu系统中的角色。这个服务是systemd生态系统的一部分,负责:
- DNS解析管理:集中处理所有DNS请求
- 缓存功能:提高重复查询的响应速度
- 多DNS源整合:支持多种配置来源(Netplan、DHCP等)
- DNS安全扩展:可选支持DNSSEC验证
服务依赖关系:
code复制systemd-resolved.service
├─ systemd-networkd.service (可选)
└─ dbus.service
当系统启动时,这些服务的启动顺序至关重要。如果systemd-resolved在网络配置完全就绪前启动,就会导致DNS配置不完
