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

别再乱改/etc/resolv.conf了!Ubuntu 20.04 DNS配置的正确姿势:systemd-resolved保姆级教程

Ubuntu 20.04 DNS配置终极指南:告别手动修改resolv.conf的时代

每次重启后DNS设置就失效?修改/etc/resolv.conf却总被覆盖?这可能是Ubuntu用户最常遇到的网络配置痛点之一。在Ubuntu 20.04及更高版本中,传统的DNS配置方式已经发生了根本性变革,systemd-resolved服务成为了幕后主角。本文将带你彻底理解这套新机制,并掌握符合现代Linux系统的最佳实践。

1. 为什么直接修改resolv.conf是个坏主意

打开终端输入ls -l /etc/resolv.conf,你会看到类似这样的输出:

lrwxrwxrwx 1 root root 39 Apr 12 10:15 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

这个软链接揭示了第一个重要事实:/etc/resolv.conf不再是你应该直接编辑的文件。它实际上指向了systemd-resolved服务管理的临时文件。如果你用vim打开这个文件,会看到明确的警告提示:

# This file is managed by man:systemd-resolved(8). Do not edit.

手动修改这个文件会导致几个问题:

  • 修改会被系统定期覆盖
  • 可能破坏systemd-resolved的转发逻辑
  • 导致DNS缓存不一致
  • 系统更新时可能产生冲突

真实案例:某开发者在Docker容器中同时修改resolv.conf和使用systemd-resolved,导致DNS查询出现随机失败,最终发现是两个配置机制相互冲突所致。

2. systemd-resolved架构深度解析

现代Ubuntu的DNS解析已经演变成一个多层架构:

应用程序 → stub-resolv.conf (127.0.0.53) → systemd-resolved → 上游DNS

关键文件说明:

文件路径作用是否应该修改
/etc/resolv.conf符号链接到stub-resolv.conf❌ 绝对不要
/run/systemd/resolve/stub-resolv.conf本地stub解析器配置❌ 自动生成
/run/systemd/resolve/resolv.conf实际上游DNS服务器列表❌ 自动生成
/etc/systemd/resolved.conf主配置文件✅ 应该修改这里

理解这个架构后,我们就能明白为什么直接修改resolv.conf会失效——它只是整个链条中最末端的环节。

3. 正确配置DNS的三种方法

3.1 方法一:修改resolved.conf主配置文件

这是最推荐的方式,编辑/etc/systemd/resolved.conf

[Resolve] DNS=8.8.8.8 1.1.1.1 FallbackDNS=9.9.9.9 Domains=~.

参数说明:

  • DNS:主DNS服务器列表(空格分隔)
  • FallbackDNS:备用DNS服务器
  • Domains=~.:对所有域名生效

修改后需要重启服务:

sudo systemctl restart systemd-resolved

3.2 方法二:使用resolvectl临时配置

对于测试或临时修改,可以使用resolvectl工具:

# 设置DNS服务器 sudo resolvectl dns eth0 8.8.8.8 # 查看当前配置 resolvectl status # 清空DNS缓存 sudo resolvectl flush-caches

注意:这种方式重启后会失效,适合临时调试使用

3.3 方法三:通过Netplan配置(云服务器常见)

在/etc/netplan/目录下的yaml文件中添加:

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

应用配置:

sudo netplan apply

4. 高级技巧与故障排查

4.1 诊断DNS问题的方法

当遇到DNS解析失败时,可以按照以下步骤排查:

  1. 检查当前使用的DNS服务器:

    resolvectl status | grep 'DNS Servers'
  2. 测试DNS查询:

    dig example.com @8.8.8.8
  3. 查看DNS缓存:

    resolvectl statistics
  4. 检查服务状态:

    systemctl status systemd-resolved journalctl -u systemd-resolved -n 50

4.2 多网络接口的DNS配置

当系统有多个网络接口时,可以为每个接口指定不同的DNS:

sudo resolvectl dns eth0 8.8.8.8 sudo resolvectl dns wlan0 192.168.1.1

4.3 禁用systemd-resolved(不推荐)

虽然不推荐,但在某些特殊情况下可能需要禁用:

sudo systemctl disable --now systemd-resolved sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

警告:这会使系统失去DNS缓存等功能,仅限高级用户使用

5. 容器环境中的特殊考量

在Docker等容器环境中,DNS配置更为复杂。推荐的做法是:

  1. 在主机上正确配置systemd-resolved
  2. 启动容器时使用--dns参数:
    docker run --dns 8.8.8.8 -it ubuntu
  3. 或者在docker-compose中配置:
    services: app: dns: - 8.8.8.8 - 1.1.1.1

对于Kubernetes环境,需要修改kubelet的--resolv-conf参数指向正确的resolv.conf文件。

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

相关文章:

  • Qwerty Learner终极指南:免费英语打字练习与单词记忆完整教程
  • 终极指南:如何为欧洲卡车模拟2打造智能自动驾驶体验
  • Zotero AI插件完整指南:5分钟实现智能文献管理革命
  • AirPodsDesktop终极指南:在Windows电脑上免费恢复苹果耳机完整功能
  • 从省级农科院到村级服务站:Dify农业知识库三级部署架构图首次公开(含敏感数据脱敏SOP与审计日志模板)
  • Docker Compose v2 启动报错 standard_init_linux.go:228 怎么办?
  • 没有GPU也能玩转PINN?手把手教你用CPU在云服务器上跑通Burgers方程仿真
  • 如何快速制作专业地形高度图:开源工具的完整指南
  • 【限时开源】R 4.5专属微生物组多组学分析框架MicroBioSuite v1.2(含12个真实临床队列处理模板+GPU加速版DESeq2适配器)
  • 盐城宝盛设备租赁:阜宁蜘蛛车租赁推荐 - LYL仔仔
  • 基于AI与RSS的智能信息筛选:构建个人技术摘要系统
  • 告别卡顿!手把手教你用LoadRunner 12.55在Win11上搭建性能测试环境(附百度网盘资源)
  • 使用Nodejs和Taotoken构建一个简单的AI对话服务端
  • 联邦学习+区块链:数据“可用不可见”时代的信任与协作引擎
  • 别再手动画样本点了!用GEE+随机森林,10分钟搞定北京2023年土地利用分类
  • 新疆龙之筑建材:乌鲁木齐马路砖出售哪家好 - LYL仔仔
  • 紧急预警:Dify默认检索配置在SCADA日志分析中准确率暴跌至41%!立即执行这3项工业定制化修正
  • Rusted PackFile Manager (RPFM):全面战争MOD开发的终极效率工具
  • 终极免费激活方案:KMS智能脚本一键解决Windows和Office激活难题
  • RH850/F1L CAN总线调试避坑指南:从寄存器配置到实战通信的完整流程
  • 2026年5月雷达官方售后网点亲测报告:避坑指南与真实体验(含迁址/新开) - 亨得利官方服务中心
  • 告别理论推导:用Python+NumPy手把手模拟MSK信号生成与频谱分析
  • 内存峰值下降68%,吞吐翻倍:R 4.5分块处理的4层缓冲架构设计与实测对比报告
  • 亲测❗️2026年5月最新泰格豪雅官方售后网点验证报告(含迁址/新开)实地考察・多方数据 - 亨得利官方服务中心
  • 1000元中石化加油卡闲置?教你一招安全变现,轻松提到微信/支付宝使用! - 畅回收小程序
  • 使用 taotoken 后 api 调用延迟与稳定性的实际观测与感受分享
  • 计算机毕业设计 | SpringBoot+vue人口老龄化社区服务与管理平台(附源码+论文)
  • SLA2:稀疏计算与注意力机制融合的高效Transformer架构
  • 通过用量看板清晰掌握团队月度大模型调用成本
  • YOLOv8模型部署踩坑实录:从PyTorch到ONNX,再到Gradio Web部署的完整避坑指南