Skip to content

Latest commit

 

History

History
1243 lines (708 loc) · 44 KB

88.2、systemd-netdev - systemd 虚拟网络设备配置文件.md

File metadata and controls

1243 lines (708 loc) · 44 KB

systemd.netdev

名称

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 类型

可以在 .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] 段选项

仅当 [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] 段选项

[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] 段仅用于 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=

    网桥的优先级。一个介于 065535 之间的整数。更小的数值表示更高的优先级。具有最低优先级的网桥将被选举为根网桥。

  • 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。该值为介于 14094 之间的整型,或使用 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] 段仅用于 vlan 类型的设备,并接受下方键:

  • Id=

    要使用的 VLAN ID。一个介于 04094 的整数。该选项为必需项。

  • 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] 段仅用于 macvlan 类型的设备,并接受下方键:

  • Mode=

    要使用的 MACVLAN 模式。支持的选项有 private vepa bridge passthru

[MACVTAP] 段选项

[MACVTAP] 段仅用于 macvtap 类型的设备,键与 [MACVLAN] 相同。

[IPVLAN] 段选项

[IPVLAN] 段仅用于 ipvlan 类型的设备,并接受下方键:

  • Mode=

    要使用的 IPVLAN 模式。支持的模式为 L2 L3L3S

  • Flags=

    要使用的 IPVLAN flag。支持的选项为 bridge private vepa

[IPVTAP] 段选项

[IPVTAP] 段仅用于 ipvtap 类型的设备,键与 [IPVLAN] 相同。

[VXLAN] 段选项

[VXLAN] 段仅作用于 vxlan 类型的设备,并接受下方键:

  • VNI=

    VXLAN 网络标识符(或 VXLAN 段 ID)。接受一个介于 116777215 的数字。

  • 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=

    指定发出网络包的流量标签。有效值为 01048575

  • IPDoNotFragment=

    允许设置发出网络包的 IPv4 不分段(Do not Fragment(DF))位,或从 IPv4 内部头继承值。
    接受一个布尔值,或 inherit
    若封装协议为 IPv6,则设置为 inherit
    当未设置时,使用内核的默认设置。

[GENEVE] 段选项

[GENEVE] 段仅作用于 geneve 类型的设备,并接受下列键:

  • Id=

    指定要使用的虚拟网络标识符(Virtual Network Identifier(VNI))。介于 016777215。该项为必需项。

  • Remote=

    指定传出网络包的单播目标 IP 地址。

  • TOS=

    指定传出网络包的 TOS 值。介于 1255

  • 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] 段仅作用于 l2tp 类型的设备,并接受下列键:

  • TunnelId=

    指定隧道 ID。所使用的值必须匹配同伴的 PeerTunelID= 的值。是一个介于 14294967295 之间的数。该选项为必需项。

  • PeerTunnelId=

    指定同伴(peer)隧道 ID。该值必须匹配同伴的 TunnelID= 值。是一个介于 14294967295 之间的数。该选项为必需项。

  • Remote=

    指定远程同伴的 IP 地址。该选项为必需项。

  • Local=

    指定本地界面的 IP 地址。接受一个 IP 地址,或特殊的 auto static dynamic
    当设置了一个地址,则本地界面必须具有该地址。
    若设置为 auto,则使用本地界面所具有的一个地址。
    相似的,若设置了 staticdynamic,则使用本地界面的某个静态或动态地址。
    默认为 auto

  • EncapsulationType=

    指定隧道的封装类型。接受 udp 或者 ip

  • UDPSourcePort=

    指定隧道所使用的 UDP 源端口。若选择了 UDP 封装,则该项为必需项。若选择了 IP 封装,则该项被忽略。

  • DestinationPort=

    指定目标端口。若选择了 UDP 封装,则该项为必需项。若选择了 IP 封装,则该项被忽略。

  • UDPChecksum=

    接受一个布尔值。若为真,则开启在 IPv4 上传送的 UDP 网络包的校验。

  • UDP6ZeroChecksumTx=

    接受一个布尔值。若为真,则跳过 IPv6 上传送的 UDP 网络包的校验。

  • UDP6ZeroChecksumRx=

    接受一个布尔值。若为真,则允许接收的 IPv6 UDP 网络包具有 零校验和字段。

[L2TPSession] 段选项

[L2TPSession] 段仅作用于 l2tp 类型的设备,并接受下方键:

  • Name=

    指定会话的名称。该选项为必需项。

  • SessionId=

    指定会话 ID。所使用的值必须匹配同伴的 PeerSessionId= 值。是一个介于 14294967295 之间的数。该选项为必需项。

  • PeerSessionId=

    指定同伴会话 ID。所使用的值必须匹配同伴的 SessionId= 值。是一个介于 14294967295 之间的数。该选项为必需项。

  • Layer2SpecificHeader=

    指定会话的二层特定头部。可以为 nonedefault。默认为 default

[MACsec] 段选项

[MACsec] 段仅作用于 macsec 类型的设备,并接受下列键:

  • Port=

    指定用于 MACsec 传输通道的端口。该端口被用于创建安全通道标识符(secure channel identifier(SCI))。接受一个介于 165535 之间的值。默认为未设置。

  • Encrypt=

    接受布尔值。若为真,则启用加密。默认为未设置。

[MACsecReceiveChannel] 段选项

[MACsecReceiveChannel] 段仅作用于 macsec 类型的设备,并接受下列键:

  • Port=

    指定用于 MACsec 接收通道的端口。该端口被用于创建安全通道标识符(secure channel identifier(SCI))。接受一个介于 165535 之间的值。
    该选项为必选项,且默认情况下未设置。

  • MACAddress=

    指定用于 MACsec 接收通道的 MAC 地址。
    该选项为必选项,且默认情况下未设置。

[MACsecTransmitAssociation] 段选项

[MACsecTransmitAssociation] 段仅作用于 macsec 类型的设备,并接受下列键:

  • PacketNumber=

    指定用于重放(replay)保护和构建初始化向量(以及安全通道标识符[SCI])的网络包的数量。
    接受介于 14294967295 之间的值。默认未设置。

  • KeyId=

    指定密钥的认证(identification)。接受介于 0255 之间的值。该选项为必需项,且默认未设置。

  • Key=

    指定在传送通道中的加密密钥。同样的密钥也需要配置在同伴的所匹配的接收通道上。该选项为必须值,且默认未设置。
    接受一个 128-bit 密钥,该密钥以十六进制字符串编码,例如 dffafc8d7b9a43d5b9a3dfbbf6a30c16

  • KeyFile=

    接受一个指向文件的绝对路径,该文件包含 128-bit 以十六进制字符串编码的密钥,该密钥将被用于传送通道中。若指定了该选项,则忽略 Key=
    注意该文件必须能被用户 systemd-network 读取,所以该文件应该具有 root:systemd-network 所有者,且权限为 0640

  • Activate=

    接受一个布尔值。若启用,则激活安全关联(security association)。默认为未设置。

  • UseForEncoding=

    接受一个布尔值。若启用,则将安全关联用于编码。仅有一个 [MACSecTransmitAssociation] 段可以启用该选项。若启用,则隐含 Activate=yes。默认为未设置。

[MACsecReceiveAssociation] 段选项

[MACsecReceiveAssociation] 段仅作用于 macsec 类型的设备,并接受下列键:

  • Port=, MACAddress=

    [MACsecReceiveChannel] 段中的键。

  • PacketNumber=, KeyId=, Key=, KeyFile=, Activate=

    [MACsecTransmitAssociation] 段中的键。

[Tunnel] 段选项

[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 定值。该值介于 1255 之间。若设置为 0 则该网络包继承 TTL 值。默认的 IPv4 隧道值为:继承。默认的 IPv6 隧道值为 64。

  • DiscoverPathMTU=

    接受布尔值。若为真,则在隧道上启用 路径 MTU 发现(Path MTU Discovery)。

  • IPv6FlowLabel=

    在 IPv6 头部(参见 RFC 6437)配置 20-bit 流标签(参见 RFC 6437),一个节点通过该标签标记一个流的网络包。它仅用于 IPv6 隧道。将流标签置零来表示该网络包未被标记。可配置的值为 00xFFFFF,或设置为 inherit,在这个情况下将使用原始的标签。

  • CopyDSCP=

    接受一个布尔值。若为真,则在 IPv6 隧道网络包封装时,将差分服务代码点(the Differentiated Service Code Point(DSCP))从外部头拷贝至内部头。DSCP 是 IP 网络包的一个字段,其启用了指派给网络流量的服务的不同层级。默认值为 no

  • EncapsulationLimit=

    隧道封装限制(Tunnel Encapsulation Limit)选项指定了有多少层额外的封装可以追加在网络包上。举例来说,一个为零的隧道封装限制选项,意味着携带该选项的网络包在离开该隧道前,不能进入另外一个隧道(参见 TFC 2473)。有效值为 0255,以及 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 索引字段,一个介于 11048575 之间的整数,该数与 ERSPAN 流量的源端口和方向相关联。该字段为必须值。

[FooOverUDP] 段选项

[FooOverUDP] 段仅作用于 fou 类型的设备,并接受下列键:

  • Encapsulation=

    指定用于在 UDP 网络包内存储各种协议的网络包的封装格式。支持下列值:
    FooOverUDP 提供最简单的无修饰的 UDP 封装,它将网络包直接封装至 UDP 负载中。
    GenericUDPEncapsulation 是一个通用的可扩展封装,它允许将任何 IP 协议以及可选数据作为封装的内容。
    更多信息参阅 Generic UDP Encapsulation
    默认为 FooOverUDP

  • Port=

    指定端口号,IP 封包将从该端口到达。注意,到达的网络包的封包将被移除。然后它们将被手动返还至网络栈,并发往真实的目的地。该项为必需项。

  • PeerPort=

    指定同伴端口号。默认为未设置。注意,若设置了同伴端口号,则 Peer= 为必选项。

  • Protocol=

    Protocol= 指定到达 UDP 端口的网络包的协议号。当 Encapsulation=FooOverUDP 时,该字段为必须值,且默认未设置。接受一个 IP 协议名,比如 greipip,以及介于 1255 的整数。当 Encapsulation=GenericUDPEncapsulation 时,该值禁止指定。

  • Peer=

    配置同伴 IP 地址。当同伴地址设置后,PeerPort= 为必需项。

  • Local=

    配置本地 IP 地址。

[Peer] 段选项

[Peer] 段仅作用于 veth 类型的设备,并接受下列键:

  • Name=

    当创建虚拟网络设备时要使用的界面名。该选项为必需项。

  • MACAddress=

    同伴的 MAC 地址,若未设置,则以使用与主界面生成 MAC 地址相同的方式生成。

[VXCAN] 段选项

[VXCAN] 段仅作用于 vxcan 类型的设备,并接受下列键:

  • Peer=

    当创建虚拟网络设备时要使用的同伴界面名。该选项为必需项。

[Tun] 段选项

[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] 段仅作用于 tap 类型的设备,并接受与 [Tun] 段相同的键。

[WireGuard] 段选项

[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 端口。接受介于 165535 之间的值,或者 auto。若指定了 auto,端口将基于界面名自动生成。默认为 auto

  • FirewallMark=

    设置从该界面发出的 WireGuard 网络包的防火墙掩码(mask)。接受一个介于 14294967295 之间的数。

[WireGuardPeer] 段选项

[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=

    设置一个秒间隔,介于 165535 之间,发送认证过的空网络包应该多频繁地发送给同伴,来保证防火墙将该链接标记为 stateful,或使 NAT 映射持续有效。举例来说,若该界面很少发送网络包,但可能会在任何时候接收来自同伴地包,且它在 NAT 之后,界面可能可以设置 25 秒地间隔来保持连接。若设置为 0off,禁用该选项。默认情况或未设置,该选项为 off。大多数用户并不需要它。

[Bond] 段选项

[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=

    指定绑定驱动器向每个从交换发送学习网络包所间隔的秒数。可用的范围为 10x7fffffff;默认值为 1。该选项仅对 balance-tlb 以及 balance-alb 模式有效。

  • AdSelect=

    指定要使用的 802.3ad 聚合选择逻辑(aggregation selection logic)。可能的值为 stable bandwidth count

  • AdActorSystemPriority=

    指定 802.3ad 参与者系统优先级(actor system priority)。范围 165535

  • AdUserPortKey=

    指定 802.3ad 用户定义的端口部分(user defined portion of the port key)。范围 01023

  • 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 监视认为是从设备在线。该选项仅影响从设备开启了 ARPValidateactive-backup 模式。可能值为 any 或者 all

  • PrimaryReselectPolicy=

    指定主要从设备的再次选择策略。它影响了当活动从设备离线,或者主要从设备恢复时,主要从设备是如何被选出,并成为活动从设备。这个选项用于防止主要从设备和其它从设备之间的翻转。可能的值为 always better failure

  • ResendIGMP=

    指定在一个故障转移事件之后,要提交多少个 IGMP membership report。一个 membership report 将在故障转移之后立刻发出,随后的网络包将间隔 200ms 发出。有效值范围为 0255。默认为 1。值为 0 阻止故障转移事件后发送 IGMP membership report。

  • PacketsPerSlave=

    指定在移动至下一个从设备之前,有多少网络包从该从设备中发出。当设置为 0 时,则随机选择从设备。有效值范围为 065535。默认为 1。该选项仅影响 balance-rr 模式

  • GratuitousARP=

    指定在故障转移时间后,要提交多少同伴通知(gratuitous ARPs 以及 unsolicited IPv6 Neighbor Advertisements)。一旦链路在新的从设备上上线,一个同伴通知即发送给绑定设备以及每个 VLAN 子设备。若这个值大于 1,则在每个链路监视间隔(ARPIntervalSecMIIMonitorSec 随便一个激活时)都重复。有效值范围 0255。默认值为 1。该选项仅作用于 active-backup 模式。

  • AllSlavesActive=

    接受一个布尔值。若为假,则丢弃(从非激活端口接收的)重复帧,若为真则分发。通常情况下,绑定会丢弃(从非激活端口接收的)重复帧,这对大多数用户来说都是需要的。但有些时候也需要允许重复帧的分发。默认值为假(丢弃从非激活端口接收的重复帧)。

  • DynamicTransmitLoadBalancing=

    接受一个布尔值。指定是否启用 dynamic shuffling of flows。仅作用于 balance-tlb 模式。默认为未设置。

  • MinLinks=

    指定在断言承载者之前,最小的活动链路数量。

更多信息参阅 Linux Ethernet Bonding Driver HOWTO

[Xfrm] 段选项

[Xfrm] 接受下列键:

  • InterfaceId=

    设置 xfrm 界面的 ID/key,其与一个 SA/policy 相关联。可以为十进制或十六进制数,有效值范围 00xffffffff,默认值为 0

  • Independent=

    接受一个布尔值。若设置为 no,xfrm 界面应该具有一个底层设备,该设备可以被用于硬件负载转移。默认值为 no,参见 systemd.network(5) 了解如何配置底层设备。

更多信息参阅 Virtual xfrm interfaces

[VRF] 段选项

[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)