systemd-networkd | 配置文件应用顺序

知识 | Knowledge 2025年10月5日

First | 序

此篇将从以下方面详析 systemd-networkd 配置文件

  • 定义及用途
  • 配置文件读取、优先级、处理顺序
  • 接口匹配和应用顺序
  • Drop-in 文件和配置合并顺序
📦
本篇所使用到的操作系统&软件版本(配置)如下所示

1. 定义及用途

systemd.network 文件(以 .network 为扩展名)是一种纯 ini 风格的文本文件

其主要作用是为匹配的网络接口编码网络配置,并由 systemd-networkd 服务使用

👩‍🏫
注意: 并非所有配置都可以使用.network文件完成,在处理物理和虚拟设备时,则需要借助systemd.link和systemd.netdev

2. 读取和排序

2.1. 读取路径

.network 配置文件从多个系统目录中读取

  • 系统网络目录 /usr/lib/systemd/network 和 /usr/local/lib/systemd/network
  • 运行时网络目录(易失):/run/systemd/network
  • 本地管理网络目录:/etc/systemd/network
👩‍🏫
注意:如果 /usr/local/ 是一个独立分区,在系统早期引导阶段可能不可用,因此不应在此处放置配置

2.2. 优先级

如果多个目录中存在同名的文件,它们会相互替换(覆盖)

• /etc/ 中的文件具有最高优先级。
• /run/ 中的文件优先于 /usr/ 中同名的文件

2.3. 处理顺序

所有收集到的配置文件,无论它们位于哪个目录中,都会进行字母数字顺序排序和处理

👩‍🏫
推荐做法: 建议文件名使用小于 "70" 的数字作为前缀(例如 10-ens33.network),以确保用户配置文件的优先级高于默认或由 systemd-network-generator.service 生成的文件

3. 匹配和应用顺序

在文件被排序后,systemd-networkd 按照这个排序顺序依次检查每个文件

并执行严格的首次匹配应用规则

3.1. 匹配机制

  1. 每个 .network 文件包含一个 [Match] 配置段,用于确定该文件是否可以应用于特定的网络接口
  2. 当文件中的 [Match] 部分指定的所有条件都满足时,该文件被认为匹配该接口
  3. 如果一个文件不包含有效的 [Match] 设置,它将匹配所有接口,systemd-networkd 会发出警告

3.2. 应用规则

  1. 对于给定的接口,第一个(按字母数字顺序)匹配该接口的 .network 文件将被应用
  2. 所有后续匹配该接口的文件都将被忽略,即使它们同样满足匹配条件
  3. 这意味着文件排序(即文件名)对于决定哪个配置生效至关重要

3.3. 排除机制

如果网络接口设置了 ID_NET_MANAGED_BY= udev 属性,除非该属性的值是 "io.systemd.Network",否则 systemd-networkd 永远不会匹配该接口。这个机制用于确保并发的网络管理工具不会争夺设备的管理权

👩‍🏫
注意: 接口udev属性可以使用命令udevadm info 查看

4. Drop-in 文件和配置合并顺序

除了主 .network 文件外,还可以使用插入(Drop-in)目录来修改或添加配置

这会影响最终的有效配置

4.1. Drop-in 目录结构

• 伴随主文件 foo.network,可以存在一个名为 foo.network.d/ 的目录。
• 该目录中所有后缀为 .conf 的文件将被用于配置合并

4.2. Drop-in 文件的合并和优先级

  1. Drop-in 文件(位于 foo.network.d/ 中)首先按字母数字顺序合并。
  2. 然后,它们在主文件 foo.network 解析之后进行解析和合并。
  3. Drop-in 文件中的设置具有更高的优先级,可以覆盖主配置文件的设置。
  4. Drop-in 文件的目录优先级遵循与主文件相同的规则:/etc/ 中的 Drop-in 文件优先级高于 /run/,后者又高于 /usr/lib/ 中的 Drop-in 文件

5. 总结

  1. 收集和排序:读取所有配置目录中的 .network 文件,并按字母数字顺序(例如 10-foo.network, 20-bar.network)排列。
  2. 首次匹配原则:对于每个接口,使用排序后的列表,选择第一个匹配该接口的 .network 文件。
  3. 配置叠加:如果存在与该主文件关联的 Drop-in 目录 (foo.network.d/),则将 Drop-in 文件中的配置设置合并进来,Drop-in 文件中的设置会覆盖主文件中的冲突设置。
  4. 应用配置:将最终合并(或未合并)的配置应用到匹配的网络接口上。

Thanks & Copy

systemd.network(5) — Arch manual pages

systemd.network - Network configuration


systemd-networkd - Arch Linux 中文维基

标签

xzllll

三分钟热度三分钟收获