当前位置: 首页 > news >正文

Ubuntu Server重启后DNS又失效?一招搞定systemd-resolved开机自启

Ubuntu Server重启后DNS失效?根治systemd-resolved开机自启问题

刚部署完Ubuntu Server时,最让人抓狂的莫过于配置好的DNS解析在重启后莫名失效。那种"昨天还能用,今早全挂了"的体验,相信不少运维新手都深有体会。今天我们就来彻底解决这个幽灵问题——不是临时修复,而是让systemd-resolved服务真正实现可靠的自启动。

1. 问题现象与本质分析

当你在终端输入ping qq.com却看到"Temporary failure in name resolution"时,通常意味着DNS解析出了问题。但有趣的是,直接ping公网IP(如8.8.8.8)却能成功,这种症状明确指向了域名解析环节的故障。

关键矛盾点在于:

  • 手动执行sudo systemctl restart systemd-resolved后立即恢复正常
  • 每次服务器重启后问题必然复现
  • /etc/resolv.conf文件神秘"消失"或内容被重置

通过systemctl status systemd-resolved查看服务状态,你可能会发现服务处于inactive状态。这揭示了核心问题:systemd-resolved服务没有正确注册到系统启动流程中。Ubuntu自17.10版本后采用systemd-resolved作为默认DNS解析方案,但其服务配置存在一些微妙特性:

# 查看服务是否启用开机启动 systemctl is-enabled systemd-resolved

2. 深度解决方案:三种自启配置方法

2.1 标准服务启用方法

最直接的方式是通过systemctl启用服务:

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

但有些环境可能需要额外操作,因为Ubuntu Server的Netplan网络配置会干扰服务启动顺序。此时需要验证服务依赖:

# 查看服务依赖树 systemctl list-dependencies systemd-resolved

2.2 网络配置集成方案

对于使用Netplan的场景(Ubuntu 18.04+默认),需确保YAML配置包含DNS设置:

network: version: 2 ethernets: eth0: dhcp4: true nameservers: addresses: [8.8.8.8, 1.1.1.1]

应用配置后,执行以下命令使变更生效:

sudo netplan apply sudo systemctl restart systemd-networkd

2.3 底层调试与验证

为确保服务真正实现自启动,可以通过以下方式验证:

  1. 检查服务单元文件:

    cat /lib/systemd/system/systemd-resolved.service
  2. 模拟重启测试:

    sudo systemctl reboot # 重启后立即检查 systemctl status systemd-resolved resolvectl status

3. 进阶配置与故障排查

3.1 解析状态诊断工具

掌握这些诊断命令能快速定位问题:

命令功能描述关键输出
resolvectl status显示当前DNS配置活动接口的DNS服务器
dig example.com手动DNS查询测试查询耗时和结果
journalctl -u systemd-resolved查看服务日志启动错误信息

3.2 常见问题解决方案

症状1:服务已启用但依然不工作

# 检查服务冲突 sudo lsof -i :53 # 清理DNS缓存 sudo resolvectl flush-caches

症状2:/etc/resolv.conf符号链接错误

# 重建正确的符号链接 sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

4. 系统架构深度解析

理解systemd-resolved的工作机制有助于彻底解决问题:

  1. 三层解析架构

    • 应用程序 → glibc resolver → systemd-resolved → 上游DNS
    • 通过strace ping example.com可以观察解析过程
  2. 缓存机制

    # 查看DNS缓存 resolvectl statistics
  3. DNSSEC验证: 在/etc/systemd/resolved.conf中配置:

    [Resolve] DNSSEC=allow-downgrade

经过这些配置后,建议进行一次完整的重启循环测试:sudo reboot now。等待系统重启后,立即运行ping example.comsystemctl status systemd-resolved双重验证。

最后分享一个实用技巧:在/etc/cloud/cloud.cfg.d/目录下创建99-dns.cfg文件,可以防止云初始化工具覆盖你的DNS设置。这个细节在AWS、Azure等云服务器环境中尤为重要。

http://www.jsqmd.com/news/719379/

相关文章:

  • 把香橙派Orange Pi Zero2变成家庭服务器:Docker部署、内网穿透与轻量NAS搭建指南
  • SLAM Toolbox:基于位姿图优化的终身建图与分布式协同SLAM架构
  • 从PAT练习题到真实项目:用C语言搞定单位换算与时间计算的实战指南
  • 在macOS上运行Windows应用的终极指南:Whisky完整使用教程
  • 京东茅台抢购终极指南:Python自动抢购脚本完整教程
  • 终极Win11优化指南:5个核心场景让Windows系统重获新生
  • 3步解放你的输入法:跨平台词库迁移终极方案
  • 别再手动核销了!用uniapp + uQRCode插件5分钟搞定微信扫码核销功能
  • 别再手动整理文本了!用AntConc 4.2.2和Wordless 3.3,5分钟搞定你的第一个私人语料库
  • 终极Xshell配色方案大全:250+款主题让你的命令行界面焕然一新
  • Azure APIM 多模型智能路由策略实战:从 Chat Completions 到 Responses API
  • Path of Building汉化版终极指南:PoeCharm完整使用教程与实战技巧
  • AI 后台任务调度链路的稳定性治理:从静默丢任务到可观测性闭环
  • OpCore Simplify黑苹果配置教程:5步快速创建OpenCore EFI的终极指南
  • Pixelle-Video:5分钟掌握AI全自动短视频生成,告别复杂剪辑
  • PyTorch模型部署新姿势:用ONNX打通TensorRT、OpenVINO和移动端
  • PHP V6 单商户常见问题——云编译报SSL证书错误的处理方案
  • 别再只用WPS了!手把手教你用ONLYOFFICE免费搭建个人云文档(附AI插件配置)
  • 交错网格有限差分法:为什么它是地震勘探数值模拟的“瑞士军刀”?
  • PHP工程师最后的AI入场券:Laravel 12原生AI SDK配置全流程(含OpenTelemetry追踪埋点与成本监控仪表盘)
  • 手把手教你用Vivado仿真UltraScale的IODELAY和ISERDES:从ADC接口到FPGA内部数据对齐
  • 如何用Charticulator免费图表设计工具在30分钟内创建专业数据可视化
  • 保姆级教程:在VMware Workstation 17上搞定MacOS Ventura 13.6,附全套资源与避坑指南
  • Vite项目里动态加载SVG图标库,并集成到ElementPlus的el-select下拉框(保姆级配置流程)
  • FITC标记的NKG2D/CD314 Fc嵌合蛋白在免疫肿瘤学研究中的应用
  • Span<T> + MemoryPool<T> + Pipelines = C# 13超高吞吐管道(万级RPS实测架构图解)
  • 淘金币自动化脚本:每天5分钟解放双手的终极解决方案
  • SP Flash Tool救砖实战:手把手修复红米Note 11 4G的NV数据与IMEI
  • Banana Pi BPI-M4 Zero单板计算机全面解析与性能评测
  • BepInEx框架在Unity IL2CPP环境下的架构演进与稳定性优化