systemd-networkd 的 *.network 配置文件详解 笔记250323
查看官方文档可以用 man systemd.network
命令, 或访问: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
名称
systemd.network
— 网络配置
概要
network.network
描述
一个纯 INI 风格的文本文件,用于为匹配的网络接口编码网络配置,由 systemd-networkd(8)
使用。关于语法的一般描述,请参阅 systemd.syntax(7)
。
主网络配置文件必须以 .network
为扩展名;其他扩展名会被忽略。网络配置会在匹配的链路(接口)出现时立即生效。
.network
文件从以下系统网络目录中读取:
/usr/lib/systemd/network
/usr/local/lib/systemd/network
[1]- 临时运行时网络目录
/run/systemd/network
- 本地管理网络目录
/etc/systemd/network
所有配置文件按字母数字顺序统一排序和处理,无论其位于哪个目录。但同名文件会相互覆盖。建议每个文件名以小于 “70” 的数字开头(例如 10-eth0.network
)。否则,默认的 .network
文件或由 systemd-network-generator.service(8)
生成的文件可能会优先于用户配置文件。
/etc/
中的文件优先级最高。/run/
中的文件会覆盖/usr/
下的同名文件。- 特殊情况下,空文件(大小为 0)或指向
/dev/null
的同名符号链接会完全禁用该配置文件(即“屏蔽”)。
对于名为 foo.network
的配置文件,可以存在一个名为 foo.network.d/
的“附加配置”目录。该目录中所有以 .conf
结尾的文件会按字母数字顺序合并,并在主文件解析后解析。这可用于修改或添加配置,而无需改动主文件。每个附加文件必须包含正确的节头(如 [Match]
、[Network]
)。
除了 /etc/systemd/network
,附加的 .d
目录也可放置在 /usr/lib/systemd/network
或 /run/systemd/network
中。优先级规则为:
/etc/
中的附加文件优先于/run/
/run/
中的优先于/usr/lib/
- 所有附加文件优先于主配置文件(无论主文件位置)。
[Match] 节选项
.network
文件包含一个 [Match]
节(用于确定该文件是否适用于某个接口)和一个 [Network]
节(指定接口配置方式)。系统会按字母数字顺序应用第一个匹配接口的配置文件,后续文件即使匹配也会被忽略。
注意:若网络接口设置了 ID_NET_MANAGED_BY=
udev 属性,则任何 .network
文件均不会匹配该接口,除非属性值为字符串 "io.systemd.Network"
。此机制可用于将特定接口排除在 systemd-networkd
管理之外,同时保持 [Match]
节的通用性。ID_NET_MANAGED_BY=
属性声明了设备的预期所有者,确保并发的网络管理实现不会争夺设备控制权。
当满足 [Match]
节中所有条件时,配置文件才会匹配接口。若 [Match]
节未包含有效设置,则该文件会匹配所有接口,此时 systemd-networkd
会发出警告。
提示:为避免警告并明确匹配所有接口,可添加以下内容:
[Match]
Name=*
翻译说明
- 术语保留:如
systemd-networkd
、udev
、/dev/null
等专有名词和技术路径未翻译。 - 格式对齐:保留代码块、目录路径和命令行示例的原始格式,确保技术细节清晰。
- 逻辑强调:使用加粗和分段突出优先级规则、警告和关键机制。
- 注释补充:在“[Match] 节选项”中添加注释,解释技术行为的实际影响。
另一个解说
以下是 systemd-networkd
中 .network
配置文件的详细解析,涵盖核心概念、语法规则及实际应用场景:
1. 配置文件基础
文件位置与优先级
- 系统默认配置:
/usr/lib/systemd/network/
/usr/local/lib/systemd/network/
- 运行时配置:
/run/systemd/network/
(临时配置,重启后丢失) - 用户自定义配置:
/etc/systemd/network/
(优先级最高)
优先级规则:
- 文件名格式为
<数字>-<名称>.network
(如10-wired.network
)。 - 数字越小优先级越高(如
00-main.network
优先于20-backup.network
)。 /etc/
目录下的文件覆盖/run/
和/usr/
的同名文件。- 空文件或指向
/dev/null
的符号链接会屏蔽(禁用)对应配置。
2. 核心配置块
(1) [Match]
节:接口匹配规则
定义哪些网络接口(链路)会应用此配置。
常用匹配条件:
[Match]
Name=eth0 # 按接口名称匹配(支持通配符 eth*)
MACAddress=00:11:22:33:44:55 # 按 MAC 地址匹配
Driver=igb # 按驱动名称匹配(如 igb、e1000e)
Type=ether # 按接口类型匹配(ether, wlan, bridge)
Host=my-server # 按主机名匹配(需 systemd-hostnamed 服务)
Virtualization=no # 仅在非虚拟化环境生效
注意事项:
- 所有条件需同时满足(逻辑与)。
- 若未定义
[Match]
节或条件无效,配置文件会匹配所有接口,并触发警告。 - 排除非托管设备:若接口的
ID_NET_MANAGED_BY
udev 属性未设为io.systemd.Network
,systemd-networkd
将忽略该接口。
(2) [Network]
节:网络参数配置
定义接口的基础网络参数。
常见配置项:
[Network]
# 静态 IP 配置(IPv4/IPv6)
Address=192.168.1.10/24 # IPv4 地址
Address=2001:db8::1/64 # IPv6 地址(可多行)
Gateway=192.168.1.1 # 默认网关
DNS=8.8.8.8 1.1.1.1 # DNS 服务器(空格分隔)
Domains=example.com # DNS 搜索域# DHCP 配置
DHCP=yes # 同时启用 IPv4/IPv6 DHCP
DHCP=ipv4 # 仅 IPv4
DHCP=ipv6 # 仅 IPv6
LinkLocalAddressing=yes # 启用链路本地地址(如 169.254.x.x)# IPv6 扩展功能
IPv6AcceptRA=yes # 接受 IPv6 路由器通告(RA)
IPv6PrivacyExtensions=yes # 启用 IPv6 隐私扩展(临时地址)# 绑定其他服务
LLDP=yes # 启用 LLDP 协议(需 systemd-networkd 编译支持)
BindCarrier=eth1 # 绑定到另一接口的状态(依赖其网络连接)
冲突处理:
DHCP=yes
与静态Address=
冲突时,DHCP 优先(需明确注释静态配置)。- 多 DNS 服务器按顺序生效。
(3) [Route]
节:自定义路由规则
定义接口的特定路由表项。
[Route]
Destination=10.0.0.0/8 # 目标网络(0.0.0.0/0 表示默认路由)
Gateway=192.168.1.1 # 下一跳网关
Metric=100 # 路由优先级(数值越小优先级越高)
PreferredSource=192.168.1.10 # 指定源 IP
Table=123 # 自定义路由表(需预先定义)
多路由配置:
每个 [Route]
块定义一条独立路由,可重复多次。
3. 高级配置场景
(1) VLAN 配置
- 创建 VLAN 接口(需
.netdev
文件):# /etc/systemd/network/vlan10.netdev [NetDev] Name=eth0.10 Kind=vlan[VLAN] Id=10
- 配置 VLAN 接口网络:
# /etc/systemd/network/10-vlan.network [Match] Name=eth0.10[Network] Address=192.168.10.10/24 Gateway=192.168.10.1
(2) 桥接网络
- 创建桥接接口:
# /etc/systemd/network/br0.netdev [NetDev] Name=br0 Kind=bridge
- 将物理接口加入桥接:
# /etc/systemd/network/br0-slave-eth0.network [Match] Name=eth0[Network] Bridge=br0 # 将此接口绑定到桥接接口 br0
- 配置桥接接口 IP:
# /etc/systemd/network/br0.network [Match] Name=br0[Network] DHCP=yes
4. 调试与验证
关键命令:
# 重新加载配置(不重启服务)
sudo networkctl reload# 查看接口状态
networkctl status eth0# 检查所有接口列表
networkctl list# 查看 IP 和路由
ip addr show eth0
ip route show# 实时查看日志
journalctl -u systemd-networkd -f
配置文件语法检查:
systemd-analyze verify /etc/systemd/network/*.network
5. 常见问题排查
-
配置未生效:
- 检查文件名优先级(如
00-
是否被70-
覆盖)。 - 确认
[Match]
条件是否匹配目标接口。 - 查看日志:
journalctl -u systemd-networkd
。
- 检查文件名优先级(如
-
DHCP 失败:
- 确保
DHCP=yes
或DHCP=ipv4
已启用。 - 检查防火墙是否阻塞 DHCP 请求(UDP 67/68 端口)。
- 确保
-
路由冲突:
- 使用
ip route show
确认路由优先级(Metric 值)。 - 通过
[Route]
块显式定义更具体的路由规则。
- 使用
总结
- 核心逻辑:通过
[Match]
精确匹配接口,[Network]
定义基础网络参数,[Route]
控制高级路由。 - 优先级管理:文件名和目录优先级决定配置生效顺序。
- 扩展性:支持 VLAN、桥接、多路由等复杂场景,需结合
.netdev
文件使用。 - 调试优先:善用
networkctl
和journalctl
工具快速定位问题。
另一个解说
在 systemd-networkd
的 .network
配置文件中,[Network]
和 [Address]
节中均可能出现 Address
配置项,但它们的用途和上下文有所不同。以下是详细区别:
1. [Network] 节中的 Address
-
用途:
这是 主配置节,用于为网络接口分配 静态 IP 地址。
支持为同一接口配置 多个 IP 地址(通过重复使用Address
键)。 -
语法示例:
[Network] Address=192.168.1.100/24 Address=10.0.0.1/8 # 第二个静态 IP Gateway=192.168.1.1 DNS=8.8.8.8
-
特点:
- 是静态 IP 配置的主要方式。
- 可直接定义网关 (
Gateway
) 和 DNS (DNS
) 等全局参数。 - 支持 IPv4/IPv6 双栈配置(如
Address=2001:db8::1/64
)。
2. [Address] 节中的 Address
-
用途:
属于 子配置节,通常与[DHCPServer]
或[IPv6AcceptRA]
等节配合使用,用于 细化特定 IP 地址的配置。
例如,为 DHCP 分配的地址段设置广播地址 (Broadcast
),或定义 IPv6 无状态自动配置(SLAAC)的行为。 -
语法示例:
[Address] Address=192.168.1.0/24 Broadcast=192.168.1.255 # 定义广播地址[DHCPServer] PoolOffset=10 PoolSize=20
-
特点:
- 提供 更细粒度的控制(如广播地址、DHCP 地址池)。
- 常用于定义 DHCP 服务器的地址池范围。
- 在 IPv6 配置中,可结合
DuplicateAddressDetection
等参数使用。
关键区别总结
配置项位置 | 用途 | 典型场景 | 支持参数 |
---|---|---|---|
[Network] 节的 Address | 静态 IP 主配置 | 为接口分配多个静态 IP | Gateway , DNS 等全局参数 |
[Address] 节的 Address | 细化特定地址段的配置 | 定义 DHCP 池、IPv6 SLAAC 行为 | Broadcast , PreferredLifetime |
何时使用哪个?
- 静态 IP 配置 → 优先使用
[Network]
节的Address
。 - 动态 IP 或细化地址行为 → 使用
[Address]
节配合其他子节(如[DHCPServer]
)。
通过灵活组合这些配置,可以实现从简单静态 IP 到复杂 DHCP/IPv6 混合网络的多样化需求。
另一个解说
systemd-networkd
是一个强大的网络管理工具,它允许用户通过配置文件来定义和控制网络接口的行为。这些配置文件通常位于 /etc/systemd/network/
目录下,并以 .network
为扩展名。每个 .network
文件可以包含多个部分,每个部分定义了不同的配置选项。下面是对 .network
配置文件的详细解释。
基本结构
.network
文件的基本结构由几个主要部分组成:
[Match]
:用于匹配特定网络设备的标准。[Network]
:用于定义网络接口的网络设置。- 其他可选部分如
[Link]
,[Address]
,[Route]
等,根据需要添加。
[Match] 部分
这部分用于指定哪些网络设备应该应用此配置。常见的选项包括:
Name=
:指定网络接口名称(例如eth0
或者通配符eth*
)。MACAddress=
:基于MAC地址匹配。Driver=
:基于驱动程序名称匹配。Host=
:基于主机名匹配。
示例:
[Match]
Name=enp3s0
这表示仅当网络接口名称为 enp3s0
时应用该配置。
[Network] 部分
这部分定义了具体的网络设置。常见的选项有:
DHCP=
:启用或禁用DHCP(值可以是yes
或no
)。Address=
:静态IP地址(格式为IP/掩码长度
)。Gateway=
:默认网关。DNS=
:DNS服务器地址。Domains=
:搜索域列表。
示例:
[Network]
DHCP=yes
或者对于静态配置:
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
其他部分
除了上述两个核心部分外,还有其他部分可以根据需求添加:
[Link]
:用于设置链路层属性,比如MTU大小等。[Address]
:为接口添加额外的IP地址。[Route]
:添加路由规则。
使用步骤
- 创建配置文件:在
/etc/systemd/network/
下创建一个新的.network
文件。 - 编辑配置文件:根据你的网络需求填写相应的
[Match]
和[Network]
部分。 - 启用服务:确保
systemd-networkd
已经启用并启动。sudo systemctl enable systemd-networkd sudo systemctl start systemd-networkd
- 重启服务:如果修改了现有配置文件,需要重启
systemd-networkd
使更改生效。sudo systemctl restart systemd-networkd
注意事项
- 如果系统中同时运行了 NetworkManager 或 Netplan,它们可能会与
systemd-networkd
发生冲突。在这种情况下,你可能需要禁用其他网络管理工具。 - 配置文件按照字母顺序加载,因此可以通过前缀数字来控制加载顺序和优先级。
通过以上步骤和说明,你可以利用 systemd-networkd
的 .network
配置文件灵活地管理和配置Linux系统的网络环境。希望这些信息对你有所帮助!
另一个解说
systemd-networkd
是 systemd
系统和服务管理器的一部分,用于管理网络设备、配置网络接口等。*.network
配置文件用于定义网络接口的行为和属性,以下为你详细介绍其各部分内容:
文件基础信息
- 文件位置:通常存放在
/etc/systemd/network/
目录下,文件名可以自定义,但需以.network
结尾。 - 文件格式:采用 INI 格式,由多个节(section)构成,每个节以
[节名]
开头,下面跟着一系列键值对。
常见节及其配置项
[Match] 节
此节用于指定哪些网络接口会应用该配置文件,可依据多种条件匹配网络接口。
- Name:按网络接口名称匹配。例如:
[Match]
Name=enp0s3
这会让配置文件应用到名为 enp0s3
的网络接口。
- MACAddress:按 MAC 地址匹配。示例:
[Match]
MACAddress=00:11:22:33:44:55
- Driver:按网络驱动程序名称匹配。示例:
[Match]
Driver=e1000
[Network] 节
用于设置网络的通用配置。
- DHCP:决定是否启用 DHCP,值可以是
yes
、no
、ipv4
或ipv6
。示例:
[Network]
DHCP=yes
- Address:设置静态 IP 地址和子网掩码。可多次使用以设置多个地址。示例:
[Network]
Address=192.168.1.100/24
Address=2001:db8::1/64
- Gateway:设置默认网关地址。示例:
[Network]
Gateway=192.168.1.1
- DNS:设置 DNS 服务器地址。可多次使用以设置多个 DNS 服务器。示例:
[Network]
DNS=8.8.8.8
DNS=8.8.4.4
- Domains:设置搜索域。示例:
[Network]
Domains=example.com
[Address] 节
用于详细设置 IP 地址,可存在多个 [Address]
节以设置多个 IP 地址。
- Address:设置 IP 地址和子网掩码。示例:
[Address]
Address=192.168.1.101/24
- Label:设置地址标签。示例:
[Address]
Address=192.168.1.101/24
Label=secondary
[Route] 节
用于设置路由规则。
- Destination:设置目标网络地址。示例:
[Route]
Destination=192.168.2.0/24
- Gateway:设置网关地址。示例:
[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1
- Metric:设置路由度量值。示例:
[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1
Metric=100
[Link] 节
用于设置网络接口的通用属性。
- MTU:设置最大传输单元。示例:
[Link]
MTU=9000
- MACAddress:设置网络接口的 MAC 地址。示例:
[Link]
MACAddress=00:11:22:33:44:55
配置生效与检查
- 配置生效:修改配置文件后,需重新加载
systemd-networkd
服务使配置生效,命令如下:
sudo systemctl restart systemd-networkd
- 检查状态:可使用以下命令检查
systemd-networkd
服务状态:
sudo systemctl status systemd-networkd
- 查看网络配置:使用
networkctl
命令查看网络接口的配置信息:
sudo networkctl status
完整示例
下面是一个完整的 .network
文件示例,为 enp0s3
网络接口设置静态 IP 地址:
[Match]
Name=enp0s3[Network]
DHCP=no
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8[Address]
Address=192.168.1.101/24[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1[Link]
MTU=9000
通过上述配置,enp0s3
网络接口会使用静态 IP 地址 192.168.1.100
和 192.168.1.101
,网关为 192.168.1.1
,DNS 服务器为 8.8.8.8
,同时设置了一条发往 192.168.2.0/24
网络的路由规则,并且将 MTU 设置为 9000。
另一个解说
以下是对 systemd-networkd 的 *.network
配置文件的详细解释:
配置文件结构
*.network
配置文件主要由以下几个部分组成:
[Match] 小节
用于指定该配置文件适用的网络接口,通过匹配条件来确定哪些接口会应用该配置文件中的设置。常见的匹配条件包括:
- Name:指定接口名称,可以使用通配符,如
eth*
表示匹配所有以eth
开头的接口。 - MACAddress:指定接口的 MAC 地址。
- Driver:指定接口的驱动程序名称。
- Type:指定接口类型,如
ether
(以太网)、wifi
等。
示例:
[Match]
Name=eth0
该配置表示该配置文件仅适用于名称为 eth0
的网络接口。
[Network] 小节
包含具体的网络配置参数,用于定义接口的网络设置。常见的配置项包括:
- Address:设置静态 IP 地址,格式为
IP地址/子网掩码长度
,如192.168.0.2/24
。 - Gateway:指定网关地址,如
192.168.0.1
。 - DNS:设置 DNS 服务器地址,可多次使用以设置多个 DNS 服务器。
- DHCP:启用 DHCP,可设置为
yes
、ipv4
或ipv6
,如DHCP=yes
表示同时启用 IPv4 和 IPv6 的 DHCP。 - Domains:设置搜索域,可多次使用以设置多个搜索域。
- MTUBytes:设置最大传输单元(MTU)的大小。
示例:
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
DNS=8.8.8.8
[Route] 小节
用于配置静态路由,可以定义多条路由规则。常见的配置项包括:
- Destination:目标网络地址,格式为
IP地址/子网掩码长度
。 - Gateway:指定该路由的网关地址。
- Via:指定该路由经过的中间节点(可选)。
- Metric:设置该路由的优先级,数值越小优先级越高。
示例:
[Route]
Destination=10.0.0.0/8
Gateway=192.168.0.1
Metric=100
[DHCP] 小节
用于配置 DHCP 客户端的行为,当接口通过 DHCP 获取 IP 地址时使用。常见的配置项包括:
- UseDNS:是否使用 DHCP 服务器提供的 DNS 信息,可设置为
yes
或no
。 - UseDomains:是否使用 DHCP 服务器提供的搜索域信息,可设置为
yes
或no
。 - SendHostname:是否向 DHCP 服务器发送主机名,可设置为
yes
或no
。
示例:
[DHCP]
UseDNS=yes
UseDomains=yes
SendHostname=yes
[Bridge] 小节
当接口作为桥接设备时使用,用于配置桥接相关的参数。常见的配置项包括:
- STP:是否启用生成树协议(Spanning Tree Protocol),可设置为
yes
或no
。 - ForwardDelaySec:设置生成树协议的转发延迟时间,单位为秒。
示例:
[Bridge]
STP=yes
ForwardDelaySec=15
配置文件示例
静态 IP 配置
[Match]
Name=eth0[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
DNS=8.8.8.8
DHCP 配置
[Match]
Name=eth0[Network]
DHCP=yes
多块网卡配置(使用通配符)
[Match]
Name=eth*[Network]
DHCP=yes
静态路由配置
[Match]
Name=eth0[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1[Route]
Destination=10.0.0.0/8
Gateway=192.168.0.1
Metric=100
注意事项
- 配置文件优先级:
/etc/systemd/network/
目录中的配置文件优先级高于/usr/lib/systemd/network/
中的同名文件。如果存在同名文件,/etc/systemd/network/
中的配置会覆盖/usr/lib/systemd/network/
中的配置。 - 应用配置:在修改或创建配置文件后,需要重启
systemd-networkd
服务以使配置生效。可以使用以下命令:systemctl restart systemd-networkd
- 配置冲突:如果在一个配置文件中使用通配符匹配了多块网卡,但其中某些网卡需要特殊的配置,可能会导致配置冲突。因此,需要仔细规划网络配置,确保每块网卡都能正确应用所需的设置。
通过以上详细的解释和示例,可以全面了解 systemd-networkd 的 *.network
配置文件的结构和使用方法,从而根据实际需求灵活配置网络接口。
另一个解说
以下是对systemd-networkd中.network
配置文件的详细解析,按功能模块分层说明:
. n e t w o r k 文件路径: / e t c / s y s t e m d / n e t w o r k / ∗ . n e t w o r k 或 / u s r / l i b / s y s t e m d / n e t w o r k / ∗ . n e t w o r k .network文件路径:/etc/systemd/network/*.network \quad 或 \quad /usr/lib/systemd/network/*.network .network文件路径:/etc/systemd/network/∗.network或/usr/lib/systemd/network/∗.network
一、核心配置节
1. [Match] 节
匹配网络接口的条件:
[Match]
Name=en* # 匹配接口名以"en"开头(如enp0s3)
MACAddress=00:11:22:33:44:55 # 按MAC地址匹配
Driver=igb # 匹配驱动类型
Type=ether # 接口类型(ether/wireless等)
*支持通配符(和?),多条件时为"与"关系
2. [Link] 节
配置链路层参数:
[Link]
MTUBytes=1500 # 设置MTU值
MACAddress=aa:bb:cc:dd:ee:ff # 强制修改MAC地址
WakeOnLan=magic # 启用魔术包唤醒
MACAddressPolicy=persistent # MAC地址生成策略
3. [Network] 节
定义网络层配置:
[Network]
DHCP=yes # 启用DHCP(yes/ipv4/ipv6)
DNS=8.8.8.8 2001:4860::8888 # 指定DNS服务器
Domains=example.com # 搜索域
Address=192.168.1.10/24 # 静态IP(需配合[Address]节)
Gateway=192.168.1.1 # 默认网关
IPv6PrivacyExtensions=yes # 启用临时IPv6地址
二、扩展配置节
4. [Address] 节
静态IP配置(可多实例):
[Address]
Address=192.168.1.10/24
Peer=10.0.0.1/32 # 点对点地址
Broadcast=192.168.1.255
5. [Route] 节
自定义路由配置:
[Route]
Gateway=10.0.0.1
Destination=192.168.2.0/24
Metric=1024 # 路由优先级
6. [DHCP] 节
精细控制DHCP行为:
[DHCP]
UseDNS=yes # 是否接受DNS配置
UseMTU=yes # 是否应用DHCP提供的MTU
RouteMetric=100 # 路由度量值
UseTimezone=no # 是否接受时区信息
三、IPv6专用配置
7. [IPv6AcceptRA] 节
[IPv6AcceptRA]
UseDNS=yes # 是否使用RA提供的DNS
UseDomains=yes # 是否应用域名
四、配置示例
静态IP配置
[Match]
Name=enp0s3[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DHCP配置
[Match]
Name=en*[Network]
DHCP=ipv4
五、重要注意事项
-
优先级规则
/etc/systemd/network/
中的配置会覆盖/usr/lib/systemd/network/
文件按字母顺序加载,后加载的会覆盖先前的同名配置 -
生效方法
sudo systemctl restart systemd-networkd
-
调试命令
networkctl status # 查看接口状态 journalctl -u systemd-networkd # 查看日志
注意:修改配置后需重启 s y s t e m d − n e t w o r k d 服务才能生效 注意:修改配置后需重启systemd-networkd服务才能生效 注意:修改配置后需重启systemd−networkd服务才能生效
另一个解说
以下是对 systemd-networkd
的 *.network
配置文件的全面详解,涵盖其核心功能、配置语法、高级场景及调试方法:
一、配置文件基础
1. 文件作用
• 核心功能:定义网络接口的匹配规则、IP 地址分配(静态/DHCP)、路由、DNS、VLAN、绑定接口等。
• 适用场景:服务器、容器、虚拟机、复杂网络拓扑(如多网卡、VPN、隧道)。
2. 文件位置与优先级
• 路径:
• /etc/systemd/network/
:管理员手动配置(持久化,优先级最高)。
• /run/systemd/network/
:临时配置(重启失效,优先级次之)。
• /usr/lib/systemd/network/
:系统默认配置(避免修改,优先级最低)。
• /usr/local/lib/systemd/network/
:系统默认配置(避免修改,优先级最低)。
• 命名规则:<优先级>-<描述>.network
(如 10-wired.network
),数字越小优先级越高。
3. 文件结构
INI 格式,分段(Section)管理,支持以下关键块:
• [Match]
:匹配接口的条件。
• [Link]
:物理/虚拟接口参数(如 MAC 地址、MTU)。
• [Network]
:全局网络配置(IP、DNS、DHCP)。
• [Address]
:精细 IP 地址参数(如广播地址、点对点)。
• [Route]
:自定义路由规则。
• [DHCP]
:DHCP 客户端行为控制。
• [IPv6AcceptRA]
:IPv6 路由器通告设置。
二、核心配置块详解
1. [Match]
块:接口匹配规则
定义哪些接口应用此配置,支持多条件组合(逻辑 AND)。
参数 | 示例 | 说明 |
---|---|---|
Name= | Name=enp0s3 | 按接口名匹配(支持通配符 * 、? ) |
MACAddress= | MACAddress=00:11:22:33:44:55 | 按 MAC 地址匹配 |
Driver= | Driver=e1000e | 按网卡驱动类型匹配 |
Type= | Type=ether | 按接口类型(如 ether 、wlan ) |
Property= | Property=ID_VENDOR_ID=8086 | 按 udev 属性匹配(支持复杂逻辑) |
SSID= | SSID=MyWiFi | 按无线网络 SSID 匹配(支持通配符) |
示例:
[Match]
Name=enp0s3
MACAddress=00:11:22:33:44:55
Driver=rtl8169
2. [Link]
块:接口物理层参数
控制接口的物理特性(如 MAC 地址、MTU)。
参数 | 示例 | 说明 |
---|---|---|
MACAddress= | MACAddress=00:11:22:33:44:aa | 强制设置接口 MAC 地址 |
MTUBytes= | MTUBytes=1500 | 设置最大传输单元(MTU) |
Promiscuous= | Promiscuous=yes | 启用混杂模式(捕获所有流量) |
RequiredForOnline= | RequiredForOnline=yes | 接口在线状态是否影响系统网络就绪 |
示例:
[Link]
MACAddress=00:11:22:33:44:aa
MTUBytes=9000 # 支持巨型帧(Jumbo Frame)
3. [Network]
块:全局网络配置
定义接口的基础网络参数。
参数 | 示例 | 说明 |
---|---|---|
DHCP= | DHCP=ipv4 | 启用 DHCP(yes /no /ipv4 /ipv6 ) |
DNS= | DNS=8.8.8.8 1.1.1.1 | 指定 DNS 服务器(空格分隔) |
Domains= | Domains=example.com | 设置 DNS 搜索域 |
Address= | Address=192.168.1.10/24 | 静态 IP 地址(可重复定义多个地址) |
IPv6PrivacyExtensions= | IPv6PrivacyExtensions=yes | 启用 IPv6 隐私扩展(随机化地址) |
示例:
[Network]
DHCP=no
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8
Domains=example.com
4. [Address]
块:高级 IP 配置
为接口添加额外 IP 或精细控制。
参数 | 示例 | 说明 |
---|---|---|
Address= | Address=10.0.0.1/24 | IP 地址及子网掩码 |
Peer= | Peer=10.0.0.2/24 | 点对点链路远端地址(如 VPN) |
Broadcast= | Broadcast=192.168.1.255 | 手动覆盖默认广播地址 |
PreferredLifetime= | PreferredLifetime=1h | IPv6 地址首选生命周期 |
示例:
[Address]
Address=192.168.1.10/24
Broadcast=192.168.1.255[Address]
Address=10.0.0.1/24
Peer=10.0.0.2/24
5. [Route]
块:自定义路由
定义静态路由规则(支持 IPv4/IPv6)。
参数 | 示例 | 说明 |
---|---|---|
Destination= | Destination=0.0.0.0/0 | 目标子网(默认路由) |
Gateway= | Gateway=192.168.1.1 | 下一跳网关地址 |
Metric= | Metric=100 | 路由优先级(数值越小优先级越高) |
Type= | Type=blackhole | 特殊路由类型(如黑洞路由) |
示例:
[Route]
Destination=10.8.0.0/24
Gateway=192.168.1.2
Metric=200
6. [DHCP]
块:DHCP 客户端行为
控制 DHCP 客户端细节(需在 [Network]
中启用 DHCP)。
参数 | 示例 | 说明 |
---|---|---|
UseDNS= | UseDNS=no | 是否使用 DHCP 提供的 DNS |
UseDomains= | UseDomains=yes | 是否使用 DHCP 提供的搜索域 |
RouteMetric= | RouteMetric=100 | 为 DHCP 路由设置跃点数 |
ClientIdentifier= | ClientIdentifier=mac | DHCP 客户端标识(mac 或 duid ) |
示例:
[DHCP]
UseDNS=no
RouteMetric=100
三、高级配置场景
1. VLAN 配置
# 创建 VLAN 接口 enp0s3.100
[Match]
Name=enp0s3[Network]
VLAN=enp0s3.100# VLAN 子接口配置
[Match]
Name=enp0s3.100[Network]
Address=10.0.100.2/24
Gateway=10.0.100.1
2. 绑定接口(Bonding)
# 创建绑定接口 bond0
[Match]
Name=bond0[Network]
Bond=slave1 slave2 # 指定从属接口# 从属接口配置
[Match]
Name=slave1[Network]
Bond=bond0
3. IPv6 隐私扩展
[Network]
IPv6PrivacyExtensions=yes
四、调试与验证
1. 检查接口状态
networkctl status enp0s3 # 查看接口详细状态
networkctl list # 列出所有接口
2. 查看日志
journalctl -u systemd-networkd --since "5 minutes ago" # 查看近期日志
journalctl -u systemd-networkd -f # 实时跟踪日志
3. 手动触发重载
systemctl restart systemd-networkd # 重启服务使配置生效
五、常见问题与解决方案
1. 配置未生效
• 原因:文件名优先级错误、语法错误、接口未匹配。
• 解决:
networkctl status <接口名> # 检查配置是否加载
systemd-analyze verify *.network # 验证语法
2. DHCP 获取失败
• 原因:防火墙阻塞、DHCP 服务未响应。
• 解决:
[DHCP]
UseDNS=no # 禁用 DHCP DNS(排除干扰)
RouteMetric=100 # 调整路由优先级
3. 多网卡冲突
• 解决:通过 [Match]
精确匹配接口,或调整文件名优先级。
六、最佳实践
- 命名规范:文件名以数字开头(如
10-wired.network
),确保优先级。 - 避免手动修改:若使用 NetPlan,优先通过 YAML 配置。
- 测试配置:使用
netplan try
或备份文件后再修改。 - 日志监控:实时跟踪日志快速定位问题。
通过灵活组合上述配置块,可高效管理从简单家用网络到企业级复杂拓扑的网络环境。
systemd.network 部分文档翻译
Index · Directives
索引 · 指令
systemd devel
systemd 开发
Name
名称
systemd.network
- 网络配置
Synopsis
概要
network.network
Description
描述
一种纯 INI 风格的文本文件,用于编码与匹配网络接口相关的网络配置,供 systemd-networkd(8)
使用。语法的一般描述请参见 systemd.syntax(7)
。
主网络文件必须使用 .network
扩展名;其他扩展名将被忽略。当链接出现时,网络配置会被应用到对应的链接上。
.network
文件从位于系统网络目录 /usr/lib/systemd/network
和 /usr/local/lib/systemd/network
[1]、易失的运行时网络目录 /run/systemd/network
以及本地管理网络目录 /etc/systemd/network
中读取。无论文件位于哪个目录,所有配置文件会按字母数字顺序排序并处理。然而,文件名相同的文件会互相覆盖。建议每个文件名以小于 “70” 的数字开头(例如 10-eth0.network
)。否则,默认的 .network
文件或由 systemd-network-generator.service(8)
生成的文件可能会优先于用户配置的文件。/etc/
中的文件具有最高优先级,/run/
中的文件会覆盖同名但位于 /usr/
下的文件。如有需要,这可以用于用本地文件覆盖系统提供的配置文件。特殊情况下,空文件(文件大小为 0)或指向 /dev/null
的同名符号链接会完全禁用该配置文件(即 “masked”)。
与网络文件 foo.network
一起,可能存在一个 “drop-in” 目录 foo.network.d/
。该目录中所有以 .conf
结尾的文件将按字母数字顺序合并,并在主文件本身解析后解析。这对于在不修改主配置文件的情况下更改或添加配置设置非常有用。
除了 /etc/systemd/network
外,drop-in “.d” 目录也可以放在 /usr/lib/systemd/network
或 /run/systemd/network
目录中。/etc/
下的 drop-in 文件优先于 /run/
下的文件,而后者又优先于 /usr/lib/
下的文件。无论位于何处,这些 drop-in 文件都优先于主网络文件。
[Match] 段选项
网络文件包含一个 [Match]
段,用于确定给定的网络文件是否适用于给定的接口;以及一个 [Network]
段,指定应如何配置接口。按字母数字顺序排列的第一个匹配给定接口的网络文件会被应用,所有后续文件即使匹配也会被忽略。
注意:任何设置了 ID_NET_MANAGED_BY=
udev 属性的网络接口将不会被任何 .network
文件匹配——除非该属性的值是字符串 "io.systemd.Network"
——即使 [Match]
段中的其他条件匹配。这可以用于将特定网络接口排除在 systemd-networkd
的管理之外,同时保持 [Match]
段的通用性。ID_NET_MANAGED_BY=
属性声明了设备的预期所有权,并确保并发的网络管理实现不会争相对特定设备进行管理。
当 [Match]
段中的所有条件都满足时,网络文件被称为与网络接口匹配。如果网络文件的 [Match]
段中没有有效设置,则文件将匹配所有接口,并且 systemd-networkd
会发出警告。提示:为避免警告并明确匹配所有接口,可添加以下内容:
Name=*
以下键值被接受:
MACAddress=
硬件地址的空白分隔列表。可接受的格式包括:
• 冒号分隔的十六进制(例如 "12:34:56:78:90:ab"
)
• 连字符分隔的十六进制(例如 "12-34-56-78-90-ab"
)
• 点分隔的十六进制(例如 "1234.5678.90ab"
)
• IPv4 地址格式(例如 "127.0.0.1"
)
• IPv6 地址格式(例如 "2001:db8::8a2e:370:7334"
)
每个 MAC 地址的总长度必须为 4(IPv4 隧道)、6(以太网)、16(IPv6 隧道)或 20(InfiniBand)。此选项可多次出现,此时列表会被合并。若赋值为空字符串,则重置先前定义的硬件地址列表。默认为未设置。
(添加于版本 211)
PermanentMACAddress=
硬件永久地址的空白分隔列表。MACAddress=
匹配设备的当前 MAC 地址,而此选项匹配设备的永久 MAC 地址(可能与当前不同)。使用全冒号、连字符或点分隔的十六进制,或 IPv4/IPv6 地址格式。此选项可多次出现,此时列表会被合并。若赋值为空字符串,则重置先前定义的硬件地址列表。默认为未设置。
(添加于版本 245)
Path=
匹配持久路径的 shell 风格通配符列表,由 udev 属性 ID_PATH
暴露。
(添加于版本 211)
Driver=
绑定到设备的当前驱动的 shell 风格通配符列表,由父设备的 udev 属性 ID_NET_DRIVER
或设备本身的 ethtool -i
暴露。若列表前缀为 "!"
,则测试取反。
(添加于版本 211)
Type=
设备类型的 shell 风格通配符列表,由 networkctl list
暴露。有效值包括 "ether"
、"loopback"
、"wlan"
、"wwan"
。若列表前缀为 "!"
,则测试取反。
(添加于版本 211)
Kind=
设备类型的 shell 风格通配符列表,由 networkctl status INTERFACE
或 ip -d link show INTERFACE
暴露。有效值包括 "bond"
、"bridge"
、"gre"
、"tun"
、"veth"
。若列表前缀为 "!"
,则测试取反。
(添加于版本 251)
Property=
带值的 udev 属性名的空白分隔列表。多个属性时,测试结果为逻辑与。若列表前缀为 "!"
,则测试取反。值包含空格时需用引号包裹,引号用 "\"
转义。
示例:
Property=ID_MODEL_ID=9999 "ID_VENDOR_FROM_DATABASE=vendor name" "KEY=with \"quotation\""
(添加于版本 243)
Name=
设备名称或替代名称的 shell 风格通配符列表,由 udev 属性 "INTERFACE"
暴露。若列表前缀为 "!"
,则测试取反。
(添加于版本 211)
WLANInterfaceType=
无线网络类型的空白分隔列表。支持值:"ad-hoc"
、"station"
、"ap"
等。若列表前缀为 "!"
,则测试取反。
(添加于版本 244)
SSID=
当前连接的无线 LAN 的 SSID 的 shell 风格通配符列表。若列表前缀为 "!"
,则测试取反。
(添加于版本 244)
BSSID=
当前连接的无线 LAN 的硬件地址列表。格式同 MACAddress=
。
(添加于版本 244)
Host=
匹配主机名或机器 ID。参见 systemd.unit(5)
中的 ConditionHost=
。
(添加于版本 211)
Virtualization=
检查是否在虚拟化环境中运行。参见 systemd.unit(5)
中的 ConditionVirtualization=
。
(添加于版本 211)
KernelCommandLine=
检查特定内核命令行选项。参见 systemd.unit(5)
中的 ConditionKernelCommandLine=
。
(添加于版本 211)
KernelVersion=
检查内核版本。参见 systemd.unit(5)
中的 ConditionKernelVersion=
。
(添加于版本 237)
Credential=
检查是否传递了指定凭证给 systemd-udevd.service
。参见系统和服务凭证。
(添加于版本 252)
Architecture=
检查系统架构。参见 systemd.unit(5)
中的 ConditionArchitecture=
。
(添加于版本 211)
Firmware=
检查固件信息。参见 systemd.unit(5)
中的 ConditionFirmware=
。
(添加于版本 249)
[Link] 段配置选项
以下是 [Link]
段支持的配置参数及详细说明:
MACAddress=
指定设备的硬件地址(MAC 地址)。
示例:
[Link]
MACAddress=00:11:22:33:44:55
自版本 218 起添加。
MTUBytes=
设置设备的 最大传输单元(MTU),单位为字节。支持后缀 K
、M
、G
(以 1024 为基数)。
注意:
- 如果接口启用 IPv6 且 MTU 低于 1280(IPv6 的最小 MTU),系统会自动将其调整为 1280。
示例:
[Link]
MTUBytes=1500
自版本 218 起添加。
ARP=
控制是否启用 IPv4 ARP(地址解析协议)和 IPv6 NDP(邻居发现协议)。
- 类型:布尔值(
true
/false
)。 - 默认:未设置(遵循内核默认行为)。
用途: - 在创建多个 MACVLAN 或 VLAN 虚拟接口时,禁用 ARP 可防止底层物理接口参与网络通信。
Multicast=
启用或禁用设备的组播功能。
- 类型:布尔值。
- 默认:未设置。
自版本 239 起添加。
AllMulticast=
控制设备是否接收所有组播包(常用于组播路由场景)。
- 类型:布尔值。
- 默认:未设置。
自版本 239 起添加。
Promiscuous=
启用或禁用接口的 混杂模式(接收所有网络流量)。
- 类型:布尔值。
- 默认:未设置。
特殊场景: - 若在 MACVLAN/MACVTAP 的底层链接中设置为
false
,虚拟接口将以nopromisc
标志创建。
自版本 248 起添加。
Unmanaged=
控制是否由 systemd-networkd 管理该接口。
- 类型:布尔值(
yes
/no
)。 - 默认:
no
。
用途: - 设置为
yes
时,systemd-networkd 不会尝试配置或启用该接口,避免与其他应用程序管理的接口冲突。
自版本 233 起添加。
Group=
将接口加入指定组(类似交换机中的端口组),便于批量操作。
- 类型:无符号整数(范围 0–2147483647)。
- 默认:未设置。
自版本 246 起添加。
RequiredForOnline=
定义接口是否被视为系统在线状态的必要条件。
- 类型:布尔值、最小操作状态(如
carrier
)或状态范围(如degraded:routable
)。 - 默认:
- 若未设置
ActivationPolicy=
或设置为up
/always-up
/bound
,默认为yes
。 - 若
ActivationPolicy=
设为manual
/down
,默认为no
。
特殊逻辑:
- 若未设置
- 对于 CAN 设备,布尔值
yes
对应carrier
状态; - 对于主设备(如网桥或绑定接口),对应
degraded-carrier
; - 对于其他接口,对应
degraded
。
自版本 236/256 起添加。
RequiredFamilyForOnline=
指定在线状态所需的地址族(IPv4/IPv6)。
- 可选值:
ipv4
、ipv6
、both
、any
。 - 默认:
no
(仅在RequiredForOnline=no
时生效)。
自版本 249 起添加。
ActivationPolicy=
控制 systemd-networkd 如何管理接口的 管理状态(即 IFF_UP
标志)。
- 可选值:
up
(默认):接口配置时自动启用。always-up
:始终强制启用(即使接口状态变化)。manual
:由管理员手动控制启用/禁用。always-down
:始终禁用。bound
:与BindCarrier=
配合使用。
注意:
- 设置为
always-up
时,IgnoreCarrierLoss=
会被强制设为true
,以避免因物理连接中断导致配置失败。
自版本 248 起添加。
[Network] 段选项
[Network]
段接受以下键值配置:
Description=
- 描述:设备的描述信息,仅用于显示用途。
- 版本:v211 新增。
DHCP=
- 描述:启用 DHCPv4 和/或 DHCPv6 客户端支持。可选值:
yes
、no
、ipv4
、ipv6
,默认为no
。 - 注意:
- 若启用了 IPv6 的路由通告接收(
IPv6AcceptRA=
),无论此参数如何设置,DHCPv6 默认会被触发。 - 显式启用 DHCPv6 时,客户端会按
[DHCPv6]
段的WithoutRA=
模式运行,无论链路上是否存在路由器。 - 默认不将 DHCP 提供的域名用于解析,需通过
UseDomains=
配置。
- 若启用了 IPv6 的路由通告接收(
- 版本:v211 新增。
DHCPServer=
- 描述:启用 DHCPv4 服务器(布尔值,默认为
no
)。更多配置在[DHCPServer]
段。 - 注意:需配合
RelayTarget=
或PersistLeases=no
才能在存储就绪后自动启动。 - 版本:v215 新增。
LinkLocalAddressing=
- 描述:启用链路本地地址自动配置。可选值:布尔值、
ipv4
、ipv6
。yes
或ipv6
:配置 IPv6 链路本地地址。yes
或ipv4
:在 DHCPv4 失败后配置 IPv4 链路本地地址。
- 默认:若启用
KeepMaster=
、Bridge=
或使用passthru
模式的 MACVLAN/MACVTAP,则为no
;否则为ipv6
。 - 版本:v219 新增。
IPv6LinkLocalAddressGenerationMode=
- 描述:指定 IPv6 链路本地地址生成模式。可选值:
eui64
、none
、stable-privacy
、random
。- 默认:若指定了
IPv6StableSecretAddress=
,则为stable-privacy
;否则为eui64
。
- 默认:若指定了
- 版本:v246 新增。
IPv6StableSecretAddress=
- 描述:指定用于生成 IPv6 链路本地地址的稳定密钥地址。若设置此参数且未指定
IPv6LinkLocalAddressGenerationMode=
,则隐式启用stable-privacy
模式。 - 版本:v249 新增。
IPv4LLStartAddress=
- 描述:指定尝试的第一个 IPv4 链路本地地址(如
169.254.1.2
)。若未设置,自动选择随机地址。 - 版本:v252 新增。
IPv4LLRoute=
- 描述:是否为非 IPv4LL 主机设置与仅 IPv4LL 主机通信的路由(布尔值,默认为
false
)。 - 版本:v216 新增。
DefaultRouteOnDevice=
- 描述:在接口上绑定 IPv4 默认路由(布尔值,默认为
false
)。适用于点对点接口。 - 示例:
[Route] Gateway=0.0.0.0 Table=1234
- 版本:v243 新增。
LLMNR=
- 描述:启用链路本地多播名称解析(LLMNR)。可选值:布尔值或
resolve
(仅解析不注册)。默认true
。 - 版本:v216 新增。
MulticastDNS=
- 描述:启用多播 DNS(mDNS)。可选值:布尔值或
resolve
(仅解析不注册)。默认false
。 - 版本:v229 新增。
DNSOverTLS=
- 描述:启用 DNS-over-TLS。可选值:布尔值或
opportunistic
(兼容非 TLS 服务器)。默认继承全局配置。 - 版本:v239 新增。
DNSSEC=
- 描述:启用 DNSSEC 验证。可选值:布尔值或
allow-downgrade
(兼容非 DNSSEC 网络)。默认继承全局配置。 - 版本:v229 新增。
LLDP=
- 描述:控制以太网 LLDP 数据包接收。可选值:布尔值或
routers-only
(仅收集路由器信息)。默认routers-only
。 - 版本:v219 新增。
EmitLLDP=
- 描述:控制 LLDP 数据包发送。可选值:布尔值或特定桥接模式。默认
false
。 - 版本:v230 新增。
BindCarrier=
- 描述:绑定到指定接口的载波状态。若所有绑定接口无载波,则当前接口关闭。
- 版本:v220 新增。
Address=
- 描述:静态 IPv4/IPv6 地址(格式:
地址/前缀长度
)。可多次指定。- 特殊值
0.0.0.0
或::
会从系统池自动分配地址范围。 - IPv4 链路本地地址(169.254.0.0/16)默认启用地址冲突检测(RFC 5227),需通过
[Address]
段禁用。
- 特殊值
- 版本:v211 新增。
DNS=
- 描述:DNS 服务器地址(支持端口、接口和 SNI)。示例:
- IPv4:
111.222.333.444:9953%eth0#example.com
- IPv6:
[1111:2222::3333]:9953%eth0#example.com
- IPv4:
- 版本:v211 新增。
Domains=
- 描述:空格分隔的域名列表,指定通过此接口 DNS 解析的域。
~
前缀表示“仅路由域”(如~.
表示所有未匹配的查询路由到此接口)。
- 版本:v216 新增。
NTP=
- 描述:NTP 服务器地址(IP 或主机名)。可多次指定。
- 版本:v216 新增。
IPMasquerade=
- 描述:启用 IP 伪装(NAT)。可选值:
ipv4
、ipv6
、both
、no
。默认no
。- 启用时会自动设置
IPv4Forwarding=
和IPv6Forwarding=
。
- 启用时会自动设置
- 版本:v219 新增。
IPv6PrivacyExtensions=
- 描述:启用 IPv6 隐私扩展(RFC 4941)。可选值:布尔值、
prefer-public
、kernel
。默认继承全局配置。 - 版本:v222 新增。
IPv6AcceptRA=
- 描述:是否接受 IPv6 路由通告(RA)。默认对桥接设备或启用 IPv6 转发时为
false
。 - 注意:内核的 RA 实现被禁用,使用用户空间实现。
- 版本:v231 新增。
[Address] 段选项
[Address]
段用于配置单个地址,支持以下键值:
Address=
- 描述:必填,格式同
[Network]
段。 - 版本:v211 新增。
Peer=
- 描述:点对点连接的对端地址。
- 版本:v216 新增。
DuplicateAddressDetection=
- 描述:地址冲突检测类型。可选值:
ipv4
、ipv6
、both
、none
。- 默认:IPv4 链路本地地址用
ipv4
,IPv6 用ipv6
。
- 默认:IPv4 链路本地地址用
- 版本:v232 新增。
NFTSet=
- 描述:将地址信息集成到 NFT 防火墙集。格式:
source:family:table:set
。- 示例:
prefix:netdev:filter:eth_ipv4_prefix
- 示例:
- 版本:v255 新增。
[Route] 段选项
[Route] 段接受以下配置项。可通过定义多个 [Route] 段来配置多条路由。
Gateway=
接受网关地址或特殊值 “_dhcp4” 与 “_ipv6ra”。若设置为 “_dhcp4” 或 “_ipv6ra”,则使用 DHCPv4 或 IPv6 RA 提供的网关地址。
自版本 211 起添加。
GatewayOnLink=
接受布尔值。若设为 true,内核无需检查网关是否可直接到达(即位于本地网络),从而允许将路由插入内核表而不触发告警。默认为 “no”。
自版本 234 起添加。
Destination=
路由的目标前缀。可后接斜杠及前缀长度。若省略,则假定为完整的主机路由。
自版本 211 起添加。
Source=
路由的源前缀。可后接斜杠及前缀长度。若省略,则假定为完整的主机路由。
自版本 218 起添加。
Metric=
路由的度量值。接受 0…4294967295 范围内的无符号整数。默认为未设置,使用内核默认值。
自版本 216 起添加。
IPv6Preference=
指定 RFC 4191 中定义的路由优先级(用于路由器发现消息)。可选值:“low”(最低优先级)、“medium”(默认优先级)或 “high”(最高优先级)。
自版本 234 起添加。
Scope=
IPv4 路由的作用域,可选值:“global”、“site”、“link”、“host” 或 “nowhere”:
- “global”:路由可到达多跳外的设备。
- “site”:本地自治系统内部路由。
- “link”:仅能到达本地网络设备(单跳)。
- “host”:路由不离开本机(用于 127.0.0.1 等内部地址)。
- “nowhere”:目标不存在。
对于 IPv4 路由,若 Type= 为 “local” 或 “nat”,则默认为 “host”;若为 “broadcast”、“multicast”、“anycast” 或 “unicast”,则默认为 “link”;其他情况默认为 “global”。此选项不用于 IPv6。
自版本 219 起添加。
PreferredSource=
路由的首选源地址。地址格式需符合 inet_pton(3) 规范。
自版本 227 起添加。
Table=
路由表标识符。可选预定义名称 “default”、“main”、“local”,或 networkd.conf(5) 中 RouteTable= 定义的名称,或 1…4294967295 间的数字。可通过 ip route show table num
查看路由表。若未设置且 Type= 为 “local”、“broadcast”、“anycast” 或 “nat”,则使用 “local”;其他情况默认为 “main”。
自版本 230 起添加。
HopLimit=
配置每路由跳数限制。接受 1…255 间的整数。另见 IPv6HopLimit=。
自版本 255 起添加。
Protocol=
路由协议标识符。接受 0…255 间的数字或特殊值 “kernel”、“boot”、“static”、“ra”、“dhcp”。默认为 “static”。
自版本 234 起添加。
Type=
指定路由类型。可选值:“unicast”、“local”、“broadcast”、“anycast”、“multicast”、“blackhole”、“unreachable”、“prohibit”、“throw”、“nat”、“xresolve”。
- “unicast”:常规路由(指向目标网络的路径)。
- “blackhole”:静默丢弃匹配路由的数据包。
- “unreachable”:丢弃数据包并生成 ICMP “Host Unreachable” 消息。
- “prohibit”:丢弃数据包并生成 ICMP “Communication Administratively Prohibited” 消息。
- “throw”:当前路由表查找失败,返回至路由策略数据库 (RPDB)。
默认为 “unicast”。
自版本 235 起添加。
InitialCongestionWindow=
TCP 初始拥塞窗口(用于连接建立阶段)。客户端请求资源时,服务器的初始拥塞窗口决定在未等待确认前可发送的初始数据包数量。接受 1…1023 间的数值(注:100 被视为极大值)。未设置时使用内核默认值(通常为 10)。
自版本 237 起添加。
InitialAdvertisedReceiveWindow=
TCP 初始通告接收窗口(以字节为单位),表示连接初始可缓冲的接收数据量。发送方需等待接收方确认及窗口更新后才能继续发送。接受 1…1023 间的数值(注:100 被视为极大值)。未设置时使用内核默认值。
自版本 237 起添加。
QuickAck=
接受布尔值。为 true 时启用该路由的 TCP 快速确认模式。未设置时使用内核默认值。
自版本 237 起添加。
FastOpenNoCookie=
接受布尔值。为 true 时在路由层面启用无需 Cookie 的 TCP 快速打开。未设置时使用内核默认值。
自版本 243 起添加。
MTUBytes=
设置路由的最大传输单元(字节)。支持后缀 K、M、G(基数为 1024)。
自版本 239 起添加。
TCPAdvertisedMaximumSegmentSize=
指定 TCP 层的路径 MSS(最大报文段大小,字节)。支持后缀 K、M、G(基数为 1024)。接受 1…4294967294 间的无符号整数。未设置时使用内核默认值。
自版本 248 起添加。
TCPCongestionControlAlgorithm=
指定路由的 TCP 拥塞控制算法(如 “bbr”、“dctcp”、“vegas”)。未设置时使用内核默认值。
自版本 252 起添加。
TCPRetransmissionTimeoutSec=
指定路由的 TCP 重传超时时间(秒)。定义存活 TCP 连接在重传未确认时的超时值。未设置时使用内核默认值。
自版本 255 起添加。
MultiPathRoute=地址[@接口名] [权重]
配置多路径路由(通过多条路径传输数据)。接受网关地址,可选附加:
- 以 “@” 分隔的网络接口名或索引
- 以空格分隔的权重值(1…256)
此选项可多次指定。若赋值为空字符串,则清除之前所有配置。
自版本 245 起添加。
NextHop=
指定下一跳 ID。接受 1…4294967295 间的无符号整数。若设置,需配置对应的 [NextHop] 段。默认为未设置。
自版本 248 起添加。
[Route] 段配置选项 2
以下是 [Route]
段支持的参数及其详细说明:
Gateway=
指定路由的 网关地址。特殊值 _dhcp4
或 _ipv6ra
表示从 DHCPv4 或 IPv6 RA 动态获取网关地址。
示例:
[Route]
Gateway=192.168.1.1
自版本 211 起添加。
GatewayOnLink=
控制是否允许网关不在直接连接的网络上。类型:布尔值(true
/false
)。默认值:false
(需验证网关可达性)。
用途:
- 若设为
true
,即使网关不在本地网络,仍可强制添加路由(例如用于 VPN 场景)。
自版本 234 起添加。
Destination=
路由的 目标网络前缀(格式:IP/前缀长度
)。若省略,默认为全长度主机路由。
示例:
[Route]
Destination=10.0.0.0/24
自版本 211 起添加。
Source=
路由的 源地址前缀(格式:IP/前缀长度
)。若省略,默认为全长度主机路由。
自版本 218 起添加。
Metric=
路由的 度量值(优先级),范围 0–4294967295。默认:继承内核设置。
注意:度量值越小,优先级越高。
自版本 216 起添加。
IPv6Preference=
定义 IPv6 路由的优先级(RFC 4191)。可选值:
low
(最低优先级)medium
(默认)high
(最高优先级)
自版本 234 起添加。
Scope=
IPv4 路由的 作用域,可选值:
global
(跨多跳可达)site
(本地自治系统内部)link
(仅本地网络)host
(仅本机内部,如 127.0.0.1)nowhere
(目标不存在)
默认逻辑:- 若
Type=local
或nat
,默认为host
; - 若
Type=broadcast
、multicast
等,默认为link
; - 其他情况默认为
global
。
自版本 219 起添加。
PreferredSource=
指定路由的 首选源地址(格式:IPv4/IPv6 地址)。
示例:
[Route]
PreferredSource=192.168.1.100
自版本 227 起添加。
Table=
路由表标识符。可选值:
- 预定义名称:
default
、main
、local
- 自定义名称(通过
networkd.conf
的RouteTable=
定义) - 数字 1–4294967295
默认: - 若
Type=local
、broadcast
等,默认为local
; - 其他情况默认为
main
。
自版本 230 起添加。
Type=
路由类型,控制数据包处理方式。可选值:
unicast
(常规路由)blackhole
(静默丢弃数据包)unreachable
(丢弃并返回 “Host Unreachable”)prohibit
(丢弃并返回 “Administratively Prohibited”)throw
(路由查找失败,返回 RPDB)nat
(网络地址转换)
默认值:unicast
。
自版本 235 起添加。
Type=
- 接受值:
- unicast:常规路由
- local:本地路由
- broadcast:广播路由
- anycast:任播路由
- multicast:组播路由
- blackhole:静默丢弃数据包
- unreachable:丢弃并返回「主机不可达」ICMP消息
- prohibit:丢弃并返回「通信被管理禁止」ICMP消息
- throw:终止当前路由表查询,返回 RPDB
- nat:NAT路由
- xresolve:需解析的路由
- 默认值:“unicast”
- 版本:自版本 235 起添加
MultiPathRoute=
配置 多路径路由(支持多个网关负载均衡)。格式:地址@接口名 权重
。
示例:
[Route]
MultiPathRoute=192.168.1.1@eth0 100
MultiPathRoute=192.168.2.1@eth1 200
自版本 245 起添加。
NextHop=
关联的下一跳配置(需配合 [NextHop]
段使用)。范围:1–4294967295。
自版本 248 起添加。
高级网络参数
TCP 优化相关
InitialCongestionWindow=
:TCP 初始拥塞窗口大小(1–1023)。默认值通常为 10。TCPCongestionControlAlgorithm=
:指定拥塞控制算法(如bbr
、dctcp
)。TCPRetransmissionTimeoutSec=
:TCP 重传超时时间(秒)。
MTU 控制
MTUBytes=
:路由的最大传输单元(支持K
、M
后缀)。TCPAdvertisedMaximumSegmentSize=
:TCP 路径 MSS 提示值。
参考
: 根据 systemd.network(5)
手册,路由配置文件的优先级由 /etc/systemd/network
> /run/systemd/network
> /usr/lib/systemd/network
决定,按字典顺序加载首个匹配的 .network
文件。