systemd.netdev 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 · 指令索引systemd-241

名称

systemd.netdev — 虚拟网络设备配置

大纲

netdev.netdev

描述

创建虚拟网络设备的操作由 systemd-networkd.service(8) 执行。

注意,虚拟网络设备的Netdev文件必须以 .netdev 作为后缀名,否则将被忽略。 systemd-networkd.service 服务将在启动后根据 .netdev 配置文件自动创建所有的虚拟网络设备。 如果将要创建的虚拟设备已经存在(以设备名为准),那么直接按现状使用已经存在的虚拟设备,而不是重新创建它。 特别需要注意的是, 已经存在的虚拟设备的各项设置都将保持原样(不做任何更改)。

Netdev文件分别位于: 系统网络目录(/usr/lib/systemd/network)、 运行时网络目录(/run/systemd/network)、 本机网络目录(/etc/systemd/network)。 所有的Netdev文件(无论位于哪个目录中),统一按照文件名的字典顺序处理。 对于不同目录下的同名Netdev文件,仅以优先级最高的目录中的那一个为准。 具体说来就是:/etc/ 的优先级最高、/run/ 的优先级居中、/usr/lib/ 的优先级最低。 如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个Netdev文件, 那么最佳做法是在 /etc/ 目录中创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的 同名文件。

对于例如 foo.netdev 这样的Netdev文件,可以同时存在对应的 foo.netdev.d/ 目录,当解析完Netdev文件之后,目录中所有以 ".conf" 结尾的文件,都会被按照文件名的字典顺序,依次解析(相当于依次附加到Netdev文件的末尾)。 这样就可以方便的修改Netdev文件,或者为Netdev文件添加额外的设置,而无需修改Netdev文件本身。 注意,所有配置片段(".conf" 文件)必须包含明确的小节头(例如 "[Match]" 之类)。

".d" 目录除了可以放置在 /etc/systemd/network 目录中, 还可以放置在 /usr/lib/systemd/network/run/systemd/network 目录中。 所有 ".d/" 目录中的配置片段都会覆盖Netdev文件的设置(无论Netdev文件位于哪个目录)。 虽然在优先级上,/etc 中的配置片段优先级最高、 /run 中的配置片段优先级居中、/usr/lib 中的配置片段优先级最低。 但是由于 /run 是临时目录,而 /usr/lib 仅供软件包使用, 所以在实践中,".d/" 目录仅会放置在 /etc/systemd/network 目录中。

支持的虚拟网络设备类型

可以通过 .netdev 文件 配置下列类型的虚拟网络设备:

表 1. 支持的虚拟网络设备类型

类型描述
bond将多个网卡(slave)聚合为一个绑定网卡。详见 Linux Ethernet Bonding Driver HOWTO 文档。
bridge网桥是一个软交换机,每个 slave 以及 bridge 自身都是交换机的一个端口,端口之间能够互相转发数据包。
dummy哑网卡只会简单的直接丢弃所有发送给它的数据包。
gre跑在IPv4上的3层GRE(Generic Routing Encapsulation)隧道。详见 RFC 2784浅析GRE协议
gretap跑在IPv4上的2层GRE(Generic Routing Encapsulation)隧道。
erspanERSPAN 镜像(复制)一个或多个源端口上的流量然后将其转发到另一台交换机上的一个或多个目标端口。[译者注]主要用于流量的旁路监视与分析。 因为使用 GRE(Generic Routing Encapsulation) 封装, 所以镜像流量可以通过3层网络在源交换机与目的交换机之间进行路由。
ip6gre跑在IPv6上的3层GRE(Generic Routing Encapsulation)隧道。[译者推荐]GRE简介
ip6tnl跑在IPv6上的IPv4或IPv6隧道
ip6gretap跑在IPv6上的2层GRE(Generic Routing Encapsulation)隧道。
ipip跑在IPv4上的IPv4隧道
ipvlan基于IP地址过滤规则从底层设备接收数据包的栈设备
macvlan基于MAC地址过滤规则从底层设备接收数据包的栈设备
macvtap基于MAC地址过滤规则从底层设备接收数据包的栈设备
sit跑在IPv4上的IPv6隧道
tap在一个网卡与另一个设备节点之间的持久2层隧道
tun在一个网卡与另一个设备节点之间的持久3层隧道
veth在一对网卡之间的以太网隧道(虚拟以太网)
vlan基于VLAN标签过滤规则从底层设备接收数据包的栈设备(为普通以太帧带上"VLAN ID"标记)。详见 IEEE 802.1Q [译者推荐]图文并茂VLAN详解
vti跑在IPSec上的IPv4隧道(思科私有技术)
vti6跑在IPSec上的IPv6隧道(思科私有技术)
vxlan虚拟可扩展局域网(利用UDP帧传递VXLAN封装的以太帧[Ethernet over UDP])用于云计算部署。[译者推荐]VXLAN简介最好的VXLAN介绍
geneve通用网络虚拟化封装(GEneric NEtwork Virtualization Encapsulation)设备。[译者推荐]网络虚拟化协议GENEVE
vrf虚拟路由与转发(VRF)接口用于创建独立的路由与转发域
vcan虚拟控制器局域网。像普通的 loopback 设备一样, vcan 也能提供一个虚拟的本地 CAN(ControllerArea Network) 接口。
vxcan虚拟控制器局域网隧道。类似于虚拟以太网(veth),vxcan 也在两个虚拟CAN网络设备(vcan)之间实现了一个本地CAN隧道。创建一个 vxcan 设备实际上会同时创建两个 vxcan 设备组成的设备对。任意一端接收到的数据包都将同时出现在另一端。 vxcan 可以用于在两个不同的名字空间之间通信。
wireguardWireGuard 安全网络隧道。用来替代 OpenVPN, IPSec 的下一代开源VPN协议。[译者推荐]挖掘WireGuard的潜在功能及实际应用
netdevsim一个网络设备模拟器。用于测试各种网络 API ,目前主要用于测试硬件减负(hardware offloading)相关接口。
fouFoo-over-UDP 隧道

[Match] 小节选项

仅在 "[Match]" 小节为空, 或者其中的所有选项都匹配成功的情况下,才会创建虚拟设备。 所有可用于匹配的选项如下:

Host=

匹配主机名(hostname)或"machine ID"。 详见 systemd.unit(5) 中的 "ConditionHost=" 选项。

Virtualization=

检查系统是否运行在虚拟化环境中, 亦可进一步检查系统是否运行在特定的虚拟化环境中。 详见 "ConditionVirtualization=" 选项(参见 systemd.unit(5) 手册)。

KernelCommandLine=

检查是否设置了特定的内核引导选项(若以感叹号(!)开头则表示未设置)。 详见 "ConditionKernelCommandLine=" 选项(参见 systemd.unit(5) 手册)。

KernelVersion=

检查内核版本(uname -r)是否匹配给定的表达式。 若以感叹号(!)开头则表示不匹配。详见 "ConditionKernelVersion=" 选项(参见 systemd.unit(5) 手册)。

Architecture=

检查是否运行在特定的硬件架构上。 详见 "ConditionArchitecture=" 选项(参见 systemd.unit(5) 手册)。

[NetDev] 小节选项

"[NetDev]" 小节 能够识别的选项如下:

Description=

对虚拟设备的描述

Name=

将要创建的虚拟设备的名称。 这是必须设置的选项。

Kind=

将要创建的虚拟设备的类型。 这是必须设置的选项。 必须设为一个前述"支持的虚拟网络设备类型"表格中"类型"字段的值。

MTUBytes=

设置虚拟设备的最大传输单元。可以使用以1024为基准的 K, M, G 后缀。 对于 "tun" 或 "tap" 设备来说,此选项不支持在 "[NetDev]" 小节中使用。 正确的做法是在对应的 systemd.network(5) 文件的 "[Link]" 小节中使用。

MACAddress=

设置虚拟设备的MAC地址。对于 "tun" 或 "tap" 设备, 此选项不支持在 "[NetDev]" 小节中使用。 正确的做法是在对应的 systemd.network(5) 文件的 "[Link]" 小节中使用。 对于"vlan" 设备,若未设置此项,则从物理接口继承MAC地址。 对于其他虚拟设备来说,若未设置此项,则基于设备名称与 machine-id(5) 生成一个。

[Bridge] 小节选项

"[Bridge]" 小节仅在 Kind=bridge 时才有意义。 能够识别的选项如下:

HelloTimeSec=

根桥(root bridge)/指定桥(designated bridge)每隔多少秒发送一次"Hello包"。 根桥(Root Bridge)使用"Hello包"通告整个桥接局域网中的所有其他网桥:"我是根桥"。 指定桥(designated bridge)是到根桥累计路径花费最小的网桥, 负责收发本网段数据,并且随时准备接替失效的根桥(Root Bridge)。

MaxAgeSec=

"Hello包"的最长有效期,必须大于 HelloTimeSec= 值。 从收到最后一个"Hello包"开始计时,如果超过此处设置的时间仍未收到根桥发出的"Hello包", 那么指定桥(designated bridge)将会接替失效的根桥(Root Bridge), 并使用"Hello包"通告整个桥接局域网中的所有其他网桥:"我是根桥"。

ForwardDelaySec=

从监听与学习状态切换为转发状态前 延迟多少秒

AgeingTimeSec=

从某MAC地址收到数据包之后, 将在转发数据库中保留此MAC地址多长时间。

Priority=

该桥的优先级。必须是一个 0 到 65535 之间的整数。 数字越小优先级越高。优先级最低的桥将被选为"根桥"。

GroupForwardMask=

接受一个以正整数形式表示的16位掩码, 以允许转发带有 802.1D 保留地址(01:80:C2:00:00:0X)的本地链路帧。 具体算法是使用"AND"逻辑计算指定掩码与 2^X 的幂(其中"X"是MAC地址最后一个字节的低半截)。 例如将此选项设为 8 表示 允许将帧地址转发到 01:80:C2:00:00:03 (802.1X PAE)

DefaultPVID=

新增端口的默认 VLAN ID , 可设为 1–4094 之间的一个整数,或者特殊值 "none" 表示禁用 PVID

MulticastQuerier=

控制内核 IFLA_BR_MCAST_QUERIER 属性的布尔值。 设为 yes 表示允许内核从一个全零源地址发送常规ICMP查询(也就是允许ICMP组播)。 此特性可以加速网络启动时的聚合(convergence), 但却会导致某些理解组播的交换机作出错误行为以及胡乱转发ICMP组播包。 若未设置,则使用内核的默认值。

MulticastSnooping=

控制内核 IFLA_BR_MCAST_SNOOPING 属性的布尔值。 设为 yes 表示启用 IGMP snooping 监控主机与组播路由(multicast router)之间的IGMP(Internet Group Management Protocol)流量。 若未设置,则使用内核的默认值。

VLANFiltering=

控制内核 IFLA_BR_VLAN_FILTERING 属性的布尔值。 设为 yes 表示以 VLAN-filtering 模式启动网桥。若未设置,则使用内核的默认值。

STP=

控制是否使用生成树协议(Spanning Tree Protocol)的布尔值。 若未设置,则使用内核的默认值。

[VLAN] 小节选项

"[VLAN]" 小节仅在 Kind=vlan 时才有意义。 能够识别的选项如下:

Id=

使用的 VLAN ID ,必须是一个 0 ~ 4094 之间的整数。 这是必须设置的选项。

GVRP=

是否支持通用VLAN注册协议(Generic VLAN Registration Protocol)。 该协议允许自动学习网络上的各个 VLAN 。接受一个布尔值。 若未设置,则使用内核的默认值。

MVRP=

是否支持多VLAN注册协议(Multiple VLAN Registration Protocol)。 该协议是一个标准的二层协议,以前被称为 GVRP(GARP VLAN Registration Protocol),用于自动配置交换机上的 VLAN 。 它最初由 802.1ak 定义,后来被 802.1Q-2005 进行了修正。 接受一个布尔值。若未设置,则使用内核的默认值。

LooseBinding=

是否支持 VLAN 松散绑定模式。 该模式仅从父级向关联的VLAN传递操作状态,但是VLAN设备的状态保持不变。 接受一个布尔值。若未设置,则使用内核的默认值。

ReorderHeader=

接受一个布尔值,设为 yes 表示让 VLAN 设备表现的像一个真正的物理设备一样。 若未设置,则使用内核的默认值。

[MACVLAN] 小节选项

"[MACVLAN]" 小节仅在 Kind=macvlan 时才有意义。 能够识别的选项如下:

Mode=

要使用的 MACVLAN 模式。可设为 "private", "vepa", "bridge", "passthru" 之一。

[MACVTAP] 小节选项

"[MACVTAP]" 小节仅在 Kind=macvtap 时才有意义。 能够识别的选项与 "[MACVLAN]" 小节完全相同。

[IPVLAN] 小节选项

"[IPVLAN]" 小节仅在 Kind=ipvlan 时才有意义。 能够识别的选项如下:

Mode=

要使用的 IPVLAN 模式。可设为 "L2","L3", "L3S" 之一。

Flags=

要使用的 IPVLAN 标记。可设为 "bridge","private", "vepa" 之一。

[VXLAN] 小节选项

"[VXLAN]" 小节仅在 Kind=vxlan 时才有意义。 能够识别的选项如下:

Id=

VXLAN 网络标识符(VXLAN Segment ID) 。取值范围是 1-16777215 。

Remote=

目标IP地址

Local=

本地IP地址

TOS=

vxlan 接口的服务类型(Type Of Service)字段的值(一个字节)。

TTL=

vxlan 数据包的生存期(Time To Live)字段的值(允许的跳数)。 一般设为一个 0–255 之间的整数(特殊值 0 表示继承内部协议的 TTL 值)。 特殊值 "inherit" 表示继承外部协议的 TTL 值。

MacLearning=

接受一个布尔值。设为 yes 表示允许动态MAC地址学习, 从而允许发现远端的MAC地址。

FDBAgeingSec=

内核学习到的转发数据库(Forwarding Database)记录的 生存期(秒数)。

MaximumFDBEntries=

转发数据库(Forwarding Database)允许容纳的最大记录数量。

ReduceARPProxy=

接受一个布尔值。设为 yes 表示允许桥接的 VXLAN 隧道端点代替远程的 DVOE(Distributed Overlay Virtual Ethernet)客户端 应答来自本地网桥的ARP请求。默认值为 no 。 [译者注]DVOE隧道协议是IBM专有的分布式虚拟以太网技术,使用VXLAN帧格式进行封装, 优点是不需要底层物理设备支持组播。

L2MissNotification=

接受一个布尔值。设为 yes 表示 开启二层 LLADDR 缓存未命中通知。

L3MissNotification=

接受一个布尔值。设为 yes 表示 开启三层 IP 地址未命中通知。

RouteShortCircuit=

接受一个布尔值。设为 yes 表示 开启路由短路(route short circuiting)。

UDPChecksum=

接受一个布尔值。设为 yes 表示开启计算 VXLAN/IPv4 UDP 校验和。

UDP6ZeroChecksumTx=

接受一个布尔值。设为 yes 表示开启发送 VXLAN/IPv6 零校验和(也就是不计算校验和)。

UDP6ZeroChecksumRx=

接受一个布尔值。设为 yes 表示开启接收 VXLAN/IPv6 零校验和(也就是不计算校验和)。

RemoteChecksumTx=

接受一个布尔值。设为 yes 表示开启远程传递 VXLAN 校验和减负(checksum offload)。

RemoteChecksumRx=

接受一个布尔值。设为 yes 表示开启远程接收 VXLAN 校验和减负(checksum offload)。

GroupPolicyExtension=

接受一个布尔值。设为 yes 表示开启横跨网络节点的组策略扩展安全标签机制。 详见 VXLAN Group Policy 文档。默认值是 no 。

DestinationPort=

默认UDP目标端口(基于每个设备)。 若未设置或者设为空字符串, 则表示使用Linux内核默认值 4789 。 应该设为 4789 以遵循 IANA 分配的标准值。

PortRange=

允许使用的UDP源端口范围。 接收端可以根据不同的UDP源端口值, 对 VXLAN 流进行负载均衡。 默认允许使用全部的常规UDP源端口, 但可以使用此选项限制允许使用的UDP源端口范围。

FlowLabel=

传出数据包的流标签。 取值范围是 0-1048575 。

[GENEVE] 小节选项

"[GENEVE]" 小节仅在 "Kind=geneve" 时才有意义。 能够识别的选项如下:

Id=

虚拟网络标识符(VNI, Virtual Network Identifier)。取值范围是 0-16777215 。这是一个必需设置的选项。

Remote=

传出数据包的单播目标IP地址

TOS=

传出数据包中服务类型(Type Of Service)字段的值。取值范围是 1-255 。

TTL=

传出数据包中生存期(Time To Live)字段的值(允许的跳数)。取值范围是 1-255 。

UDPChecksum=

接受一个布尔值。设为 yes 表示计算 IPv4 UDP 校验和。

UDP6ZeroChecksumTx=

接受一个布尔值。设为 yes 表示不计算 IPv6 UDP 校验和。

UDP6ZeroChecksumRx=

接受一个布尔值。设为 yes 表示允许传入的 IPv6 UDP 数据包不含校验和(校验和字段为全零)。

DestinationPort=

UDP目标端口。 若未设置或者设为空字符串,则表示使用默认值 6081 。

FlowLabel=

传出数据包的流标签

[Tunnel] 小节选项

"[Tunnel]" 小节仅在 Kind= 的值等于 "ipip", "sit", "gre", "gretap", "ip6gre", "ip6gretap", "vti", "vti6", "ip6tnl" 之一时才有意义。 能够识别的选项如下:

Local=

隧道数据包使用的静态本地地址。 它必须是本机另一个接口上的地址。

Remote=

隧道的远程端点

TOS=

隧道接口的服务类型(Type Of Service)字段的值。 有关TOS的详细解释可参见 Type of Service in the Internet Protocol Suite 文档。

TTL=

隧道数据包中生存期(Time To Live)字段的值(允许的跳数)。 一般设为一个 0–255 之间的整数(特殊值 0 表示继承 TTL 值)。 IPv4 隧道的默认值是零(继承)、 IPv6 隧道的默认值是 64 。

DiscoverPathMTU=

接受一个布尔值。设为 yes 表示 为隧道开启路径MTU发现(自动探测路径中的最大传输单元,避免IP分片)。

IPv6FlowLabel=

IPv6头(see RFC 2460)中 流标签(see RFC 6437)字段的值(20-bit)。 节点使用流标签来标记某个流中的所有数据包。 此选项仅对IPv6隧道有意义。 将流标签设为零表示 数据包尚未被标记。 取值范围是 0–0xFFFFF 之间的一个整数。 特殊值 "inherit" 表示使用原来的流标签。

CopyDSCP=

接受一个布尔值。 设为 yes 表示在IPv6隧道数据包解封过程中, 差分服务码点 DSCP(Differentiated Service Code Point) 字段将从外部头复制到内部头。 DSCP 是IP数据包头中的一个字段,用于为不同的网络流分配不同的服务级别(类似于优先级), 主要用于提供 QoS 支持。默认值是 "no" [推荐阅读]DSCP与IP优先级

EncapsulationLimit=

设置隧道数据包"Tunnel Encapsulation Limit"选项的值, 也就是限制最多允许对隧道数据包进行多少次嵌套封装。 数据包的"Tunnel Encapsulation Limit"选项值为 0 , 表示 该数据包在退出当前隧道之前不能进入另一个隧道(详见 RFC 2473)。 取值范围是 0–255 与特殊值 "none" ,默认值是 4 。

Key=

一次性为 InputKey=OutputKey= 选项指定同一个"Key"。 Key= 的值可以是一个数字或 IPv4 地址那样的点分四元组。 It is used as mark-configured SAD/SPD entry as part of the lookup key (both in data and control path) in ip xfrm (framework used to implement IPsec protocol). 详见 ip-xfrm — transform configuration 手册。 此选项仅用于 VTI/VTI6 隧道(思科私有技术)。

InputKey=

指定用于输入的"Key"。选项值与 Key= 相同。 此选项仅用于 VTI/VTI6 隧道(思科私有技术)。

OutputKey=

指定用于输出的"Key"。选项值与 Key= 相同。 此选项仅用于 VTI/VTI6 隧道(思科私有技术)。

Mode=

"ip6tnl" 隧道可以使用下列三种模式之一: "ip6ip6"(IPv6 over IPv6)、 "ipip6"(IPv4 over IPv6)、 "any"(两者之中任意一个)。

Independent=

接受一个布尔值。设为 yes 表示隧道不需要 .network 文件,直接创建为 "tunnel@NONE"。 默认值为 "false" 。

AllowLocalRemote=

接受一个布尔值。设为 yes 表示允许在 ip6tnl 设备上传输远程端点为本机地址的隧道流量。 若未设置则表示使用内核默认值。

FooOverUDP=

接受一个布尔值。表示是否配置 FooOverUDP= 隧道。 默认值为 no 。详见 Foo over UDP

FOUDestinationPort=

封装所使用的UDP目标端口。 这是必须设置的选项,并且没有默认值。

FOUSourcePort=

封装所使用的UDP源端口。默认值 0 表示由网络栈自行决定。

Encapsulation=

与 "[FooOverUDP]" 小节中的同名选项接受的值完全相同。

IPv6RapidDeploymentPrefix=

在IPv4上快速部署IPv6(又称 6rd)重新配置隧道。 此选项的值是由ISP分配的IPv6前缀。 此选项仅用于 SIT 隧道。

ISATAP=

接受一个布尔值。设为 yes 表示将隧道配置为 ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)隧道。 此选项仅用于 SIT 隧道。若未设置则表示使用内核默认值。

SerializeTunneledPackets=

接受一个布尔值。设为 yes 表示隧道数据包将被串行化(数据包之间不会出现乱序)。此选项仅用于 ERSPAN 隧道。 若未设置则表示使用内核默认值。

ERSPANIndex=

设置接口的 ERSPAN 索引字段的值(一个与 ERSPAN 流量的源端口和方向关联的整数), 必须设为一个 1-1048575 范围内的整数。这是一个必需设置的选项。

[FooOverUDP] 小节选项

"[FooOverUDP]" 小节仅在 Kind=fou 时才有意义。 能够识别的选项如下:

Protocol=

指定到达UDP端口的数据包的协议号。必须设为一个 1-255 范围内的整数。 这是必须设置的选项,并且没有默认值。

Encapsulation=

指定在UDP数据包中存储各种网络协议数据包的封装机制。可以设为如下值: "FooOverUDP" 提供了最简单的、无修饰的 UDP 封装机制, 也就是简单地将数据包直接封装在UDP负载中。 "GenericUDPEncapsulation" 是一种通用的可扩展封装机制, 允许对任何IP协议数据包及可选数据(作为封装的一部分)进行封装。 详见 Generic UDP Encapsulation 文档。 默认值为 "FooOverUDP"

Port=

指定IP封装数据包的目标端口。注意,数据包在到达目的地前,将被首先剥除外层封装, 然后再被手工反馈进入网络堆栈,并提前发送到实际目的地。 这是必须设置的选项。

[Peer] 小节选项

"[Peer]" 小节仅在 Kind=veth 时才有意义。 能够识别的选项如下:

Name=

创建此以太网隧道时所使用的网口名称。 这是必须设置的选项。

MACAddress=

peer 的MAC地址。 若未设置, 则自动生成一个(生成方法与上文 [NetDev] 小节中的 MACAddress= 选项相同)。

[VXCAN] 小节选项

"[VXCAN]" 小节仅在 Kind=vxcan 时才有意义。 能够识别的选项如下:

Peer=

创建虚拟网络设备时使用的对等接口名称。 这是必须设置的选项。

[Tun] 小节选项

"[Tun]" 小节仅在 Kind=tun 时才有意义。 能够识别的选项如下:

OneQueue=

设为 yes 表示 将所有数据包都排入该设备的队列。 默认值 no 表示 仅允许将固定数量的数据包排入该设备的队列, 而其余的数据包则全部排入 "qdisc" 队列。

MultiQueue=

设为 yes 表示 使用多个文件描述符(队列)并行处理数据包的发送与接收。 默认值 no 表示 仅使用一个文件描述符(队列)处理数据包的发送与接收。

PacketInfo=

设为 yes 表示 给数据包预先填充四个额外的字节 (两个标记字节、两个协议字节)。 默认值 no 表示不填充, 也就是将数据包视为纯粹的IP包。

VNetHeader=

设为 yes 表示 为 tap 设备开启 IFF_VNET_HDR 标记, 以允许发送与接收更大的 GSO(Generic Segmentation Offload)包, 从而可以显著提升吞吐量。 默认值 no 表示 关闭 IFF_VNET_HDR 标记。

User=

设置 /dev/net/tun 设备的属主

Group=

设置 /dev/net/tun 设备的属组

[Tap] 小节选项

"[Tap]" 小节仅在 Kind=tap 时才有意义。 能够识别的选项与 "[Tun]" 小节完全相同。

[WireGuard] 小节选项

"[WireGuard]" 小节 能够识别的选项如下:

PrivateKey=

接口的私钥(经过 Base64 编码)。 使用 wg genkey 命令生成(参见 wg(8) 手册)。 这是必须设置的选项。 注意,因为这是秘密信息,必须严防外泄, 所以务必将 .netdev 文件的所有者设为 "root:systemd-network" 并将文件权限设为 "0640" 。

ListenPort=

UDP监听端口。 必须设为一个 1-65535 之间的整数,或特殊值 "auto"(表示根据接口名称自动生成)。 默认值为 "auto"

FwMark=

设置传出数据包的防火墙标签。必须设为一个 1-4294967295 之间的整数。

[WireGuardPeer] 小节选项

"[WireGuardPeer]" 小节 能够识别的选项如下:

PublicKey=

接口的公钥(经过 Base64 编码)。使用 wg pubkey 命令(参见 wg(8) 手册) 从一个给定的私钥生成, 通常通过带外传输给配置文件的作者。 这是必须设置的选项。

PresharedKey=

接口的预共享密钥。这不是一个必须设置的选项。 使用 wg genpsk 命令生成。 此选项在已经存在的公钥加密中 又额外混合了一个对称加密层, 以抵御今后可能出现的量子计算机破解。 注意,因为这是秘密信息,必须严防外泄, 所以务必将 .netdev 文件的所有者设为 "root:systemd-networkd" 并将文件权限设为 "0640" 。

AllowedIPs=

接受一个 逗号分隔的 IPv4/IPv6 地址(带有CIDR掩码)列表。 表示仅允许与列表中的IP地址建立隧道。 "0.0.0.0/0" 用于匹配所有 IPv4 地址、 "::/0" 用于匹配所有 IPv6 地址。

Endpoint=

设置一个 "IP地址:端口"或"主机名:端口"格式的端点。 在配置期间,此端点将会被自动更新为 来自对端已验证数据包的最新源IP地址和端口。

PersistentKeepalive=

设置一个 1-65535 之间的间隔秒数, 表示每隔多久向对等端发送一个已验证的空数据包, 以确保有状态防火墙或NAT映射持续有效。 例如,位于NAT之后的接口很少发送流量, 但它随时会从对等端接收流量, 如果将保持持久连接的间隔设为25秒, 那么该接口就可以从持久连接的状态中受益。 设为 0 或 "off" 表示禁用持久连接保持。默认值为 off 。 大多数用户不需要这个。

[Bond] 小节选项

"[Bond]" 小节仅在 Kind=bond 时才有意义。 能够识别的选项如下:

Mode=

设置网卡绑定模式。 此选项相当于设置 bond 模块的 mode 属性。可用值如下: "balance-rr"(默认值), "active-backup", "balance-xor", "broadcast", "802.3ad", "balance-tlb", "balance-alb"

TransmitHashPolicy=

设置选择 slave 设备时使用的传输哈希策略(分发策略)。 仅对 "balance-xor", "802.3ad", "balance-tlb" 模式有意义。 此选项相当于设置 bond 模块的 xmit_hash_policy 属性。可用值如下: "layer2"(默认值), "layer3+4", "layer2+3", "encap2+3", "encap3+4"

LACPTransmitRate=

此选项仅对 "802.3ad" 模式有意义。 设置 slave 设备发送LACPDU(Link Aggregation Control Protocol Data Unit)包的频率。 此选项相当于设置 bond 模块的 lacp_rate 属性。可用值如下: "slow" 表示每30秒发送一次LACPDU包; "fast" 表示每一秒发送一次LACPDU包; 默认值是 "slow"

MIIMonitorSec=

设置监控 MII(Media Independent Interface) 连接的间隔时长,默认单位是毫秒。 此选项相当于设置 bond 模块的 miimon 属性。 设置的值最终会被四舍五入到最接近的毫秒。 默认值"0"表示禁用监控。

UpDelaySec=

当检测到链路处于"Up"状态时,延迟多久再启用它,默认单位是毫秒。 此选项相当于设置 bond 模块的 updelay 属性。 此处设置的值将被向下取整到 MIIMonitorSec= 的整数倍。 默认值是"0"

DownDelaySec=

当检测到链路处于"Down"状态时,延迟多久再禁用它,默认单位是毫秒。 此选项相当于设置 bond 模块的 downdelay 属性。 此处设置的值将被向下取整到 MIIMonitorSec= 的整数倍。 默认值是"0"

LearnPacketIntervalSec=

此选项仅对 "balance-tlb" 与 "balance-alb" 模式有意义。 设置发送ARP学习包的时间间隔(默认单位是秒)。 此选项相当于设置 bond 模块的 lp_interval 属性。 取值范围是 1–0x7fffffff ;默认值是 1 (秒)。

AdSelect=

设置 "802.3ad" 聚合的选择逻辑。 此选项相当于设置 bond 模块的 ad_select 属性。可设为下列值之一: "stable"(默认值), "bandwidth", "count"

AdActorSystemPriority=

设置 "802.3ad" 主机(Actor)系统优先级。此选项相当于设置 bond 模块的 ad_actor_sys_prio 属性。取值范围是 1-65535 ,默认值是 65535 。

AdUserPortKey=

设置 "802.3ad" "port-key" 的用户定义部分。此选项相当于设置 bond 模块的 ad_user_port_key 属性。取值范围是 0-1023 ,默认值是 0 。

AdActorSystem=

设置 "802.3ad" 主机(Actor)用于发送LACPDU包的系统MAC地址。不能设为NULL或多播地址。此选项相当于设置 bond 模块的 ad_actor_system 属性。默认值是主机(Actor)的主MAC地址。

FailOverMACPolicy=

此选项仅对 "active-backup" 模式有意义。 相当于设置 bond 模块的 fail_over_mac 属性。 可设为下列值之一: "none"(默认值) 表示在失败切换时,只更改新激活的 slave 的MAC地址,而不更改 bond 的MAC地址。 "active" 表示保持各个 slave 的MAC地址不变,在失败切换时,仅将 bond 的MAC地址修改为新激活的 slave 的MAC地址。 "follow" 表示在失败切换时,不但将新激活的 slave 的MAC地址修改为 bond 的MAC地址,而且将下线的原 slave 的MAC地址修改为新激活的 slave 的原有MAC地址。

ARPValidate=

此选项相当于设置 bond 模块的 arp_validate 属性。 设置是否应该验证接收到的ARP请求与应答正确性(Validation), 以及是否应该仅使用接收到的ARP流量进行连接监控(反对这么做)(Filtering)。 可设为下列值之一: "none" 既不 Validation 也不 Filtering ; "active" 仅对处于活动状态的 slave 执行 Validation ; "backup" 仅对处于备用状态的 slave 执行 Validation ; "all" 对所有 slave 执行 Validation ;

ARPIntervalSec=

设置ARP连接监控的频率(时间间隔),默认单位是毫秒。 此选项相当于设置 bond 模块的 arp_interval 属性。默认值"0"表示禁用ARP连接监控。

ARPIPTargets=

设置当 ARPIntervalSec= 大于零的时候, 用作ARP连接监控目标的IP地址。 要想ARP连接监控正常工作,必须至少设置一个目标IP地址。 此选项相当于设置 bond 模块的 arp_ip_target 属性。 值是一个点分十进制格式表示的IPv4地址。 最多设置16个目标IP地址。 默认值为空。

ARPAllTargets=

此选项仅影响 "active-backup" 模式中 开启了 ARPValidate= 的 slave 设备。 设置有多少个用作ARP连接监控目标的IP地址(ARPIPTargets=)可达的时候,一个 slave 设备才会被认为是处于"Up"状态。 此选项相当于设置 bond 模块的 arp_all_targets 属性。可设为下列值之一: "any", "all"

PrimaryReselectPolicy=

设置重新选择 primary slave 的策略。 此选项的目的在于 防止在 primary slave 与其他 slave 设备之间出现反转。 此选项相当于设置 bond 模块的 primary_reselect 属性。 可设为下列值之一: "always"(默认值), "better", "failure"

ResendIGMP=

发生失败切换事件后,发送多少次IGMP成员报告(membership report)。 此选项相当于设置 bond 模块的 resend_igmp 属性。 发生失败切换事件后会立即发送一次成员报告, 如果此选项大于 1 ,那么随后每隔 200ms 重新发送一次,直到用完所有次数。 取值范围是 0–255 ,默认值是 1 。 0 表示禁止发送IGMP成员报告(membership report)。

PacketsPerSlave=

设置在同一个 slave 设备上发送多少个包之后就切换到下一个 slave 设备。 此选项相当于设置 bond 模块的 packets_per_slave 属性。 取值范围是 0–65535 ,设为 0 表示随机选择 slave 设备。默认值是 1 。 此选项仅对 "balance-rr" 模式有意义。

GratuitousARP=

发生失败切换事件后, 发送多少次端点通知(无故ARP/主动IPv6邻居通告)。 此选项相当于设置 bond 模块的 num_grat_arp/num_unsol_na 属性。 发生失败切换事件后会立即发送一次端点通知, 如果此选项大于 1 ,那么随后每隔 ARPIntervalSec=MIIMonitorSec= 间隔重新发送一次,直到用完所有次数。取值范围是 0–255 ,0 表示禁止发送,默认值是 1 。 此选项仅对 "active-backup" 模式有意义。

AllSlavesActive=

设置应该转发还是丢弃 在不活动端口上接收到的重复帧。 "yes"表示转发。默认值"no"表示丢弃。 通常应该丢弃(也就是设为"no"), 仅在确实知道为什么要转发的时候才需要设为"yes"。 此选项相当于设置 bond 模块的 all_slaves_active 属性。

DynamicTransmitLoadBalancing=

接受一个布尔值。设置是否允许动态打乱流顺序。此选项仅对 "balance-tlb" 模式有意义。 默认值 yes 表示允许打乱流顺序以获得更好的负载均衡效果,但是会导致数据包的顺序被打乱(需要重排)。此选项相当于设置 bond 模块的 tlb_dynamic_lb 属性。

MinLinks=

设置至少有几个 slave 连接已经激活,才能激活上层的 bond 连接。 此选项相当于设置 bond 模块的 min_links 属性。默认值是零。

更多详情,参见 Linux Ethernet Bonding Driver HOWTO

例子

例 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-vti.netdev

[NetDev]
Name=vti-tun
Kind=vti
MTUBytes=1480

[Tunnel]
Local=10.65.223.238
Remote=10.65.223.239

例 11. /etc/systemd/network/25-veth.netdev

[NetDev]
Name=veth-test
Kind=veth

[Peer]
Name=veth-peer

例 12. /etc/systemd/network/25-bond.netdev

[NetDev]
Name=bond1
Kind=bond

[Bond]
Mode=802.3ad
TransmitHashPolicy=layer3+4
MIIMonitorSec=1s
LACPTransmitRate=fast

例 13. /etc/systemd/network/25-dummy.netdev

[NetDev]
Name=dummy-test
Kind=dummy
MACAddress=12:34:56:78:9a:bc

例 14. /etc/systemd/network/25-vrf.netdev

创建一个 Table=42 的 VRF 接口

[NetDev]
Name=vrf-test
Kind=vrf

[VRF]
Table=42

例 15. /etc/systemd/network/25-macvtap.netdev

创建一个 MacVTap 设备

[NetDev]
Name=macvtap-test
Kind=macvtap
      

例 16. /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

参见

systemd(1), systemd-networkd.service(8), systemd.link(5), systemd.network(5)