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

从NetworkManager到systemd-resolved:一文搞懂Ubuntu 20.04网络服务如何“打架”并吃掉你的DNS设置

Ubuntu 20.04网络服务DNS配置冲突全解析与实战解决方案

当你发现每次重启Ubuntu服务器后,精心配置的DNS设置总是神秘消失,这背后其实是systemd-resolved和NetworkManager两大服务在暗中较劲。本文将带你深入理解现代Linux发行版中复杂的网络服务交互机制,并提供一套可落地的解决方案。

1. 现代Linux网络服务架构解析

Ubuntu 20.04作为采用systemd的现代发行版,其网络管理架构与传统Linux有显著不同。系统中可能同时运行着多个网络管理服务:

  • NetworkManager:图形界面友好的网络配置工具
  • systemd-networkd:轻量级的网络配置守护进程
  • systemd-resolved:DNS和域名解析管理服务

这些服务各自为政时相安无事,但当它们同时尝试管理DNS配置时,就会产生令人头疼的冲突。典型的症状包括:

  • 手动修改/etc/resolv.conf后重启失效
  • VPN连接后DNS被意外覆盖
  • 多网卡环境下DNS配置混乱
# 查看当前活跃的网络管理服务 systemctl status NetworkManager systemd-resolved systemd-networkd

2. DNS配置的底层机制

理解DNS配置如何被覆盖,需要先了解现代Linux的域名解析流程:

  1. 传统解析流程

    • 应用查询 -> glibc解析器 -> 读取/etc/resolv.conf-> 向指定DNS服务器查询
  2. systemd-resolved介入后的流程

    • 应用查询 -> glibc解析器 -> 访问/etc/resolv.conf(指向127.0.0.53) -> systemd-resolved接收请求 -> 根据自身配置转发到上游DNS

关键文件关系图:

文件路径作用管理方
/etc/resolv.conf符号链接,默认指向stub-resolv.confsystemd-resolved
/run/systemd/resolve/stub-resolv.conf存根解析器配置systemd-resolved
/run/systemd/resolve/resolv.conf实际使用的DNS服务器列表systemd-resolved
/etc/systemd/resolved.confsystemd-resolved的主配置文件管理员

3. 诊断DNS配置问题的专业工具包

当出现DNS问题时,系统管理员需要一套系统的诊断方法:

3.1 使用resolvectl检查当前状态

# 查看完整的DNS解析状态 resolvectl status # 查询特定域名的解析过程 resolvectl query example.com # 清空DNS缓存 resolvectl flush-caches # 查看统计信息 resolvectl statistics

3.2 网络管理器交互检查

# NetworkManager管理的连接信息 nmcli connection show --active # 查看NetworkManager的DNS配置 nmcli dev show | grep DNS

3.3 文件系统检查点

# 检查resolv.conf的真实指向 ls -l /etc/resolv.conf # 比较三个关键DNS配置文件 diff -u /run/systemd/resolve/stub-resolv.conf /run/systemd/resolve/resolv.conf

4. 永久性DNS配置方案

根据不同的使用场景,我们提供三种可靠的配置方案:

方案一:纯systemd-resolved配置(推荐)

  1. 编辑主配置文件:
sudo nano /etc/systemd/resolved.conf
  1. 取消注释并修改以下行:
[Resolve] DNS=8.8.8.8 1.1.1.1 Domains=example.com FallbackDNS=9.9.9.9
  1. 重启服务:
sudo systemctl restart systemd-resolved

方案二:NetworkManager优先配置

对于使用NetworkManager为主的管理环境:

  1. 修改NetworkManager配置:
sudo nano /etc/NetworkManager/conf.d/dns.conf
  1. 添加内容:
[main] dns=systemd-resolved
  1. 为特定连接设置DNS:
nmcli connection modify "有线连接1" ipv4.dns "8.8.8.8 8.8.4.4" nmcli connection up "有线连接1"

方案三:传统resolv.conf模式(兼容性方案)

如果需要完全禁用systemd-resolved:

  1. 取消resolv.conf的符号链接:
sudo rm /etc/resolv.conf sudo nano /etc/resolv.conf
  1. 添加传统DNS配置:
nameserver 8.8.8.8 nameserver 1.1.1.1
  1. 锁定文件防止被修改:
sudo chattr +i /etc/resolv.conf

5. 高级场景处理技巧

5.1 多网卡环境DNS配置

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

# 使用NetworkManager按连接配置 nmcli connection modify eth0 ipv4.dns-priority 100 nmcli connection modify eth1 ipv4.dns-priority 50

5.2 VPN连接时的DNS处理

VPN客户端通常会尝试修改DNS设置,可以通过以下方式保持稳定性:

# 在NetworkManager中禁用VPN的DNS修改 nmcli connection modify vpn-name ipv4.never-default yes nmcli connection modify vpn-name ipv4.ignore-auto-dns yes

5.3 企业内网DNS的特殊处理

对于需要同时解析内外网域名的环境:

# /etc/systemd/resolved.conf [Resolve] DNS=10.0.0.1 8.8.8.8 Domains=~internal.company ~.company

6. 服务交互的深度解析

理解各服务如何交互是解决冲突的关键:

  1. 优先级机制

    • NetworkManager配置 > systemd-resolved配置 > 传统resolv.conf
    • 最后修改的服务通常会覆盖之前的配置
  2. 配置传播路径

    graph LR A[NetworkManager] -->|推送配置| B(systemd-resolved) B -->|生成| C[/run/systemd/resolve/resolv.conf] C -->|符号链接| D[/etc/resolv.conf]
  3. 调试技巧

    # 实时监控DNS配置变化 sudo inotifywait -m /etc/resolv.conf /run/systemd/resolve/ # 查看systemd-resolved日志 journalctl -u systemd-resolved -f

在实际运维中,我遇到过最棘手的情况是在Kubernetes节点上,Calico网络插件、NetworkManager和systemd-resolved三方争夺DNS控制权。最终通过锁定NetworkManager作为唯一配置源,并禁用其他服务的DNS管理功能解决了问题。

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

相关文章:

  • Go 数据结构入门:线性表、顺序表、链表
  • AI Agents 开源 LLM 简报 (2026年5月2日)
  • 一次吃透LeetCode哈希表经典题:附完整思路与代码解析
  • 别再手动调网格了!Fluent自适应网格实战:从入门到精通,手把手教你用Cell Registers提升计算效率
  • 盒马鲜生礼品卡怎么用?闲置变现也有省心办法 - 京顺回收
  • 从汽车电子到通用嵌入式:MISRA-C 2012实战避坑指南(附代码审查清单)
  • 对比不同模型在相同任务下的 token 消耗与成本差异
  • Linux服务器运维:手把手教你用parted命令从U盘创建、格式化到挂载全流程
  • 酷安UWP桌面客户端:在Windows上高效管理你的数码生活
  • AI应用本地化部署利器:ai_launcher统一管理Ollama、Stable Diffusion等开源模型
  • 2026年3月东胜专业的特种空调直销厂家推荐,特种空调公司,大风量设计,覆盖面积广 - 品牌推荐师
  • 2026年太阳能路灯厂家技术参数排行榜,选购前必看 - 速递信息
  • 如何在5分钟内为Jellyfin安装智能中文字幕插件:终极解决方案
  • 2026年南宁GEO优化公司类型与选择标准百科
  • 2026北京抖音代运营服务商评测:靠谱选择的核心维度 - 奔跑123
  • 终极免费方案:5分钟实现专业级键鼠操作可视化
  • LibreTranslate终极指南:构建私有化机器翻译服务的7个关键步骤
  • 如何构建专业的Android电池监控小部件:3步实现实时电量显示与数据可视化
  • Wireshark导出数据包别再只会全选了!这5种精准导出技巧,网络排查效率翻倍
  • ISO14044合规指南:手把手教你用Simapro完成LCA灵敏度分析(含参数集对比)
  • 分期乐购物额度闲置怎么办?教你合规变现实操 - 米米收
  • 图解PTP/IEEE1588:从Sync、Follow_Up报文到BMC算法,一次搞懂时间同步核心流程
  • 2026年3月,SA213T91高压合金管总代理深入测评,良好抗振性,减少振动带来的损伤 - 品牌推荐师
  • 2026杭州男士假发定制怎么选?按六大维度实测,这家零踩坑! - 律界观察
  • 新硬件装老系统?手把手解决Ubuntu18.04下Realtek 2.5G网卡没网络的尴尬
  • STM32F407VET6 CAN通信实战:从CubeMX配置到收发调试(附完整代码)
  • BilibiliDown:5分钟掌握B站视频下载的终极免费方案
  • WindowResizer:突破限制,让每个Windows窗口都听从你的指挥![特殊字符]
  • 别再为表格数据发愁了!用TabLLM和GPT-3,几行提示词搞定分类任务(附代码)
  • 鸣潮工具箱WaveTools:为PC玩家量身打造的性能与数据管理解决方案