systemd-networkd的配置文件优先级规则如下:
1. 目录优先级
配置文件按以下目录顺序加载(优先级从高到低):
/etc/systemd/network
(用户自定义配置,最高优先级)/run/systemd/network
(运行时临时配置,次高优先级)/usr/local/lib/systemd/network
(本地管理员安装的配置)/usr/lib/systemd/network
(系统默认配置,最低优先级)2. 同名文件覆盖
同名文件在不同目录中:优先级高的目录中的文件会覆盖低优先级目录中的同名文件。
例如:
/etc/systemd/network/50-test.network
会覆盖 /run/systemd/network/50-test.network
。/run/systemd/network/50-test.network
会覆盖 /usr/lib/systemd/network/50-test.network
。空文件或符号链接到/dev/null
:会完全禁用(“屏蔽”)对应名称的配置文件。
3. 文件处理顺序
10-eth0.network
和 20-eth0.network
,系统会先处理 10-eth0.network
。若该文件匹配接口,则 20-eth0.network
被忽略。4. 文件名建议
10-eth0.network
),数字应小于 70
,以避免用户配置被系统默认配置(如 70-*.network
)覆盖。5. Drop-in 目录优先级
.network
文件可有一个对应的 drop-in
目录(如 foo.network.d/
),其中的 .conf
文件按字母数字顺序合并到主配置中。drop-in
目录的优先级与主配置文件所在目录一致:
/etc/systemd/network/foo.network.d/*.conf
(最高)/run/systemd/network/foo.network.d/*.conf
(次高)/usr/lib/systemd/network/foo.network.d/*.conf
(最低)6. 匹配规则
[Match]
部分决定是否应用到接口。第一个匹配的配置文件生效,后续文件即使匹配也会被忽略。示例说明
场景 1:
/etc/systemd/network/50-eth0.network
和 /usr/lib/systemd/network/50-eth0.network
同名。/etc
下的文件生效,/usr/lib
下的文件被覆盖。场景 2:
/etc/systemd/network/10-eth0.network
和 /etc/systemd/network/20-eth0.network
同时存在。10-eth0.network
先被处理,若其匹配接口,则 20-eth0.network
被忽略。场景 3:
/etc/systemd/network/eth0.network
为空文件或链接到 /dev/null
。eth0.network
被完全屏蔽,即使其他目录有同名文件也不会生效。总结
/etc/systemd/network
中的文件。/dev/null
可禁用配置。systemd-networkd 的配置文件优先级规则由目录层级、文件名排序和匹配特异性共同决定,以下是详细规则说明:
一、目录优先级(从高到低)
/etc/systemd/network/
/etc/systemd/network/20-wired.network
覆盖 /usr/lib/systemd/network/20-wired.network
。/run/systemd/network/
/usr/lib
,但低于 /etc
。/run/systemd/network/99-temp.network
会覆盖系统默认配置。/usr/lib/systemd/network/
二、文件名排序规则
10-eth0.network
优先于 20-backup.network
,因为 10
< 20
。/etc/foo.network
覆盖 /usr/lib/foo.network
。 三、附加配置目录(.d
目录)
.d
目录:如 foo.network
对应 foo.network.d/
。.d
目录中的 .conf
文件优先级高于主文件:
/etc/
中的 .d
文件优先于 /usr/lib/
。/etc/foo.network.d/custom.conf
优先于 /usr/lib/foo.network.d/default.conf
。四、接口匹配规则
第一个匹配接口的配置文件生效:
[Match]
条件的文件应用,后续文件(即使匹配)被忽略。10-eth0.network
和 20-default.network
均匹配 eth0
,则 10-eth0.network
生效。匹配条件特异性:
[Match] MACAddress=00:11:22:33:44:55
优先于 [Match] Name=eth*
。五、冲突解决策略
DHCP vs. 静态 IP:
多配置文件合并:
六、屏蔽配置的方法
创建指向 /dev/null
的符号链接:
/etc/
中创建同名链接,禁用系统配置。ln -s /dev/null /etc/systemd/network/20-default.network
。空文件或 .d
目录中的屏蔽文件:
.d
目录中的无效配置可屏蔽主文件。最佳实践
数字-名称.network
(如 10-lan.network
),便于控制加载顺序。.d
目录追加设置,避免直接修改系统文件。networkctl reload
或重启服务后,用 networkctl status
验证生效配置。示例场景:
/usr/lib/systemd/network/80-default.network
配置 DHCP。/etc/systemd/network/10-static.network
配置静态 IP,并创建 /etc/systemd/network/80-default.network
指向 /dev/null
。10-static.network
生效,系统默认配置被屏蔽。通过以上规则,用户可灵活管理多网络接口配置,确保优先级清晰、冲突可控。
在 systemd-networkd
中,配置文件的优先级规则决定了不同位置和命名的配置文件如何被加载和覆盖。以下是详细的优先级规则和相关说明:
1. 配置文件目录的优先级
systemd-networkd
的配置文件按照以下目录的优先级顺序加载,优先级高的目录会覆盖低优先级目录中的同名文件:
/etc/systemd/network/
/run/systemd/network/
/usr/lib/systemd/network/
冲突处理:
如果不同目录中存在同名的配置文件(例如 10-eth0.network
),则优先级高的目录中的文件会被采用。例如,/etc/systemd/network/10-eth0.network
会覆盖 /usr/lib/systemd/network/10-eth0.network
。
2. 配置文件的加载顺序
在同一目录中,所有以 .network
、.link
、.netdev
等结尾的文件会按 文件名的字典顺序 加载。
例如:
01-eth0.network
→ 10-wlan0.network
→ 20-default.network
建议:
在文件名前添加 数字前缀(如 10-
、20-
)以明确加载顺序,避免因文件名字母顺序导致意外覆盖。
3. 配置文件的细分(.d
目录)
每个配置文件可以关联一个同名的 .d
目录(例如 10-eth0.network.d/
),目录中的 .conf
文件会 附加到主配置文件。
.conf
文件逐步覆盖或补充配置。10-eth0.network
),.d
目录中的所有 .conf
文件(例如 10-eth0.network.d/override.conf
)。 4. 优先级总结
从高到低的配置覆盖规则如下:
/etc/systemd/network/
目录中的文件/run/systemd/network/
目录中的文件/usr/lib/systemd/network/
目录中的文件.d
目录中的 .conf
文件(按字典顺序附加到主配置文件) 5. 实际应用示例
示例 1:屏蔽默认配置
假设 /usr/lib/systemd/network/
中有一个 80-usb-gadget.link
文件,
可以通过在 /etc/systemd/network/
中创建一个同名的符号链接来屏蔽它:
sudo ln -s /dev/null /etc/systemd/network/80-usb-gadget.link
示例 2:分阶段配置
为 eth0
配置静态 IP,并通过 .d
目录追加 DNS 设置:
# /etc/systemd/network/10-eth0.network
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
# /etc/systemd/network/10-eth0.network.d/dns.conf
[Network]
DNS=8.8.8.8
Domains=example.com
6. 注意事项
配置生效:
修改配置文件后,需重启 systemd-networkd
或重新加载配置:
sudo systemctl restart systemd-networkd
冲突解决:
[Match]
段),最后加载的配置会覆盖之前的设置。10-
、20-
)控制加载顺序,避免冲突。虚拟设备配置:
.netdev
文件中定义,再通过 .network
文件关联。 7. 知识库补充
根据知识库中的信息:
/etc/systemd/networkd.conf
或其 .d
目录中的文件设置,优先级规则与 .network
文件类似。renderer=networkd
生成 systemd-networkd
的配置文件,需注意 Netplan 的配置文件(如 /etc/netplan/
)最终会被转换为 /etc/systemd/network/
中的 .network
文件。通过合理利用目录优先级、文件名顺序和 .d
目录的细分配置,可以灵活管理复杂的网络设置,并避免配置冲突。
systemd-networkd
的配置文件优先级对于正确配置网络至关重要,以下为你详细介绍不同类型配置文件的优先级规则:
配置文件类型及优先级顺序
/run/systemd/network/
):
/etc/systemd/network/
):
.network
或 .netdev
文件。/lib/systemd/network/
):
同一目录下配置文件的优先级
当多个配置文件位于同一目录时,systemd-networkd
会按照文件名的字典序依次加载。也就是说,文件名以字母顺序靠前的文件会先被加载。如果后面加载的文件与前面的文件存在冲突配置,后面的配置会覆盖前面的配置。例如,若有 00-base.network
和 10-custom.network
两个文件,00-base.network
会先被加载,若 10-custom.network
中有与之冲突的配置项,10-custom.network
中的配置将生效。
不同节和配置项的合并规则
[Match]
节:如果多个配置文件的 [Match]
节都匹配到同一个网络接口,那么这些配置文件中的其他节会被合并。例如,一个配置文件设置了静态 IP 地址,另一个配置文件设置了 DNS 服务器,最终该网络接口会同时应用这两个配置。Address
配置项,那么最后加载的 Address
值会生效。 示例说明
假设存在以下配置文件:
/lib/systemd/network/00-default.network
:[Match]
Name=enp0s3
[Network]
DHCP=yes
/etc/systemd/network/10-static.network
:[Match]
Name=enp0s3
[Network]
DHCP=no
Address=192.168.1.100/24
由于 /etc/systemd/network/
目录下的配置文件优先级高于 /lib/systemd/network/
目录下的配置文件,所以对于 enp0s3
网络接口,最终会采用 10-static.network
文件中的配置,即禁用 DHCP 并使用静态 IP 地址 192.168.1.100/24
。
以下是对 systemd-networkd 配置文件优先级的详细说明:
主配置文件优先级
/etc/systemd/network/
目录中的配置文件具有最高优先级,会覆盖 /run/systemd/network/
和 /usr/lib/systemd/network/
目录中的同名文件。<数字>-<名称>.network
的格式命名,数字越小优先级越高。/dev/null
的同名符号链接会完全禁用该配置文件。drop-in 配置文件优先级
/etc/systemd/network/
下的 drop-in 配置文件优先于 /run/systemd/network/
下的,而后者又优先于 /usr/lib/systemd/network/
下的。systemd-networkd 的配置文件优先级遵循以下规则,按优先级从高到低排列:
1. /etc/systemd/network/
目录
/etc/systemd/network/10-wired.network
2. /run/systemd/network/
目录
/run/systemd/network/20-dhcp.network
3. /usr/lib/systemd/network/
目录
/usr/lib/systemd/network/99-default.link
关键规则
同名文件覆盖:
如果不同目录中存在同名文件,高优先级目录中的文件会完全覆盖低优先级的文件。
文件加载顺序:
同一目录内,文件按文件名字母顺序加载(例如 00-first.conf
先于 10-second.conf
)。
应用场景示例
/etc/systemd/network/
中创建 .network
文件,覆盖默认配置。/run/systemd/network/
中生成临时配置(重启后失效)。 验证配置生效
修改配置后,需执行以下命令使变更生效:
sudo systemctl restart systemd-networkd
通过理解优先级规则,可以更灵活地管理系统网络配置。
systemd-networkd的配置文件优先级遵循一定的规则,这些规则决定了在存在多个配置文件时,哪个文件的配置将生效。以下是对这些优先级规则的详细解释:
同名文件覆盖原则:
如果在不同目录下存在同名的 .network
文件,那么优先级高目录下的文件会覆盖优先级低目录下的文件。例如,如果 /etc/systemd/network/ 和 /usr/lib/systemd/network/ 目录下都存在名为 example.network 的文件,那么 /etc/ 目录下的 example.network 会生效[1][4]。
文件名优先级
附加配置优先级
foo.network
的配置文件,可以存在一个名为foo.network.d/
的“附加配置”目录。该目录中的所有以.conf
结尾的文件会按字母数字顺序合并,并在主文件解析后解析。这可用于修改或添加配置,而无需改动主文件[1]。/etc/
中的附加文件优先于/run/
;/run/
中的优先于/usr/lib/
;所有附加文件优先于主配置文件(无论主文件位置)[1]。综上所述,systemd-networkd的配置文件优先级主要取决于文件所在的目录、文件名以及附加配置的存在与否。了解这些优先级规则有助于用户正确地管理和配置网络设置,确保网络服务按照预期运行。
systemd-networkd
的配置文件优先级由 文件所在目录 和 文件名的字典序 共同决定,这一机制确保了灵活性和可预测性。以下是优先级规则的详细说明:
一、目录优先级
配置文件按以下目录顺序加载(优先级从高到低):
/etc/systemd/network/
/run/systemd/network/
/etc
。/usr/lib/systemd/network/
apt
/dnf
安装的配置)。 示例:
• 若同一文件名(如 10-dhcp.network
)存在于 /etc
和 /usr/lib
,则 /etc
下的文件生效。
• 临时生成的配置(如 /run/systemd/network/50-hotplug.network
)会覆盖 /usr/lib
的默认配置。
二、文件名优先级
同一目录内,文件按 字典序(lexical order) 加载,但最终生效的规则如下:
• 字典序决定加载顺序:文件名按字母/数字顺序排序(例如 00-xxx
早于 10-xxx
)。
• 仅最高优先级的匹配文件生效:若多个文件匹配同一接口,只有 字典序最靠后的文件 生效(即文件名排序靠后的覆盖前面的)。
关键规则:
• 文件名前缀数字越小,优先级越低:
例如 10-static.network
和 20-dhcp.network
同时匹配同一接口,20-dhcp.network
会覆盖 10-static.network
。
• 完全匹配优先于通配符匹配:
若一个文件通过精确的 Name=enp0s3
匹配,另一个通过 Name=en*
通配符匹配,则精确匹配的文件优先。
示例:
目录内文件顺序:
/etc/systemd/network/
├── 10-static.network # 先加载(字典序靠前)
└── 20-dhcp.network # 后加载(字典序靠后)
• 若两者均匹配 enp0s3
,则 20-dhcp.network
的配置生效。
混合精确匹配与通配符:
/etc/systemd/network/
├── 10-enp0s3.network # [Match] Name=enp0s3
└── 20-wildcard.network # [Match] Name=en*
• 即使 20-wildcard.network
字典序靠后,但 10-enp0s3.network
是精确匹配,因此 10-enp0s3.network
生效。
三、合并与覆盖规则
不同配置块(Section)的参数处理方式不同:
[Match]
块:[Match]
块会被合并,但最终只有 最高优先级文件 的 [Network]
、[Address]
等配置块生效。[Network]
块参数:DHCP=
),最后一个加载的文件 的值生效。[Address]
和 [Route]
块:示例:
# 文件1: 10-first.network
[Network]
Address=192.168.1.10/24
# 文件2: 20-second.network
[Network]
Address=10.0.0.2/24
• 最终接口会同时拥有 192.168.1.10/24
和 10.0.0.2/24
两个 IP(参数合并)。
• 若两个文件都设置 DHCP=yes
,则只有 20-second.network
的 DHCP=yes
生效。
四、调试优先级问题
1. 查看已加载的配置文件
networkctl status <接口名> | grep "Network File"
• 输出示例:
Network File: /etc/systemd/network/20-dhcp.network (优先)
/usr/lib/systemd/network/80-default.network
2. 检查文件加载顺序
systemd-analyze cat-config systemd/network
• 显示所有已加载的配置文件及其加载顺序。
3. 日志验证
journalctl -u systemd-networkd -o cat | grep "enp0s3"
• 查看接口 enp0s3
的配置加载过程。
五、最佳实践
10-
、20-
),确保关键配置文件字典序靠后。[Match]
条件)。/run/systemd/network/
,避免与持久化配置冲突。systemd-analyze verify *.network
检查语法和潜在覆盖问题。通过合理利用优先级规则,可以灵活管理复杂网络环境,确保关键配置始终生效。