systemd.netdev — 虚拟网络设备配置
netdev.netdev
网络是通过 systemd-networkd(8) 进行配置的。
主虚拟网络设备文件必须具有后缀名 .netdev
;其他后缀将被忽略。虚拟网络设备在 networkd 启动时就被创建。若存在已有的虚拟网络设备名称,则 networkd 将继续使用该名称,而非创建一个新的。注意,已经存在的 netdev 的设置不会被 networkd 修改。
.netdev
文件从系统网络文件夹中读取,包含 /usr/lib/systemd/network
, /usr/local/lib/systemd/network
,易失性运行时网络文件夹 /run/systemd/network
,以及本地管理员网络文件夹 /etc/systemd/network
。所有配置文件均以字符方式排序并处理,无关它们存在与哪个目录中。但是,具有完全相同的文件名的文件将相互替换。在 /etc/
中的文件具有最高优先级,/run
中的其次,/usr
下的优先级最低。这样系统提供的文件就可以按需被本地文件替换。在特殊形况下,一个空文件(文件大小为 0)或指向 /dev/null
的软链接将完全禁用该配置文件(也就是被 “masked”)。
在 netdev 文件 foo.netdev
目录下,可以存在名为 foo.netdev.d/
的 “插入” 目录。该目录下所有以 .conf
结尾的文件都会在主文件解析之后被解析。这有助于修改或添加配置,而不需要修改主配置文件。每个插入文件必须具有合适的段头部(section header)。
除了 /etc/systemd/network
,插入文件夹 .d
也可以被放置在 /usr/lib/systemd/network
以及 /run/systemd/network
目录下。/etc
下的插入文件优先于 /run
,/run
下的文件优先于 /usr/lib
。插入文件优先于高于对应的主 netdev 文件。(当然,由于 /run
文件夹是临时的,而 /usr/lib
是厂商的,所以插入文件夹不太应该出现在这些位置)。
可以在 .netdev
文件中配置下列虚拟网络设备类型:
-
bond 绑定
一个绑定设备为它的从设备的聚合。参见 Linux Ethernet Bonding Driver HOWTO 了解详情。
-
bridge 网桥
网桥设备为软件交换机,它的每个从设备和桥接自身均为交换机的端口
-
dummy 呆设备
一个呆设备会丢弃所有发送给它的包。
-
gre - Generic Routing Encapsulation - 通用路由封装
IPv4 承载的 3 层 GRE 隧道。参见 RFC 2784 了解详情。
-
gretap
IPv4 承载的 2 层 GRE 隧道。
-
erspan - Encapsulated Remote Switched Port Analyzer
ERSPAN 从一个或多个源端口镜像流量,并将流量发送至给另一个交换机的一个或多个目标端口。
流量通过 GRE 封装,因此流量可以通过三层网络在源交换机和目标交换机之间路由。 -
ip6gre
IPv6 承载的三层 GRE 隧道。
-
ip6tnl
IPv6 承载的 IPv4 或 IPv6 隧道。
-
ip6gretap
IPv6 承载的二层 GRE 隧道。
-
ipip
IPv4 承载的 IPv4 隧道。
-
ipvlan
ipvlan 设备为一个层叠(stacked)设备,它基于 IP 地址过滤 从底层设备接收网络包。
-
ipvtap
ipvtag 设备为一个层叠(stacked)设备,它基于 IP 地址过滤 从底层设备接收网络包,并可以通过 tap 用户空间界面存取内容。
-
macvlan
macvlan 设备为一个层叠(stacked)设备,它基于 MAC 地址过滤 从底层设备接收网络包。
-
macvtap
macvtap 设备为一个层叠(stacked)设备,它基于 MAC 地址过滤 从底层设备接收网络包。
-
sit
IPv4 承载的 IPv6 隧道。
-
tap - Terminal Access Point
永久的一个网络设备和一个设备节点之间的二层隧道。
-
tun
永久的一个网络设备和一个设备节点之间的三层隧道。
-
veth
一对网络设备之间的以太网隧道。
-
vlan
VLAN 是一个层叠设备,它基于 VLAN 标签从底层设备接收网络包。参见 IEEE 802.1Q 了解详情。
-
vti IPSec 承载的 IPv4 隧道。
-
vti6
IPSec 承载的 IPv6 隧道。
-
vxlan
虚拟可扩展局域网(virtual extensible LAN(vxlan)),用于连接云端计算部署。
-
geneve
通用网络虚拟化封装(GEneric NEtwork Virtualization Encapsulation(GENEVE))netdev 设备
-
l2tp
二层隧道协议(Layer 2 Tunneling Protocol(L2TP))是一个用于支持虚拟私有网络(VPNs)或作为 ISPs 的分发网络的组成部分的隧道协议。它自身并不提供任何加密或验证。
-
macsec
媒体存取控制安全(Media Access Control Security(MACsec))是一个 802.1AE IEEE 工业标准安全技术,它提供了以太网链路上所有流量的安全交流。MACsec 提供了以太网链路上两个直连节点的点对点安全,并且可以分辨并阻止大多数安全威胁。
-
vrf
虚拟路由和转发(Virtual Routing and Forwarding(VRF))界面用于创建分离的路由和转发域。
-
vcan
虚拟 CAN 驱动器(virtual CAN driver(vcan))。与网络回环设备类似,vcan 提供一个虚拟的本地 CAN 界面。
-
vxcan
虚拟 CAN 隧道驱动器(virtual CAN tunnel driver(vxcan))。与虚拟以太网驱动器 veth 类似,vxcan 实现了一个在本地的两个虚拟 CAN 网路设备之间的 CAN 流量隧道。
当创建一个 vxcan 时,两个 vxcan 设备将作为配对设备被创建。当一端收到了包裹则它就出现在了它自己的配对上,同理反之。vxcam 可以被用于跨命名空间交流。 -
wireguard
WireGuard Secure Network Tunnel
-
netdevsim
一个模拟器。它模拟网络设备用于特殊各种网络 API,在当前时间上,它特别专注于与硬件负载转移相关的界面。
-
nlmon 一个 Netlink 监控设备,当你想监视系统 Netlink 报文时就使用 nlmon 设备。
-
fou
Foo-over-UDP 隧道。
-
xfrm
与 vti/vti6 相似的虚拟隧道界面,但具有一些优势。
仅当 [Match]
段匹配上了当前的环境,或该段为空时,才创虚拟网络设备。接收下列键:
-
Host=
匹配主机的主机名或者机器 ID。
参见 systemd.unit(5) 中的ConditionHost=
了解详情。
当前缀了一个感叹号!
,则结果取反。
若赋予了空字符串,那么前序赋予的值都被清除。 -
Virtualization=
检查系统是否在虚拟环境中运行,可选地检测它是否为特定地实现。
参见 systemd.unit(5) 中的ConditionVirtualization=
了解详情。
当前缀了一个感叹号!
,则结果取反。
若赋予了空字符串,那么前序赋予的值都被清除。 -
KernelCommandLine=
检查是否设置了特定的内核命令行命令。
参见 systemd.unit(5) 中的ConditionKernelCommandLine=
了解详情。
当前缀了一个感叹号!
,则结果取反。
若赋予了空字符串,那么前序赋予的值都被清除。 -
KernelVersion=
检查内核版本(同
uname -r
的返回值)匹配一个特定的表达式。
参见 systemd.unit(5) 中的ConditionKernelVersion=
了解详情。
当前缀了一个感叹号!
,则结果取反。
若赋予了空字符串,那么前序赋予的值都被清除。 -
Architecture=
检查系统是否运行在特定的架构上。
参见 systemd.unit(5) 中的ConditionArchitecture=
了解详情。
当前缀了一个感叹号!
,则结果取反。
若赋予了空字符串,那么前序赋予的值都被清除。
[NetDev]
段接收下列键:
-
Description=
无格式 netdev 描述。
-
Name=
当创建新 netdev 时所使用的界面名。该选项为必需项。
-
Kind=
netdev 的类型。该选项为必需项。
参见 支持的 netdev 类型 了解有效键值。 -
MTUBytes=
设置以字节为单位的该设备的最大传输单元。支持常见的后缀
K
M
G
,以 1024 为底。
对于tun
或者tap
设备,当前并不支持在[NetDev]
段为它们设置MTUBytes=
。请至对应的 systemd.network(5) 文件的[Link]
段进行设置。 -
MACAddress=
该设备将使用的 MAC 地址。
对于tun
或者tap
设备,当前并不支持在[NetDev]
段为它们设置MACAddress=
。请至对应的 systemd.network(5) 文件的[Link]
段进行设置。
若该选项未设置,vlan 设备会继承其物理界面的 MAC 地址。对于其它类型的 netdev,若该选项未设置,则使用界面名和 machine-id(5) 生成 MAC 地址。
[Bridge]
段仅用于 bridge 类型的设备,接手下列键:
-
HelloTimeSec=
HelloTimeSec
指定了从根网桥(root bridge)和指定网桥(designated bridge)发出两个 hello 网络包的间隔。Hello 网络包用于在整个桥接的局域网网络中交流拓扑信息。 -
MaxAgeSec=
MaxAgeSec
指定了最大报文年龄(maximum message age)的秒数。若最后一次发现(接收)到 hello 网络包大于指定的秒数,则网桥开始接管过程,尝试将自身变成根网桥(Root Bridge)。 -
ForwardDelaySec=
ForwardDelaySec
指定了在转发(Forwarding)阶段前的,侦听与学习(Listening and Learning)阶段应该花费的秒数。 -
AgeingTimeSec=
指定接收到某 MAC 地址发来的网络包之后,该地址在转发数据库中保留的秒数。
-
Priority=
网桥的优先级。一个介于
0
至65535
之间的整数。更小的数值表示更高的优先级。具有最低优先级的网桥将被选举为根网桥。 -
GroupForwardMask=
16-bit 位掩码表示的整数,允许具有 802.1D 保留地址(
01:80:C2:00:00:0X
)的本地帧被转发。将 位掩码 和 2^X 的幂进行逻辑与操作,X 为 MAC 地址最后的八进制数(octet)的低半字节(lower nibble)。 举例来说,若值位 8,则允许转发地址为 01:80:C2:00:00:03 的帧(802.1X PAE)。 -
DefaultPVID=
为新加入的网桥端口指定默认的端口 VLAN IP。该值为介于
1
值4094
之间的整型,或使用none
关闭 PVID。 -
MulticastQuerier=
接受一个布尔值。该设置控制内核中的 IFLA_BR_MCAST_QUERIER 选项。
若开启,内核将从一个零源地址(zero source address)发送通用 ICMP 查询(general ICMP queries)。
该特性应该允许启动时更快地收敛(faster convergence),当也会导致一些多播察觉(multicast-aware)交换机的错误行为,并扰乱多播包的转发。
当未设置时,使用内核默认值。 -
MulticastSnooping=
接受一个布尔值。该设置控制内核中的 IFLA_BR_MCAST_SNOOPING 选项。
若启用,IGMP 嗅探 将监视 主机和多播路由之间的 因特网组管理协议(Internet Group Management Protocol(IGMP))。
当未设置时,使用内核默认值。 -
VLANFiltering=
接受一个布尔值。该设置控制内核中的 IFLA_BR_VLAN_FILTERING 选项。
若启用,网桥即以 VLAN-filtering 模式启用。
当未设置时,使用内核默认值。 -
STP=
接受一个布尔值。这启用了网桥的生成树协议(Spanning Tree Protocol(STP))。
当未设置时,使用内核默认值。 -
MulticastIGMPVersion=
允许修改网桥的 多播因特网组管理协议的版本。
接受2
或者3
。
当未设置时,使用内核默认值。
[VLAN]
段仅用于 vlan 类型的设备,并接受下方键:
-
Id=
要使用的 VLAN ID。一个介于
0
至4094
的整数。该选项为必需项。 -
GVRP=
接受一个布尔值。通用 VLAN 注册协议(Generic VLAN Registration Protocol(GVRP))是一个协议,允许在网络上自动学习 VLAN。
当未设置时,使用内核默认值。 -
MVRP=
接受一个布尔值。多重 VLAN 注册协议(Multiple VLAN Registration Protocol(MVRP)),以前也被称为 GARP VLAN Registration Protocol (GVRP),是一个基于标准的二层网络协议,用于在交换机上自动配置 VLAN 信息。它在 802.1Q-2005 的改进版本 802.1ak 中定义。
当未设置时,使用内核默认值。 -
LooseBinding=
接受一个布尔值。VLAN 宽松绑定模式(loose binding mode),在该模式中,仅将作业状态(operational state)从父设备发送至关联的 VLANs,但 VLAN 设备状态并不改变。
当未设置时,使用内核默认值。 -
ReorderHeader=
接受一个布尔值。VLAN 重排序头部让 VLAN 界面的行为与物理界面相似。
当未设置时,使用内核默认值。
[MACVLAN]
段仅用于 macvlan 类型的设备,并接受下方键:
-
Mode=
要使用的 MACVLAN 模式。支持的选项有
private
vepa
bridge
passthru
。
[MACVTAP]
段仅用于 macvtap 类型的设备,键与 [MACVLAN]
相同。
[IPVLAN]
段仅用于 ipvlan 类型的设备,并接受下方键:
-
Mode=
要使用的 IPVLAN 模式。支持的模式为
L2
L3
和L3S
。 -
Flags=
要使用的 IPVLAN flag。支持的选项为
bridge
private
vepa
。
[IPVTAP]
段仅用于 ipvtap 类型的设备,键与 [IPVLAN]
相同。
[VXLAN]
段仅作用于 vxlan
类型的设备,并接受下方键:
-
VNI=
VXLAN 网络标识符(或 VXLAN 段 ID)。接受一个介于
1
与16777215
的数字。 -
Remote=
配置目标 IP 地址。
-
Local=
配置本地 IP 地址。
-
Group=
配置 VXLAN 多播组 IP 地址。所有属于同一个 VXLAN 的成员必须具有相同的多播组地址。
-
TOS=
vxlan 界面的 服务类型(Type Of Service)比特值。
-
TTL=
一个固定的 Time To Live N on Virtual eXtensible Local Area Network 包。接受
inherit
或介于0
-255
之间的值。0
是一个特殊值,表示继承内部协议的 TTL 值。inherit
意味着它将继承外部协议的 TTL 值。 -
MacLearning=
接受一个布尔值。若为真,启用动态 MAC 学习来发现远程 MAC 地址。
-
FDBAgeingSec=
从内核学习的转发数据库条目的生命周期(lifetime),以秒为单位。
-
MaximumFDBEntries=
配置最大 FDB 条目的最大数量。
-
ReduceARPProxy=
接受一个布尔值。若为真,网桥连接的 VXLAN 隧道终端从本地网桥回复 ARP 请求,代表了 Distributed Overlay Virtual Ethernet (DVOE) 客户端。默认为假。
-
L2MissNotification=
接受一个布尔值。若为真,启用 netlink LLADDR 丢失提示。
-
L3MissNotification=
接受一个布尔值。若为真,启用 netlink IP 地址丢失提示。
-
RouteShortCircuit=
接受一个布尔值,若为真,开启路由短路(route short circuiting)。
-
UDPChecksum=
接受一个布尔值。若为真,则在执行 VXLAN/IPv4 时进行 UDP 校验。
-
UDP6ZeroChecksumTx=
接受一个布尔值。若为真,开启在 VXLAN/IPv6 发送 零校验和(zero checksums)。
-
UDP6ZeroChecksumRx=
接受一个布尔值。若为真,开启在 VXLAN/IPv6 接收 零校验和(zero checksums)。
-
RemoteChecksumTx=
接受一个布尔值。若为真,启用 VXLAN 的远程传送校验负载转移。
-
RemoteChecksumRx=
接受一个布尔值。若为真,启用 VXLAN 的远程接收校验负载转移。
-
GroupPolicyExtension=
接受一个布尔值。若为真,它启用 基于 VXLAN 的跨网络对象(peer)的组策略 VXLAN 扩展安全标签机制。
有关组策略 VXLAN,参见 VXLAN 组策略 文档。
默认为假。 -
GenericProtocolExtension=
接受一个布尔值。若为真,通用协议扩展(Generic Protocol Extension)扩展现有的 VXLAN 协议来提供 typing,OAM 和 versioning 的能力。
要了解更多有关 VXLAN GPE Header 的信息,参见 Generic Protocol for VXLAN 文档。
若目标端口未设置,且设置了 Generic Protocol Extension,则默认使用端口 4790。
默认为假。 -
DestinationPort=
以每设备为基准,配置默认目标 UDP 端口。若未指定目标端口,那么使用 Linux 内核的默认值。设置目标端口 4789 来使用 IANA 分配的值。若未设置,或目标端口设置为空字符串,则将使用默认端口 4789。
-
PortRange=
配置 VXLAN 端口范围。VXLAN 基于源 UDP 端口基于流量,来帮助接收端能基于外部头流量的负载均衡。它限制了端口范围为普通 UDP 本地端口,并允许通过配置来覆盖。
-
FlowLabel=
指定发出网络包的流量标签。有效值为
0
至1048575
。 -
IPDoNotFragment=
允许设置发出网络包的 IPv4 不分段(Do not Fragment(DF))位,或从 IPv4 内部头继承值。
接受一个布尔值,或inherit
。
若封装协议为IPv6
,则设置为inherit
。
当未设置时,使用内核的默认设置。
[GENEVE]
段仅作用于 geneve 类型的设备,并接受下列键:
-
Id=
指定要使用的虚拟网络标识符(Virtual Network Identifier(VNI))。介于
0
至16777215
。该项为必需项。 -
Remote=
指定传出网络包的单播目标 IP 地址。
-
TOS=
指定传出网络包的 TOS 值。介于
1
至255
。 -
TTL=
接受与
[VXLAN]
段中的相同值,但若未设置,或者设置为0
,则使用内核默认值,也就是说网络包的 TTL 将从/proc/sys/net/ipv4/ip_default_ttl
中获取。 -
UDPChecksum=
接受一个布尔值。若为真,则开启在 IPv4 上传送的 UDP 网络包的校验。
-
UDP6ZeroChecksumTx=
接受一个布尔值。若为真,则跳过 IPv6 上传送的 UDP 网络包的校验。
-
UDP6ZeroChecksumRx=
接受一个布尔值。若为真,则允许接收的 IPv6 UDP 网络包具有 零校验和字段。
-
DestinationPort=
指定目标端口。默认为
6081
。若未设置,或赋予了空字符串,则使用默认的端口6081
。 -
FlowLabel=
指定发出的网络包的流标签。
-
IPDoNotFragment=
接受与
[VXLAN]
段相同的键。
[L2TP]
段仅作用于 l2tp 类型的设备,并接受下列键:
-
TunnelId=
指定隧道 ID。所使用的值必须匹配同伴的
PeerTunelID=
的值。是一个介于1
至4294967295
之间的数。该选项为必需项。 -
PeerTunnelId=
指定同伴(peer)隧道 ID。该值必须匹配同伴的
TunnelID=
值。是一个介于1
至4294967295
之间的数。该选项为必需项。 -
Remote=
指定远程同伴的 IP 地址。该选项为必需项。
-
Local=
指定本地界面的 IP 地址。接受一个 IP 地址,或特殊的
auto
static
dynamic
。
当设置了一个地址,则本地界面必须具有该地址。
若设置为auto
,则使用本地界面所具有的一个地址。
相似的,若设置了static
或dynamic
,则使用本地界面的某个静态或动态地址。
默认为auto
。 -
EncapsulationType=
指定隧道的封装类型。接受
udp
或者ip
。 -
UDPSourcePort=
指定隧道所使用的 UDP 源端口。若选择了 UDP 封装,则该项为必需项。若选择了 IP 封装,则该项被忽略。
-
DestinationPort=
指定目标端口。若选择了 UDP 封装,则该项为必需项。若选择了 IP 封装,则该项被忽略。
-
UDPChecksum=
接受一个布尔值。若为真,则开启在 IPv4 上传送的 UDP 网络包的校验。
-
UDP6ZeroChecksumTx=
接受一个布尔值。若为真,则跳过 IPv6 上传送的 UDP 网络包的校验。
-
UDP6ZeroChecksumRx=
接受一个布尔值。若为真,则允许接收的 IPv6 UDP 网络包具有 零校验和字段。
[L2TPSession]
段仅作用于 l2tp 类型的设备,并接受下方键:
-
Name=
指定会话的名称。该选项为必需项。
-
SessionId=
指定会话 ID。所使用的值必须匹配同伴的
PeerSessionId=
值。是一个介于1
至4294967295
之间的数。该选项为必需项。 -
PeerSessionId=
指定同伴会话 ID。所使用的值必须匹配同伴的
SessionId=
值。是一个介于1
至4294967295
之间的数。该选项为必需项。 -
Layer2SpecificHeader=
指定会话的二层特定头部。可以为
none
或default
。默认为default
。
[MACsec]
段仅作用于 macsec 类型的设备,并接受下列键:
-
Port=
指定用于 MACsec 传输通道的端口。该端口被用于创建安全通道标识符(secure channel identifier(SCI))。接受一个介于
1
与65535
之间的值。默认为未设置。 -
Encrypt=
接受布尔值。若为真,则启用加密。默认为未设置。
[MACsecReceiveChannel]
段仅作用于 macsec 类型的设备,并接受下列键:
-
Port=
指定用于 MACsec 接收通道的端口。该端口被用于创建安全通道标识符(secure channel identifier(SCI))。接受一个介于
1
与65535
之间的值。
该选项为必选项,且默认情况下未设置。 -
MACAddress=
指定用于 MACsec 接收通道的 MAC 地址。
该选项为必选项,且默认情况下未设置。
[MACsecTransmitAssociation]
段仅作用于 macsec 类型的设备,并接受下列键:
-
PacketNumber=
指定用于重放(replay)保护和构建初始化向量(以及安全通道标识符[SCI])的网络包的数量。
接受介于1
与4294967295
之间的值。默认未设置。 -
KeyId=
指定密钥的认证(identification)。接受介于
0
至255
之间的值。该选项为必需项,且默认未设置。 -
Key=
指定在传送通道中的加密密钥。同样的密钥也需要配置在同伴的所匹配的接收通道上。该选项为必须值,且默认未设置。
接受一个 128-bit 密钥,该密钥以十六进制字符串编码,例如dffafc8d7b9a43d5b9a3dfbbf6a30c16
。 -
KeyFile=
接受一个指向文件的绝对路径,该文件包含 128-bit 以十六进制字符串编码的密钥,该密钥将被用于传送通道中。若指定了该选项,则忽略
Key=
。
注意该文件必须能被用户systemd-network
读取,所以该文件应该具有root:systemd-network
所有者,且权限为0640
。 -
Activate=
接受一个布尔值。若启用,则激活安全关联(security association)。默认为未设置。
-
UseForEncoding=
接受一个布尔值。若启用,则将安全关联用于编码。仅有一个
[MACSecTransmitAssociation]
段可以启用该选项。若启用,则隐含Activate=yes
。默认为未设置。
[MACsecReceiveAssociation]
段仅作用于 macsec 类型的设备,并接受下列键:
-
Port=
,MACAddress=
同
[MACsecReceiveChannel]
段中的键。 -
PacketNumber=
,KeyId=
,Key=
,KeyFile=
,Activate=
同
[MACsecTransmitAssociation]
段中的键。
[Tunnel]
段作用于 ipip sit gre gretap ip6gre ip6gretap vti vti6 ip6tnl erspan 类型的设备,并接受下列键:
-
Local=
一个隧道网络包的静态本地地址。它必须为该主机上另一个界面上的地址,或者特殊的值
any
。 -
Remote=
隧道的远端。接受一个 IP 地址,或者特殊值
any
。 -
TOS=
一个隧道界面的 Type Of Service 字节值。更多 TOS 的细节,见文档 Type of Service in the Internet Protocol Suite。
-
TTL=
隧道网络包的 TTL 定值。该值介于
1
至255
之间。若设置为0
则该网络包继承 TTL 值。默认的 IPv4 隧道值为:继承。默认的 IPv6 隧道值为 64。 -
DiscoverPathMTU=
接受布尔值。若为真,则在隧道上启用 路径 MTU 发现(Path MTU Discovery)。
-
IPv6FlowLabel=
在 IPv6 头部(参见 RFC 6437)配置 20-bit 流标签(参见 RFC 6437),一个节点通过该标签标记一个流的网络包。它仅用于 IPv6 隧道。将流标签置零来表示该网络包未被标记。可配置的值为
0
至0xFFFFF
,或设置为inherit
,在这个情况下将使用原始的标签。 -
CopyDSCP=
接受一个布尔值。若为真,则在 IPv6 隧道网络包封装时,将差分服务代码点(the Differentiated Service Code Point(DSCP))从外部头拷贝至内部头。DSCP 是 IP 网络包的一个字段,其启用了指派给网络流量的服务的不同层级。默认值为
no
。 -
EncapsulationLimit=
隧道封装限制(Tunnel Encapsulation Limit)选项指定了有多少层额外的封装可以追加在网络包上。举例来说,一个为零的隧道封装限制选项,意味着携带该选项的网络包在离开该隧道前,不能进入另外一个隧道(参见 TFC 2473)。有效值为
0
至255
,以及none
。默认为4
。 -
Key=
Key=
参数同时指定了两个方向所要使用的键(InputKey=
和OutputKey=
)。Key=
要么是一个数字,要么和一个 IPv4 地址类似,是一个点分隔的四数组。它用作以标记配置的(mark-configured)SAD/SPD 条目,该条目又用作 ip xfrm(用于实现 IPsec 协议的框架)中的查找键(lookup key,同时用于数据路径以及控制路径)的一部分。参见 ip-xfrm — transform configuration 了解详情。它仅用于 VTI/VTI6 GRE GRETAP ERSPAN 隧道。 -
InputKey=
InputKey=
参数指定了输入方向的键。格式同Key=
。仅用于 VTI/VTI6 GRE GRETAP ERSPAN 隧道。 -
OutputKey=
OutputKey=
参数指定了输出方向的键。格式同Key=
。仅用于 VTI/VTI6 GRE GRETAP ERSPAN 隧道。 -
Mode=
一个 ip6tnl 隧道可以为下列三种模式之一:
ip6ip6
IPv6 承载 IPv6,ipip6
IPv6 承载 IPv4,any
其他。 -
Independent=
接受一个布尔值。若为真,则隧道不要求 .network 文件。创建为 tunnel@NONE。默认为
false
。 -
AssignToLoopback=
接受一个布尔值。若设置为
yes
,回环界面 lo 将作为隧道界面的底层设备。默认为no
。 -
AllowLocalRemote=
接受一个布尔值。若为真,允许 ip6ntl 设备的远程端口为本地地址的隧道流量。若未设置,则使用内核默认值。
-
FooOverUDP=
接受一个布尔值。指定是否配置
FooOverUDP=
隧道。默认为假。该选项仅对 IPIP SIT GRE GRETAP 隧道起效。更多信息参见 Foo over UDP。 -
FOUDestinationPort=
该设置指定了封装的 UDP 目标端口。若
GooOverUDP=yes
,该字段为必需项,默认未设置。 -
FOUSourcePort=
该设置指定了封装的 UDP 源端口。默认为
0
,也就是网络包的源端口留给网络堆栈来决定。 -
Encapsulation=
接受与
[FooOverUDP]
段相同的键。 -
IPv6RapidDeploymentPrefix=
为 IPv6 Rapid Deployment 重新配置隧道,也被称为 6rd。该值为 ISP 指定的长度非零的 IPv6 前缀。仅作用于
SIT
隧道。 -
ISATAP=
接受一个布尔值。若设置,配置隧道为 Intra-Site Automatic Tunnel Addressing Protocol (ISATAP) 隧道。仅作用于
SIT
隧道。若未设置,使用内核默认值。 -
SerializeTunneledPackets=
接受一个布尔值。若设置为
yes
,则网络包被序列化(serialized)。仅用于 GRE GRETAP ERSPAN 隧道。若未设置,使用内核默认值。 -
ERSPANIndex=
指定界面的 ERSPAN 索引字段,一个介于
1
至1048575
之间的整数,该数与 ERSPAN 流量的源端口和方向相关联。该字段为必须值。
[FooOverUDP]
段仅作用于 fou 类型的设备,并接受下列键:
-
Encapsulation=
指定用于在 UDP 网络包内存储各种协议的网络包的封装格式。支持下列值:
FooOverUDP
提供最简单的无修饰的 UDP 封装,它将网络包直接封装至 UDP 负载中。
GenericUDPEncapsulation
是一个通用的可扩展封装,它允许将任何 IP 协议以及可选数据作为封装的内容。
更多信息参阅 Generic UDP Encapsulation。
默认为FooOverUDP
。 -
Port=
指定端口号,IP 封包将从该端口到达。注意,到达的网络包的封包将被移除。然后它们将被手动返还至网络栈,并发往真实的目的地。该项为必需项。
-
PeerPort=
指定同伴端口号。默认为未设置。注意,若设置了同伴端口号,则
Peer=
为必选项。 -
Protocol=
Protocol=
指定到达 UDP 端口的网络包的协议号。当Encapsulation=FooOverUDP
时,该字段为必须值,且默认未设置。接受一个 IP 协议名,比如gre
或ipip
,以及介于1
至255
的整数。当Encapsulation=GenericUDPEncapsulation
时,该值禁止指定。 -
Peer=
配置同伴 IP 地址。当同伴地址设置后,
PeerPort=
为必需项。 -
Local=
配置本地 IP 地址。
[Peer]
段仅作用于 veth 类型的设备,并接受下列键:
-
Name=
当创建虚拟网络设备时要使用的界面名。该选项为必需项。
-
MACAddress=
同伴的 MAC 地址,若未设置,则以使用与主界面生成 MAC 地址相同的方式生成。
[VXCAN]
段仅作用于 vxcan 类型的设备,并接受下列键:
-
Peer=
当创建虚拟网络设备时要使用的同伴界面名。该选项为必需项。
[Tun]
段仅作用于 tun 类型的设备,并接受下列键:
-
MultiQueue=
接受一个布尔值。配置是否使用多重文件描述符(multiple file descriptors)(queues,队列)来并行发送和接受网络包。默认为
no
。 -
PacketInfo=
接受一个布尔值。配置是否在网络包前附加四个多余字节(两个 flag 字节,两个协议字节)。若禁用,它指出该网络包为纯 IP 网络包。默认为
no
。 -
VNetHeader=
接受一个布尔值。为 tun 或 tap 设备配置 IFF_VNET_HDR flag。它允许发送和接收更大的 Generic Segmentation Offload(GSO)网络包。它可以显著增加转包量。默认为
no
。 -
User=
可访问
/dev/net/tun
设备的用户。 -
Group=
可访问
/dev/net/tun
设备的组。
[Tap]
段仅作用于 tap 类型的设备,并接受与 [Tun]
段相同的键。
[WireGuard]
接受下列键:
-
PrivateKey=
该界面的 Base64 编码的私钥。它可以通过
wg genkey
命令生成(参见 wg(8))。该选项或PrivateKeyFile=
为使用 WireGuard 的必需项。注意因为该信息为秘密,你可能需要将 .netdev 文件的所有者为root:systemd-network
并设置权限为0640
。 -
PrivateKeyFile=
接受一个指向文件的绝对路径,该文件包含该界面的 Base64 编码的私钥。若指定了该选项,则忽略
PrivateKey=
。注意,文件必须对用户 systemd-network 可读,所以它应该,具有所有者root:systemd-network
,且具有权限0640
。 -
ListenPort=
设置监听的 UDP 端口。接受介于
1
至65535
之间的值,或者auto
。若指定了auto
,端口将基于界面名自动生成。默认为auto
。 -
FirewallMark=
设置从该界面发出的 WireGuard 网络包的防火墙掩码(mask)。接受一个介于
1
至4294967295
之间的数。
[WireGuardPeer]
段接受下列键:
-
PublicKey=
设置一个 Base64 编码的,通过
wg pubkey
(参见wg(8)
)命令,从私有密钥计算得到的公开密钥,通常通过带外方式(out of band)传送给配置文件的所有者。该选项为该段的必需项。 -
PresharedKey=
可选的该界面的预分发密钥。它可以通过
wg genpsk
产生。该选项添加一个额外的对称密钥加密层,来与公钥加密混合使用,以增加后量子时代的抗性。注意,因为该信息为秘密,你可能需要将 .netdev 文件的所有者为root:systemd-network
并设置权限为0640
。 -
PresharedKeyFile=
接受一个指向文件的绝对值,该文件包含一个同伴的 Base64 编码的预分发密钥。若指定了该选项,则忽略
PresharedKey=
。注意该文件必需对用户 systemd-network 可读,所以,它应该可以具有所有者root:systemd-netowrk
以及0640
文件权限。 -
AllowedIPs=
设置一个逗号分割的列表,列表由具有 CIDR 掩码的 IP(v4 或 v6)地址,仅允许那些地址的同伴发来流量,且仅会将指向这些地址的包转发出去。可以指定
0.0.0.0/0
来表示全体 IPv4 地址,以及::/0
来表示全体 IPv6 地址。 -
Endpoint=
设置终点 IP 地址或主机名,后跟随一个分号,之后为一个端口号。在配置时,一旦有来自同伴地正确 IP 地址和端口,该终点将被自动更新至最新地源 IP 地址和端口号。
-
PersistentKeepalive=
设置一个秒间隔,介于
1
与65535
之间,发送认证过的空网络包应该多频繁地发送给同伴,来保证防火墙将该链接标记为 stateful,或使 NAT 映射持续有效。举例来说,若该界面很少发送网络包,但可能会在任何时候接收来自同伴地包,且它在 NAT 之后,界面可能可以设置 25 秒地间隔来保持连接。若设置为0
或off
,禁用该选项。默认情况或未设置,该选项为off
。大多数用户并不需要它。
[Bond]
段接收下列键值:
-
Mode=
指定绑定策略。默认为
balance-rr
(round robin)。可用值为balance-rr
active-backup
balance-xor
broadcast
802.3ad
balance-tlb
balance-alb
。 -
TransmitHashPolicy=
选择 balance-xor 802.3ad tlb 模式下地传输散列策略。可能地值为
layer2
layer3+4
layer2+3
encap2+3
encap3+4
。 -
LACPTransmitRate=
在 802.3ad 模式中,指定链路同伴发送 Link Aggregation Control Protocol Data Unit 网络包地频率。可能的值为
slow
,表示要求同伴每 30 秒发送一个 LACPDU,或者为fast
,则表示要求同伴每 1 秒发送一个 LACPDU。默认值为slow
。 -
MIIMonitorSec=
指定 Media Independent Interface 链路监视发生的频率。若值为
0
则关闭 MII 链路监视。该值下舍至最接近的微秒。默认值为0
。 -
UpDelaySec=
指定在链路上线状态被检测到之后,在一个链路启用之前要延迟的时间。该值下舍值多个
MIIMonitorSec
值。默认值为0
。 -
DownDelaySec=
指定在链路离线状态被检测到之后,在一个链路关闭之前要延迟的时间。该值下舍值多个
MIIMonitorSec
值。默认值为0
。 -
LearnPacketIntervalSec=
指定绑定驱动器向每个从交换发送学习网络包所间隔的秒数。可用的范围为
1
至0x7fffffff
;默认值为1
。该选项仅对 balance-tlb 以及 balance-alb 模式有效。 -
AdSelect=
指定要使用的 802.3ad 聚合选择逻辑(aggregation selection logic)。可能的值为
stable
bandwidth
count
。 -
AdActorSystemPriority=
指定 802.3ad 参与者系统优先级(actor system priority)。范围
1
至65535
。 -
AdUserPortKey=
指定 802.3ad 用户定义的端口部分(user defined portion of the port key)。范围
0
至1023
。 -
AdActorSystem=
指定 802.3ad 系统 mac 地址。该值不可以为 NULL 或 Multicast。
-
FailOverMACPolicy=
指定 active-backup 模式在确定从设备时,是否应该设置所有从设备为相同的 MAC 地址,若启用,则依照选定的策略,指定特定的对绑定的 MAC 地址的处理。默认策略为
none
。可能的值为none
active
follow
。 -
ARPValidate=
指定 ARP 探测和回复是否应该在任何支持 ARP 监视的模式中可用,或者任何 non-ARP 流量处于链路监视的目的都应该被过滤(被忽略)。可能的值为
none
active
backup
all
。 -
ARPIntervalSec=
指定 ARP 链路监视频率。若值为
0
则关闭 ARP 监视。默认值为0
,默认单位为秒。 -
ARPIPTargets=
当
ARPIntervalSec
大于 0 时,要当作 ARP 监视对端的 IP 地址们。这些 ARP 请求发送的目标用来决定到达目标的链路的健康情况。以 IPv4 点分割十进制数的格式指定值。至少给出一个 IP 地址让 ARP 监视起作用。最大的目标数可以设置为 16。默认为无 IP 地址。 -
ARPAllTargets=
指定
ARPIPTargets
必须可达的数量,在此数量之上,该链路才能被 ARP 监视认为是从设备在线。该选项仅影响从设备开启了ARPValidate
的 active-backup 模式。可能值为any
或者all
。 -
PrimaryReselectPolicy=
指定主要从设备的再次选择策略。它影响了当活动从设备离线,或者主要从设备恢复时,主要从设备是如何被选出,并成为活动从设备。这个选项用于防止主要从设备和其它从设备之间的翻转。可能的值为
always
better
failure
。 -
ResendIGMP=
指定在一个故障转移事件之后,要提交多少个 IGMP membership report。一个 membership report 将在故障转移之后立刻发出,随后的网络包将间隔 200ms 发出。有效值范围为
0
至255
。默认为1
。值为0
阻止故障转移事件后发送 IGMP membership report。 -
PacketsPerSlave=
指定在移动至下一个从设备之前,有多少网络包从该从设备中发出。当设置为
0
时,则随机选择从设备。有效值范围为0
至65535
。默认为1
。该选项仅影响 balance-rr 模式 -
GratuitousARP=
指定在故障转移时间后,要提交多少同伴通知(gratuitous ARPs 以及 unsolicited IPv6 Neighbor Advertisements)。一旦链路在新的从设备上上线,一个同伴通知即发送给绑定设备以及每个 VLAN 子设备。若这个值大于 1,则在每个链路监视间隔(ARPIntervalSec 或 MIIMonitorSec 随便一个激活时)都重复。有效值范围
0
至255
。默认值为 1。该选项仅作用于 active-backup 模式。 -
AllSlavesActive=
接受一个布尔值。若为假,则丢弃(从非激活端口接收的)重复帧,若为真则分发。通常情况下,绑定会丢弃(从非激活端口接收的)重复帧,这对大多数用户来说都是需要的。但有些时候也需要允许重复帧的分发。默认值为假(丢弃从非激活端口接收的重复帧)。
-
DynamicTransmitLoadBalancing=
接受一个布尔值。指定是否启用 dynamic shuffling of flows。仅作用于 balance-tlb 模式。默认为未设置。
-
MinLinks=
指定在断言承载者之前,最小的活动链路数量。
更多信息参阅 Linux Ethernet Bonding Driver HOWTO
[Xfrm]
接受下列键:
-
InterfaceId=
设置 xfrm 界面的 ID/key,其与一个 SA/policy 相关联。可以为十进制或十六进制数,有效值范围
0
至0xffffffff
,默认值为0
。 -
Independent=
接受一个布尔值。若设置为
no
,xfrm 界面应该具有一个底层设备,该设备可以被用于硬件负载转移。默认值为no
,参见 systemd.network(5) 了解如何配置底层设备。
更多信息参阅 Virtual xfrm interfaces
[VRF]
段仅作用于 vrf 类型的设备,并接受下列键:
-
Table=
数字表示的路由表标识符。该选项为必需项。
-
案例 1
# /etc/systemd/network/25-bridge.netdev [NetDev] Name=bridge0 Kind=bridge
-
案例 2
# /etc/systemd/network/25-vlan1.netdev [Match] Virtualization=no [NetDev] Name=vlan1 Kind=vlan [VLAN] Id=1
-
案例 3
# /etc/systemd/network/25-ipip.netdev [NetDev] Name=ipip-tun Kind=ipip MTUBytes=1480 [Tunnel] Local=192.168.223.238 Remote=192.169.224.239 TTL=64
-
案例 4
# /etc/systemd/network/1-fou-tunnel.netdev [NetDev] Name=fou-tun Kind=fou [FooOverUDP] Port=5555 Protocol=4
-
案例 5
# /etc/systemd/network/25-fou-ipip.netdev [NetDev] Name=ipip-tun Kind=ipip [Tunnel] Independent=yes Local=10.65.208.212 Remote=10.65.208.211 FooOverUDP=yes FOUDestinationPort=5555
-
案例 6
# /etc/systemd/network/25-tap.netdev [NetDev] Name=tap-test Kind=tap [Tap] MultiQueue=yes PacketInfo=yes
-
案例 7
# /etc/systemd/network/25-sit.netdev [NetDev] Name=sit-tun Kind=sit MTUBytes=1480 [Tunnel] Local=10.65.223.238 Remote=10.65.223.239
-
案例 8
# /etc/systemd/network/25-6rd.netdev [NetDev] Name=6rd-tun Kind=sit MTUBytes=1480 [Tunnel] Local=10.65.223.238 IPv6RapidDeploymentPrefix=2602::/24
-
案例 9
# /etc/systemd/network/25-gre.netdev [NetDev] Name=gre-tun Kind=gre MTUBytes=1480 [Tunnel] Local=10.65.223.238 Remote=10.65.223.239
-
案例 10
# /etc/systemd/network/25-ip6gre.netdev [NetDev] Name=ip6gre-tun Kind=ip6gre [Tunnel] Key=123
-
案例 11
# /etc/systemd/network/25-vti.netdev [NetDev] Name=vti-tun Kind=vti MTUBytes=1480 [Tunnel] Local=10.65.223.238 Remote=10.65.223.239
-
案例 12
# /etc/systemd/network/25-veth.netdev [NetDev] Name=veth-test Kind=veth [Peer] Name=veth-peer
-
案例 13
# /etc/systemd/network/25-bond.netdev [NetDev] Name=bond1 Kind=bond [Bond] Mode=802.3ad TransmitHashPolicy=layer3+4 MIIMonitorSec=1s LACPTransmitRate=fast
-
案例 14
# /etc/systemd/network/25-dummy.netdev [NetDev] Name=dummy-test Kind=dummy MACAddress=12:34:56:78:9a:bc
-
案例 15
# /etc/systemd/network/25-vrf.netdev # 创建一个 table 为 42 的 VRF 界面。 [NetDev] Name=vrf-test Kind=vrf [VRF] Table=42
-
案例 16
# /etc/systemd/network/25-macvtap.netdev # 创建一个 MacVTap 设备 [NetDev] Name=macvtap-test Kind=macvtap
-
案例 17
# /etc/systemd/network/25-wireguard.netdev [NetDev] Name=wg0 Kind=wireguard [WireGuard] PrivateKey=EEGlnEPYJV//kbvvIqxKkQwOiS+UENyPncC4bF46ong= ListenPort=51820 [WireGuardPeer] PublicKey=RDf+LSpeEre7YEIKaxg+wbpsNV7du+ktR99uBEtIiCA= AllowedIPs=fd31:bf08:57cb::/48,192.168.26.0/24 Endpoint=wireguard.example.com:51820
-
案例 18
# /etc/systemd/network/27-xfrm.netdev [Xfrm] Name=xfrm0 Kind=xfrm [Xfrm] Independent=yes
systemd(1),systemd-networkd(8),systemd.link(5),systemd.network(5)