查看官方文档可以用 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/
下的同名文件。/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/
.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
等专有名词和技术路径未翻译。以下是 systemd-networkd
中 .network
配置文件的详细解析,涵盖核心概念、语法规则及实际应用场景:
/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
的符号链接会屏蔽(禁用)对应配置。[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
将忽略该接口。[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 优先(需明确注释静态配置)。[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]
块定义一条独立路由,可重复多次。
.netdev
文件):# /etc/systemd/network/vlan10.netdev
[NetDev]
Name=eth0.10
Kind=vlan
[VLAN]
Id=10
# /etc/systemd/network/10-vlan.network
[Match]
Name=eth0.10
[Network]
Address=192.168.10.10/24
Gateway=192.168.10.1
# /etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
# /etc/systemd/network/br0-slave-eth0.network
[Match]
Name=eth0
[Network]
Bridge=br0 # 将此接口绑定到桥接接口 br0
# /etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
DHCP=yes
# 重新加载配置(不重启服务)
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
配置未生效:
00-
是否被 70-
覆盖)。[Match]
条件是否匹配目标接口。journalctl -u systemd-networkd
。DHCP 失败:
DHCP=yes
或 DHCP=ipv4
已启用。路由冲突:
ip route show
确认路由优先级(Metric 值)。[Route]
块显式定义更具体的路由规则。[Match]
精确匹配接口,[Network]
定义基础网络参数,[Route]
控制高级路由。.netdev
文件使用。networkctl
和 journalctl
工具快速定位问题。在 systemd-networkd
的 .network
配置文件中,[Network]
和 [Address]
节中均可能出现 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
特点:
Gateway
) 和 DNS (DNS
) 等全局参数。Address=2001:db8::1/64
)。用途:
属于 子配置节,通常与 [DHCPServer]
或 [IPv6AcceptRA]
等节配合使用,用于 细化特定 IP 地址的配置。
例如,为 DHCP 分配的地址段设置广播地址 (Broadcast
),或定义 IPv6 无状态自动配置(SLAAC)的行为。
语法示例:
[Address]
Address=192.168.1.0/24
Broadcast=192.168.1.255 # 定义广播地址
[DHCPServer]
PoolOffset=10
PoolSize=20
特点:
DuplicateAddressDetection
等参数使用。配置项位置 | 用途 | 典型场景 | 支持参数 |
---|---|---|---|
[Network] 节的 Address |
静态 IP 主配置 | 为接口分配多个静态 IP | Gateway , DNS 等全局参数 |
[Address] 节的 Address |
细化特定地址段的配置 | 定义 DHCP 池、IPv6 SLAAC 行为 | Broadcast , PreferredLifetime |
[Network]
节的 Address
。[Address]
节配合其他子节(如 [DHCPServer]
)。通过灵活组合这些配置,可以实现从简单静态 IP 到复杂 DHCP/IPv6 混合网络的多样化需求。
systemd-networkd
是一个强大的网络管理工具,它允许用户通过配置文件来定义和控制网络接口的行为。这些配置文件通常位于 /etc/systemd/network/
目录下,并以 .network
为扩展名。每个 .network
文件可以包含多个部分,每个部分定义了不同的配置选项。下面是对 .network
配置文件的详细解释。
.network
文件的基本结构由几个主要部分组成:
[Match]
:用于匹配特定网络设备的标准。[Network]
:用于定义网络接口的网络设置。[Link]
, [Address]
, [Route]
等,根据需要添加。这部分用于指定哪些网络设备应该应用此配置。常见的选项包括:
Name=
:指定网络接口名称(例如 eth0
或者通配符 eth*
)。MACAddress=
:基于MAC地址匹配。Driver=
:基于驱动程序名称匹配。Host=
:基于主机名匹配。示例:
[Match]
Name=enp3s0
这表示仅当网络接口名称为 enp3s0
时应用该配置。
这部分定义了具体的网络设置。常见的选项有:
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
systemd-networkd
发生冲突。在这种情况下,你可能需要禁用其他网络管理工具。通过以上步骤和说明,你可以利用 systemd-networkd
的 .network
配置文件灵活地管理和配置Linux系统的网络环境。希望这些信息对你有所帮助!
systemd-networkd
是 systemd
系统和服务管理器的一部分,用于管理网络设备、配置网络接口等。*.network
配置文件用于定义网络接口的行为和属性,以下为你详细介绍其各部分内容:
/etc/systemd/network/
目录下,文件名可以自定义,但需以 .network
结尾。[节名]
开头,下面跟着一系列键值对。此节用于指定哪些网络接口会应用该配置文件,可依据多种条件匹配网络接口。
[Match]
Name=enp0s3
这会让配置文件应用到名为 enp0s3
的网络接口。
[Match]
MACAddress=00:11:22:33:44:55
[Match]
Driver=e1000
用于设置网络的通用配置。
yes
、no
、ipv4
或 ipv6
。示例:[Network]
DHCP=yes
[Network]
Address=192.168.1.100/24
Address=2001:db8::1/64
[Network]
Gateway=192.168.1.1
[Network]
DNS=8.8.8.8
DNS=8.8.4.4
[Network]
Domains=example.com
用于详细设置 IP 地址,可存在多个 [Address]
节以设置多个 IP 地址。
[Address]
Address=192.168.1.101/24
[Address]
Address=192.168.1.101/24
Label=secondary
用于设置路由规则。
[Route]
Destination=192.168.2.0/24
[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1
[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.1
Metric=100
用于设置网络接口的通用属性。
[Link]
MTU=9000
[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
配置文件主要由以下几个部分组成:
用于指定该配置文件适用的网络接口,通过匹配条件来确定哪些接口会应用该配置文件中的设置。常见的匹配条件包括:
eth*
表示匹配所有以 eth
开头的接口。ether
(以太网)、wifi
等。示例:
[Match]
Name=eth0
该配置表示该配置文件仅适用于名称为 eth0
的网络接口。
包含具体的网络配置参数,用于定义接口的网络设置。常见的配置项包括:
IP地址/子网掩码长度
,如 192.168.0.2/24
。192.168.0.1
。yes
、ipv4
或 ipv6
,如 DHCP=yes
表示同时启用 IPv4 和 IPv6 的 DHCP。示例:
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
DNS=8.8.8.8
用于配置静态路由,可以定义多条路由规则。常见的配置项包括:
IP地址/子网掩码长度
。示例:
[Route]
Destination=10.0.0.0/8
Gateway=192.168.0.1
Metric=100
用于配置 DHCP 客户端的行为,当接口通过 DHCP 获取 IP 地址时使用。常见的配置项包括:
yes
或 no
。yes
或 no
。yes
或 no
。示例:
[DHCP]
UseDNS=yes
UseDomains=yes
SendHostname=yes
当接口作为桥接设备时使用,用于配置桥接相关的参数。常见的配置项包括:
yes
或 no
。示例:
[Bridge]
STP=yes
ForwardDelaySec=15
[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
[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
匹配网络接口的条件:
[Match]
Name=en* # 匹配接口名以"en"开头(如enp0s3)
MACAddress=00:11:22:33:44:55 # 按MAC地址匹配
Driver=igb # 匹配驱动类型
Type=ether # 接口类型(ether/wireless等)
*支持通配符(和?),多条件时为"与"关系
配置链路层参数:
[Link]
MTUBytes=1500 # 设置MTU值
MACAddress=aa:bb:cc:dd:ee:ff # 强制修改MAC地址
WakeOnLan=magic # 启用魔术包唤醒
MACAddressPolicy=persistent # MAC地址生成策略
定义网络层配置:
[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地址
静态IP配置(可多实例):
[Address]
Address=192.168.1.10/24
Peer=10.0.0.1/32 # 点对点地址
Broadcast=192.168.1.255
自定义路由配置:
[Route]
Gateway=10.0.0.1
Destination=192.168.2.0/24
Metric=1024 # 路由优先级
精细控制DHCP行为:
[DHCP]
UseDNS=yes # 是否接受DNS配置
UseMTU=yes # 是否应用DHCP提供的MTU
RouteMetric=100 # 路由度量值
UseTimezone=no # 是否接受时区信息
[IPv6AcceptRA]
UseDNS=yes # 是否使用RA提供的DNS
UseDomains=yes # 是否应用域名
[Match]
Name=enp0s3
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
[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
配置文件的全面详解,涵盖其核心功能、配置语法、高级场景及调试方法:
• 核心功能:定义网络接口的匹配规则、IP 地址分配(静态/DHCP)、路由、DNS、VLAN、绑定接口等。
• 适用场景:服务器、容器、虚拟机、复杂网络拓扑(如多网卡、VPN、隧道)。
• 路径:
• /etc/systemd/network/
:管理员手动配置(持久化,优先级最高)。
• /run/systemd/network/
:临时配置(重启失效,优先级次之)。
• /usr/lib/systemd/network/
:系统默认配置(避免修改,优先级最低)。
• /usr/local/lib/systemd/network/
:系统默认配置(避免修改,优先级最低)。
• 命名规则:<优先级>-<描述>.network
(如 10-wired.network
),数字越小优先级越高。
INI 格式,分段(Section)管理,支持以下关键块:
• [Match]
:匹配接口的条件。
• [Link]
:物理/虚拟接口参数(如 MAC 地址、MTU)。
• [Network]
:全局网络配置(IP、DNS、DHCP)。
• [Address]
:精细 IP 地址参数(如广播地址、点对点)。
• [Route]
:自定义路由规则。
• [DHCP]
:DHCP 客户端行为控制。
• [IPv6AcceptRA]
:IPv6 路由器通告设置。
[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
[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)
[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
[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
[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
[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
# 创建 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
# 创建绑定接口 bond0
[Match]
Name=bond0
[Network]
Bond=slave1 slave2 # 指定从属接口
# 从属接口配置
[Match]
Name=slave1
[Network]
Bond=bond0
[Network]
IPv6PrivacyExtensions=yes
networkctl status enp0s3 # 查看接口详细状态
networkctl list # 列出所有接口
journalctl -u systemd-networkd --since "5 minutes ago" # 查看近期日志
journalctl -u systemd-networkd -f # 实时跟踪日志
systemctl restart systemd-networkd # 重启服务使配置生效
• 原因:文件名优先级错误、语法错误、接口未匹配。
• 解决:
networkctl status <接口名> # 检查配置是否加载
systemd-analyze verify *.network # 验证语法
• 原因:防火墙阻塞、DHCP 服务未响应。
• 解决:
[DHCP]
UseDNS=no # 禁用 DHCP DNS(排除干扰)
RouteMetric=100 # 调整路由优先级
• 解决:通过 [Match]
精确匹配接口,或调整文件名优先级。
10-wired.network
),确保优先级。netplan try
或备份文件后再修改。通过灵活组合上述配置块,可高效管理从简单家用网络到企业级复杂拓扑的网络环境。
索引 · 指令
systemd 开发
名称
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
的同名符号链接会完全禁用该配置文件(即 “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]
段,用于确定给定的网络文件是否适用于给定的接口;以及一个 [Network]
段,指定应如何配置接口。按字母数字顺序排列的第一个匹配给定接口的网络文件会被应用,所有后续文件即使匹配也会被忽略。
注意:任何设置了 ID_NET_MANAGED_BY=
udev 属性的网络接口将不会被任何 .network
文件匹配——除非该属性的值是字符串 "io.systemd.Network"
——即使 [Match]
段中的其他条件匹配。这可以用于将特定网络接口排除在 systemd-networkd
的管理之外,同时保持 [Match]
段的通用性。ID_NET_MANAGED_BY=
属性声明了设备的预期所有权,并确保并发的网络管理实现不会争相对特定设备进行管理。
当 [Match]
段中的所有条件都满足时,网络文件被称为与网络接口匹配。如果网络文件的 [Match]
段中没有有效设置,则文件将匹配所有接口,并且 systemd-networkd
会发出警告。提示:为避免警告并明确匹配所有接口,可添加以下内容:
Name=*
以下键值被接受:
硬件地址的空白分隔列表。可接受的格式包括:
• 冒号分隔的十六进制(例如 "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)
硬件永久地址的空白分隔列表。MACAddress=
匹配设备的当前 MAC 地址,而此选项匹配设备的永久 MAC 地址(可能与当前不同)。使用全冒号、连字符或点分隔的十六进制,或 IPv4/IPv6 地址格式。此选项可多次出现,此时列表会被合并。若赋值为空字符串,则重置先前定义的硬件地址列表。默认为未设置。
(添加于版本 245)
匹配持久路径的 shell 风格通配符列表,由 udev 属性 ID_PATH
暴露。
(添加于版本 211)
绑定到设备的当前驱动的 shell 风格通配符列表,由父设备的 udev 属性 ID_NET_DRIVER
或设备本身的 ethtool -i
暴露。若列表前缀为 "!"
,则测试取反。
(添加于版本 211)
设备类型的 shell 风格通配符列表,由 networkctl list
暴露。有效值包括 "ether"
、"loopback"
、"wlan"
、"wwan"
。若列表前缀为 "!"
,则测试取反。
(添加于版本 211)
设备类型的 shell 风格通配符列表,由 networkctl status INTERFACE
或 ip -d link show INTERFACE
暴露。有效值包括 "bond"
、"bridge"
、"gre"
、"tun"
、"veth"
。若列表前缀为 "!"
,则测试取反。
(添加于版本 251)
带值的 udev 属性名的空白分隔列表。多个属性时,测试结果为逻辑与。若列表前缀为 "!"
,则测试取反。值包含空格时需用引号包裹,引号用 "\"
转义。
示例:
Property=ID_MODEL_ID=9999 "ID_VENDOR_FROM_DATABASE=vendor name" "KEY=with \"quotation\""
(添加于版本 243)
设备名称或替代名称的 shell 风格通配符列表,由 udev 属性 "INTERFACE"
暴露。若列表前缀为 "!"
,则测试取反。
(添加于版本 211)
无线网络类型的空白分隔列表。支持值:"ad-hoc"
、"station"
、"ap"
等。若列表前缀为 "!"
,则测试取反。
(添加于版本 244)
当前连接的无线 LAN 的 SSID 的 shell 风格通配符列表。若列表前缀为 "!"
,则测试取反。
(添加于版本 244)
当前连接的无线 LAN 的硬件地址列表。格式同 MACAddress=
。
(添加于版本 244)
匹配主机名或机器 ID。参见 systemd.unit(5)
中的 ConditionHost=
。
(添加于版本 211)
检查是否在虚拟化环境中运行。参见 systemd.unit(5)
中的 ConditionVirtualization=
。
(添加于版本 211)
检查特定内核命令行选项。参见 systemd.unit(5)
中的 ConditionKernelCommandLine=
。
(添加于版本 211)
检查内核版本。参见 systemd.unit(5)
中的 ConditionKernelVersion=
。
(添加于版本 237)
检查是否传递了指定凭证给 systemd-udevd.service
。参见系统和服务凭证。
(添加于版本 252)
检查系统架构。参见 systemd.unit(5)
中的 ConditionArchitecture=
。
(添加于版本 211)
检查固件信息。参见 systemd.unit(5)
中的 ConditionFirmware=
。
(添加于版本 249)
以下是 [Link]
段支持的配置参数及详细说明:
MACAddress=
指定设备的硬件地址(MAC 地址)。
示例:
[Link]
MACAddress=00:11:22:33:44:55
自版本 218 起添加。
MTUBytes=
设置设备的 最大传输单元(MTU),单位为字节。支持后缀 K
、M
、G
(以 1024 为基数)。
注意:
[Link]
MTUBytes=1500
自版本 218 起添加。
ARP=
控制是否启用 IPv4 ARP(地址解析协议)和 IPv6 NDP(邻居发现协议)。
true
/false
)。Multicast=
启用或禁用设备的组播功能。
AllMulticast=
控制设备是否接收所有组播包(常用于组播路由场景)。
Promiscuous=
启用或禁用接口的 混杂模式(接收所有网络流量)。
false
,虚拟接口将以 nopromisc
标志创建。Unmanaged=
控制是否由 systemd-networkd 管理该接口。
yes
/no
)。no
。yes
时,systemd-networkd 不会尝试配置或启用该接口,避免与其他应用程序管理的接口冲突。Group=
将接口加入指定组(类似交换机中的端口组),便于批量操作。
RequiredForOnline=
定义接口是否被视为系统在线状态的必要条件。
carrier
)或状态范围(如 degraded:routable
)。ActivationPolicy=
或设置为 up
/always-up
/bound
,默认为 yes
。ActivationPolicy=
设为 manual
/down
,默认为 no
。yes
对应 carrier
状态;degraded-carrier
;degraded
。RequiredFamilyForOnline=
指定在线状态所需的地址族(IPv4/IPv6)。
ipv4
、ipv6
、both
、any
。no
(仅在 RequiredForOnline=no
时生效)。ActivationPolicy=
控制 systemd-networkd 如何管理接口的 管理状态(即 IFF_UP
标志)。
up
(默认):接口配置时自动启用。always-up
:始终强制启用(即使接口状态变化)。manual
:由管理员手动控制启用/禁用。always-down
:始终禁用。bound
:与 BindCarrier=
配合使用。always-up
时,IgnoreCarrierLoss=
会被强制设为 true
,以避免因物理连接中断导致配置失败。[Network]
段接受以下键值配置:
Description=
DHCP=
yes
、no
、ipv4
、ipv6
,默认为 no
。IPv6AcceptRA=
),无论此参数如何设置,DHCPv6 默认会被触发。[DHCPv6]
段的 WithoutRA=
模式运行,无论链路上是否存在路由器。UseDomains=
配置。DHCPServer=
no
)。更多配置在 [DHCPServer]
段。RelayTarget=
或 PersistLeases=no
才能在存储就绪后自动启动。LinkLocalAddressing=
ipv4
、ipv6
。
yes
或 ipv6
:配置 IPv6 链路本地地址。yes
或 ipv4
:在 DHCPv4 失败后配置 IPv4 链路本地地址。KeepMaster=
、Bridge=
或使用 passthru
模式的 MACVLAN/MACVTAP,则为 no
;否则为 ipv6
。IPv6LinkLocalAddressGenerationMode=
eui64
、none
、stable-privacy
、random
。
IPv6StableSecretAddress=
,则为 stable-privacy
;否则为 eui64
。IPv6StableSecretAddress=
IPv6LinkLocalAddressGenerationMode=
,则隐式启用 stable-privacy
模式。IPv4LLStartAddress=
169.254.1.2
)。若未设置,自动选择随机地址。IPv4LLRoute=
false
)。DefaultRouteOnDevice=
false
)。适用于点对点接口。[Route]
Gateway=0.0.0.0
Table=1234
LLMNR=
resolve
(仅解析不注册)。默认 true
。MulticastDNS=
resolve
(仅解析不注册)。默认 false
。DNSOverTLS=
opportunistic
(兼容非 TLS 服务器)。默认继承全局配置。DNSSEC=
allow-downgrade
(兼容非 DNSSEC 网络)。默认继承全局配置。LLDP=
routers-only
(仅收集路由器信息)。默认 routers-only
。EmitLLDP=
false
。BindCarrier=
Address=
地址/前缀长度
)。可多次指定。
0.0.0.0
或 ::
会从系统池自动分配地址范围。[Address]
段禁用。DNS=
111.222.333.444:9953%eth0#example.com
[1111:2222::3333]:9953%eth0#example.com
Domains=
~
前缀表示“仅路由域”(如 ~.
表示所有未匹配的查询路由到此接口)。NTP=
IPMasquerade=
ipv4
、ipv6
、both
、no
。默认 no
。
IPv4Forwarding=
和 IPv6Forwarding=
。IPv6PrivacyExtensions=
prefer-public
、kernel
。默认继承全局配置。IPv6AcceptRA=
false
。[Address]
段用于配置单个地址,支持以下键值:
Address=
[Network]
段。Peer=
DuplicateAddressDetection=
ipv4
、ipv6
、both
、none
。
ipv4
,IPv6 用 ipv6
。NFTSet=
source:family:table:set
。
prefix:netdev:filter:eth_ipv4_prefix
[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”:
对于 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”。
自版本 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=地址[@接口名] [权重]
配置多路径路由(通过多条路径传输数据)。接受网关地址,可选附加:
此选项可多次指定。若赋值为空字符串,则清除之前所有配置。
自版本 245 起添加。
NextHop=
指定下一跳 ID。接受 1…4294967295 间的无符号整数。若设置,需配置对应的 [NextHop] 段。默认为未设置。
自版本 248 起添加。
以下是 [Route]
段支持的参数及其详细说明:
Gateway=
指定路由的 网关地址。特殊值 _dhcp4
或 _ipv6ra
表示从 DHCPv4 或 IPv6 RA 动态获取网关地址。
示例:
[Route]
Gateway=192.168.1.1
自版本 211 起添加。
GatewayOnLink=
控制是否允许网关不在直接连接的网络上。类型:布尔值(true
/false
)。默认值:false
(需验证网关可达性)。
用途:
true
,即使网关不在本地网络,仍可强制添加路由(例如用于 VPN 场景)。Destination=
路由的 目标网络前缀(格式:IP/前缀长度
)。若省略,默认为全长度主机路由。
示例:
[Route]
Destination=10.0.0.0/24
自版本 211 起添加。
Source=
路由的 源地址前缀(格式:IP/前缀长度
)。若省略,默认为全长度主机路由。
自版本 218 起添加。
Metric=
路由的 度量值(优先级),范围 0–4294967295。默认:继承内核设置。
注意:度量值越小,优先级越高。
自版本 216 起添加。
IPv6Preference=
定义 IPv6 路由的优先级(RFC 4191)。可选值:
low
(最低优先级)medium
(默认)high
(最高优先级)Scope=
IPv4 路由的 作用域,可选值:
global
(跨多跳可达)site
(本地自治系统内部)link
(仅本地网络)host
(仅本机内部,如 127.0.0.1)nowhere
(目标不存在)Type=local
或 nat
,默认为 host
;Type=broadcast
、multicast
等,默认为 link
;global
。PreferredSource=
指定路由的 首选源地址(格式:IPv4/IPv6 地址)。
示例:
[Route]
PreferredSource=192.168.1.100
自版本 227 起添加。
Table=
路由表标识符。可选值:
default
、main
、local
networkd.conf
的 RouteTable=
定义)Type=local
、broadcast
等,默认为 local
;main
。Type=
路由类型,控制数据包处理方式。可选值:
unicast
(常规路由)blackhole
(静默丢弃数据包)unreachable
(丢弃并返回 “Host Unreachable”)prohibit
(丢弃并返回 “Administratively Prohibited”)throw
(路由查找失败,返回 RPDB)nat
(网络地址转换)unicast
。Type=
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
文件。