systemd.network 中文手册

译者:金步国


版权声明

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

其他作品

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

联系方式

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


手册索引 . 指令索引systemd-235

名称

systemd.network — 网络配置

大纲

network.network

描述

网络的配置操作实际由 systemd-networkd.service(8) 具体执行。

注意,网络设备的Network文件必须以 .network 作为后缀名,否则将被忽略。 一旦与Network文件匹配的网卡出现,对应的Network文件就会立即生效。

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

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

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

注意,如果某个网络接口既没有配置静态IPv6地址、也没有启用DHCPv6或IPv6LL的话, 将会被视为禁用IPv6支持。同时,systemd 将会自动向 /proc/sys/net/ipv6/conf/ifname/disable_ipv6 中写入"1",以彻底禁用此接口上的IPv6支持。

[Match] 小节选项

Network文件中的 "[Match]" 小节决定了应该匹配哪个网卡, 而 "[Network]" 小节则决定了应该怎样配置匹配到的网卡。 如果有多个Network文件匹配同一个网卡, 那么以第一个匹配的Network文件为准(按Network文件名的字典顺序)。

如果 "[Match]" 小节为空 或者其中的每一项都与某个网卡匹配,那么视为该Network文件与该网卡匹配。 所有可用于匹配的选项如下:

MACAddress=

匹配网卡的物理地址(以冒号与16进制数表示的MAC地址)。 例如 01:23:45:67:89:ab

Path=

匹配网卡的 "ID_PATH" 属性值(网卡的总线路径)。 接收一个空格分隔的匹配模式列表(使用shell风格的通配符)。 可以在列表前加上"!"前缀表示反转, 也就是当网卡的 "ID_PATH" 不与列表中的任何一项匹配时, 该网卡将被视为匹配成功。

Driver=

匹配网卡的 "DRIVER" 属性值(网卡的驱动名称)。 接收一个空格分隔的匹配模式列表(使用shell风格的通配符)。 注意,如果网卡的 "DRIVER" 属性不存在, 那么将使用 "ethtool -i" 命令中输出的驱动名称。 可以在列表前加上"!"前缀表示反转。

Type=

匹配网卡的 "DEVTYPE" 属性值(网卡的设备类型)。 接收一个空格分隔的匹配模式列表(使用shell风格的通配符)。 可以在列表前加上"!"前缀表示反转。

Name=

匹配网卡的 "INTERFACE" 属性值(网卡的内核名称)。 接收一个空格分隔的匹配模式列表(使用shell风格的通配符)。 可以在列表前加上"!"前缀表示反转。

Host=

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

Virtualization=

检查是否运行于特定的虚拟环境中, 参见 systemd.unit(5) 中的 "ConditionVirtualization=" 选项。

KernelCommandLine=

检查是否设置了(或者以"!"开头表示未设置)特定的内核引导选项, 参见 systemd.unit(5) 中的 "ConditionKernelCommandLine=" 选项。

Architecture=

检查是否运行于特定的硬件平台, 参见 systemd.unit(5) 中的 "ConditionArchitecture=" 选项。

[Link] 小节选项

可在 "[Link]" 小节中使用如下选项对网卡进行设置:

MACAddress=

设置网卡的物理地址(MAC地址)

MTUBytes=

设置网卡的最大传输单元(MTU)。 可以使用以1024为基准的 K, M, G 后缀。

注意,如果为网卡开启了IPv6支持, 那么设置任何小于 1280 的值都将被自动修正为 1280(IPv6的MTU最小值)。

ARP=

是否开启 ARP(Address Resolution Protocol) 支持。 默认未设置,表示使用内核的默认值。

当在单个底层物理网卡上创建多个虚拟 MACVLAN 或 VLAN 设备时,禁用ARP就非常有用了。 因为此时的底层物理网卡仅用于汇聚流量,而并不参与任何网络操作。

Unmanaged=

接受一个布尔值。默认值为 "no" 。 若设为 "yes" 则表示不使用 systemd 管理此设备, 在效果上相当于没有匹配到此设备。

当你希望使用 systemd 之外的其他程序来管理网络设备时,可以使用此选项。

[Network] 小节选项

可在 "[Network]" 小节中使用如下选项对网卡进行设置:

Description=

对网卡的描述

DHCP=

DHCPv4/DHCPv6 客户端支持。可以设为 "yes", "no"(默认值), "ipv4", "ipv6" 之一。

注意,当 "IPv6AcceptRA=yes" 时(见下文), 无论此选项如何设置,DHCPv6 都将被无条件的启用。 若明确开启了 DHCPv6 支持, 那么无论在此连接上是否存在路由器、也无论路由器传递了什么样的标记(flag), 都会无条件的启动 DHCPv6 客户端。

注意,默认情况下, DHCP服务器分配的域名并不用于名字解析。 参见下面的 UseDomains= 选项。

参见下面的 "[DHCP]" 小节, 以了解更多DHCP客户端配置选项。

DHCPServer=

DHCPv4 服务器支持。 默认值为 "no" 。 进一步的设置参见下面的 "[DHCPServer]" 小节。

LinkLocalAddressing=

链路本地地址自动配置。可设为 "yes", "no", "ipv4", "ipv6" 之一。 默认值为 "ipv6"

IPv4LLRoute=

为 non-IPv4LL 主机与 IPv4LL-only 主机之间的通信提供路由支持。默认值是 no 。 [译者注]"IPv4LL"(IPv4 Link-Local)又称为"ZEROCONF", 可用于在没有DHCP服务器的网络中自动配置IP地址。

IPv6Token=

一个前64位为空的IPv6地址。 用于设置该连接的 SLAAC IPv6 地址的64位接口部分。 注意,该值仅用于 SLAAC 而不是用于 DHCPv6 (即使 IPv6 Router Advertisement 明确要求 DHCP)。 默认值为自动生成。

LLMNR=

默认值 yes 表示支持 本地链路多播名称解析(Link-Local Multicast Name Resolution),而 no 则表示关闭。 也可以设为 "resolve" 表示仅支持解析,但不支持主机注册与宣布。 systemd-resolved.service(8) 会读取此选项的值。 [译者注]"LLMNR"(mDNS)可用于在没有DNS的局域网内自动发现(通过组播)本地网段上的主机。

MulticastDNS=

设为 yes 表示支持 组播DNS(Multicast DNS),而默认值 no 则表示关闭。 也可以设为 "resolve" 表示仅支持解析,但不支持主机或服务注册与宣布。 systemd-resolved.service(8) 会读取此选项的值。 [译者注]"mDNS"(multicast DNS)可用于在没有DNS的局域网内自动发现(通过组播)本地网段上的主机/服务(例如FTP)。

DNSSEC=

设为 yes 表示支持 DNSSEC , 而默认值 no 则表示关闭。 也可以设为 "allow-downgrade" 表示允许降级到普通的DNS协议, 以兼容不具备DNSSEC的网络环境。 systemd-resolved.service(8) 会读取此选项的值。 此选项实际上是针对每个网口覆盖了 resolved.conf(5) 中的全局 DNSSEC= 设置。

DNSSECNegativeTrustAnchors=

可设为一个空格分隔的域名列表。 当通过该网口的DNS服务器查询列表中的域名(含子域名)时, 无需验证应答的正确性。 常用于禁用某些私有域名的DNSSEC验证。 因为这些私有域名无法在互联网DNS服务器上进行验证。 默认值为空。 systemd-resolved.service(8) 会读取此选项的值。

LLDP=

LLDP是一个二层协议,使得接入网络的一台设备可以将其主要的能力、管理地址、设备标识、接口标识等信息 发送给接入同一个局域网的其他设备。通常只有专业的路由器才会支持LLDP协议。 若设为 yes 则表示接收所有以太网LLDP(链路层发现协议)包,并且维护一个记录了所有LLDP邻居的数据库。 而 no 则表示彻底禁用LLDP支持。 默认值 "routers-only" 表示仅收集各种路由器LLDP数据, 而忽略所有其他设备的LLDP数据(例如"电话"之类)。 可以用 networkctl(1) 查询所有收集到的邻居数据。LLDP仅可用于以太网。 下面的 EmitLLDP= 可用于接收本机发出的LLDP包。

EmitLLDP=

如何发送以太网链路层发现协议(LLDP)数据包。可以设为一个布尔值或者特殊值 "nearest-bridge", "non-tpmr-bridge", "customer-bridge" 之一。 默认值 no 表示不发送任何LLDP数据包。 no 之外的其他值都表示周期性的发送包含本机配置信息的LLDP数据包。 LLDP数据包中包含了本机的如下信息:主机名(hostname)、machine ID (参见 machine-id(5))、 本地网络接口的名称、 pretty hostname (参见 machine-info(5))。 LLDP仅可用于以太网链路。 由于LLDP数据包中包含了精确标识主机的敏感信息,所以切勿在不可信的网络环境中使用。 开启此选项之后,其他系统就可以通过本机发送的LLDP数据包,辨别其所连接的本机网络接口究竟是哪一个。 三个特殊值控制着如何传输LLDP数据包: "nearest-bridge" 表示仅允许传输到最近连接的桥,这是最严苛的传输方式; "non-tpmr-bridge" 表示仅允许跨越 Two-Port MAC 传输,但是不允许传输到另外的桥; "customer-bridge" 表示一直传输到到达一个"customer bridge"(详见 IEEE 802.1AB-2009)。 设为 yes 与设为 "nearest-bridge" 等价。 参见上文的 LLDP= 选项以了解更多有关LLDP的含义。

BindCarrier=

可设为一个网口列表,用于控制当前网口的行为: (1)当列表中的所有网口都处于停用状态(down)的时候,该网口也会被停用。 (2)当列表中的某个网口被启用的时候,该网口也会被启用。

Address=

一个符合 inet_pton(3) 格式的 静态IPv4或IPv6地址及掩码位数(用 "/" 字符分隔)。 当 [Address] 小节(见下文)中只含有 Address= 时, 此选项相当于是 [Address] 小节的速记。 可以多次使用此选项以指定多个IP地址。

如果设置的地址是"0.0.0.0"(IPv4)或"[::]"(IPv6), 那么将首先检查所有当前已配置的网络接口以及所有网络配置文件, 然后按照所需地址段的大小, 自动从系统的可用地址池中分配一个新地址段, 并确保不发生任何地址段冲突。 系统默认的IPv4可用地址池如下: 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 ; 系统默认的IPv6可用地址池如下:fc00::/7 。 此选项主要用于管理大量动态创建的、 拥有相同网络配置的、需要自动分配地址段的网络接口。

Gateway=

一个符合 inet_pton(3) 格式的网关地址。可以多次使用此选项以指定多个网关。 当 [Route] 小节(见下文)中只含有 Gateway= 时,此选项相当于是 [Route] 小节的速记。

DNS=

一个符合 inet_pton(3) 格式的DNS服务器地址。可以多次使用此选项以指定多个DNS服务器。 systemd-resolved.service(8) 会读取此选项的值。

Domains=

接受一个应该使用此连接的DNS服务器解析的域名列表, 列表中的每一项都必须是一个域名(可以带有可选的 "~" 前缀)。 带有 "~" 前缀的域名被称为"路由专用域名",而不带前缀的域名则被称为"搜索域名"。 在将单标签域名(不含"."的主机名)扩展为FQDN(全限定域名)时,将会首先把"搜索域名"用作搜索后缀。 当在此连接上解析一个单标签域名时,列表中的每一个搜索域名都将被依次添加为后缀, 以拼接成一个可用于解析的全限定域名, 直到某一个能够被解析成功为止。

列表中的域名(包括搜索域名与路由专用域名)都可以用于路由DNS查询请求: 对于那些后缀位于此列表中的主机名(如果存在"搜索域名"的话,那么还包括单标签域名)的DNS查询请求,将会被路由到此连接的DNS服务器上。 对于同时承载多个域名的主机来说,如果希望在不同的网络接口上拥有不同的私有DNS区域, 那么可以使用此处的域名路由逻辑。

特殊值 "~." (前面的波浪号表示这是一个"路由专用域名",后面的点表示根域名(也就是所有域名的后缀))拥有特殊的含义, 它表示将所有未能匹配其他域名路由规则的DNS请求,路由到此连接的DNS服务器上。 利用这个特殊值,可以设置一组默认的DNS服务器。

systemd-resolved.service(8) 会读取此选项的值。 "搜索域名"对应于 resolv.conf(5) 中的 domainsearch 项。 在传统的 glibc API 中无法找到与此处描述的域名路由逻辑对应的功能。

NTP=

一个时间服务器(NTP)地址。可以多次使用此选项以指定多个对时服务器。 systemd-timesyncd.service(8) 会读取此选项的值。

IPForward=

控制IP转发功能(将一个网口进入的IP包根据路由表转发到另一个网口): 默认值 "no" 表示关闭转发功能; "yes" 表示开启转发功能; "ipv4" 表示仅开启IPv4转发; "ipv6" 表示仅开启IPv6转发; 此选项实际上是设置了 net.ipv4.ip_forward, net.ipv6.conf.all.forwarding 两个 sysctl 项的值。

注意:只有默认值 "no" 是局部设置,其他三个值都是全局设置。 具体的含义是指: 即使只有一个网络接口开启了IP转发功能("yes" 或 "ipv4" 或 "ipv6"),也表示在全局开启IP转发功能, 而且即便随后再明确的将此选项设为 "no" 也无济于事,IP转发功能依然会在全局范围内保持开启。 换句话说,IP转发功能一旦开启便是全局开启,并且不允许随后再关闭,即使针对单个网络接口关闭也不行。

如果只想在两个特定的网络接口之间进行转发,请勿使用此选项, 而是应该使用防火墙规则(iptables)。

IPMasquerade=

若设为 "yes" 则开启IP地址伪装功能。 它与SNAT(源地址转换技术)的不同之处在于能够自动获取连接的当前ip地址来做转换。 若设为 "yes" 则隐含了 IPForward=ipv4 设置。 默认值是 "no"

IPv6PrivacyExtensions=

配置IPv6无状态临时地址(RFC 4941) 与IPv6隐私扩展。 若设为 "yes" 则表示开启IPv6隐私扩展并使用临时的私有地址取代公共地址。 若设为 "prefer-public" 则表示开启IPv6隐私扩展(若失败则关闭IPv6隐私扩展), 但使用公共地址。 若设为 "kernel" 则表示不改变内核的现有设置。 默认值 "no" 表示彻底关闭。

IPv6AcceptRA=

是否在此连接上接收IPv6路由器通告消息(Router Advertisement)(IPv6的邻居发现协议的一部分)。 设为 yes 表示接收,设为 no 表示不接收(与本地转发的状态无关)。若未明确设置此选项,则使用内核的默认值: 当本地转发功能被禁用时,此选项的值为"yes"(接收路由器通告);当本地转发功能被开启时,此选项的值为"no"(不接收路由器通告)。 如果此选项的值为"yes"(接收路由器通告),那么 DHCPv6 客户端将在两种情况下被启动: (1)传递了相关标志(flag);(2)在此连接上未发现路由器。

若想进一步详细配置 IPv6 RA 支持,可以参见下面的 "[IPv6AcceptRA]" 小节。

参见内核的 ip-sysctl.txt 文档, 并阅读对 "accept_ra" 属性的解释,不过要注意的是将此选项设为 1 相当于 将 "accept_ra" 设为 2

IPv6DuplicateAddressDetection=

设置要发送的 IPv6 DAD(Duplicate Address Detection) 提示数量。此选项没有默认值。

IPv6HopLimit=

设置 IPv6 的"Hop Limit"(类似于 IPv4 TTL)值。 每经过一个路由器,该值都会减一,当减到零时,此包将被丢弃。 此选项没有默认值。

IPv4ProxyARP=

接受一个布尔值, 表示是否为 IPv4 开启"代理ARP"(RFC1027)支持。 "代理ARP"就是通过一个主机(通常是路由器)来作为指定的设备对其他设备的ARP请求作出应答。 一般用于没有配置默认网关和路由策略的网络中。 此选项没有默认值。

IPv6ProxyNDP=

接受一个布尔值,表示是否支持代理邻居发现协议(Proxy Neighbor Discovery Protocol)。 如果相互通信的两个端点并不直接相连,但是互相又都期望彼此位于同一个直接相连物理连接上时, 可以使用代理邻居发现协议(Proxy Neighbor Discovery Protocol), 将双方的IPv6地址都映射到"NDP代理"的MAC地址,让"NDP代理"转发两个端点之间的流量, 从而使相互通信的双方看起来就像是在同一个物理连接上直接通信一样。 与 IPv4 的 proxy ARP 技术不同之处在于 IPv6 的NDP代理不是全局开启的, 它仅为"IPv6 neighbor proxy table"中的地址发送邻居宣告消息。 可以使用 ip -6 neighbour show proxy 命令显示"IPv6 neighbor proxy table"。 systemd-networkd 将会根据此选项的开关,来控制该接口的 proxy_ndp 开关。 此选项没有默认值。

IPv6ProxyNDPAddress=

用于代理邻居宣告(Neighbor Advertisement)消息的 IPv6 地址(NDP代理)。 此选项没有默认值。可以多次使用此选项以设置多个代理。对于每个已配置的接口, systemd-networkd 将会把此处设置的代理添加到内核的 IPv6 neighbor proxy table 中。 虽然设置此选项相当于隐含的设置了 IPv6ProxyNDP=yes , 但是如果明确的设置了 IPv6ProxyNDP=no ,那么此选项将被忽略。

IPv6PrefixDelegation=

是否允许在此连接上发送IPv6路由器通告消息(Router Advertisement)(IPv6的邻居发现协议的一部分)。 默认值为 "no" 。参见 "[IPv6PrefixDelegation]" 与 "[IPv6Prefix]" 小节以了解更多配置选项。

Bridge=

将该连接添加到指定名称的Bridge(网桥)中。参见 systemd.netdev(5) 手册。

Bond=

将该连接添加到指定名称的Bond(多网卡绑定)中。参见 systemd.netdev(5) 手册。

VRF=

将该连接添加到指定名称的VRF(VPN路由与转发表)中。参见 systemd.netdev(5) 手册。

VLAN=

要在此连接上创建的VLAN(虚拟局域网)名称。参见 systemd.netdev(5) 手册。 可以多次使用此选项。

MACVLAN=

要在此连接上创建的MACVLAN(基于MAC地址划分的虚拟局域网)名称。参见 systemd.netdev(5) 手册。 可以多次使用此选项。

VXLAN=

要在此连接上创建的VXLAN(虚拟可扩展局域网)名称。参见 systemd.netdev(5) 手册。 可以多次使用此选项。

Tunnel=

要在此连接上创建的Tunnel(隧道)名称。参见 systemd.netdev(5) 手册。 可以多次使用此选项。

ActiveSlave=

接受一个布尔值,设为 yes 表示该设备是等待激活的 slave 设备(必须处于 up 状态)。 此选项仅适用于 "active-backup", "balance-alb", "balance-tlb" 模式。默认值为 no 。 此选项在效果上相当于设置 bond 模块的 active_slave 属性。

PrimarySlave=

接受一个布尔值,设为 yes 表示该设备是首选的 slave 设备, 也就是一旦该设备可用,就立即将其激活, 并且仅在该设备确实已经掉线的情况下才会使用其他 slave 设备。 在希望尽可能优先使用某个 slave 的场合(比如某个 slave 的带宽更高),可以使用此选项。 此选项仅适用于 "active-backup", "balance-alb", "balance-tlb" 模式。默认值为 no 。 此选项在效果上相当于设置 bond 模块的 primary 属性。

ConfigureWithoutCarrier=

接受一个布尔值,设为 yes 表示即使没有实际的载体,也允许 networkd 配置该连接。 默认值为 no 。

[Address] 小节选项

可以使用多个 "[Address]" 小节来配置多个IP地址。 可在 "[Address]" 小节中使用的选项如下:

Address=

含义与 "[Network]" 小节中同名选项相同。 这是一个必须设置的选项。

Peer=

一个用于点对点网络中的IP地址, 格式与 "Address" 相同。

Broadcast=

一个符合 inet_pton(3) 格式的广播地址,仅用于IPv4连接。 若未设置,则自动从 "Address" 中提取。

Label=

一个地址标签

PreferredLifetime=

设置IP地址的默认有效期。 默认值 "forever"/"infinity" 表示"永不过期",也就是本小节所设置的IP地址永远有效。 设为 "0" 表示本小节所设置的IP地址"立即过期", 除非被明确要求,否则不会被使用。 这种IP地址仅用于某些需要明确使用该地址的特殊应用程序。

Scope=

IP地址的作用域。可设为 0~255 之间的整数或特殊值 "global"(可用于任何地方), "link"(仅用于局域网), "host"(仅限于主机内通信) 之一。 默认值是 "global" 。

HomeAddress=

接受一个布尔值。设为 yes 表示将该地址视为 RFC 6275 中定义的"home address"。 仅适用于 IPv6 。默认值是 no

DuplicateAddressDetection=

接受一个布尔值。设为 yes 表示在添加该地址时执行 RFC 4862 中描述的重复地址检测动作。 仅适用于 IPv6 。默认值是 no

ManageTemporaryAddress=

接受一个布尔值。设为 yes 表示内核将按照 RFC 3041 隐私扩展规范,管理根据 Address= 的值作为模版而创建的临时地址。 要想让此设置有效,必须使用 sysctl 将 use_tempaddr 属性设为大于零的值。 给定地址的前缀长度必须是 64 。 开启此选项之后,就像激活了无状态自动配置一样,将允许在手动配置的网络上使用隐私扩展。 仅适用于 IPv6 。默认值是 no

PrefixRoute=

接受一个布尔值。 当添加或修改一个 IPv6 地址时,用户空间程序需要一个禁止添加前缀路由的指示。 这与例如 IFA_F_MANAGERTEMPADDR 等标记一起使用时相关,此时用户空间程序会创建根据 autoconf 生成的地址, 但是取决于不同的环节,有可能不应该为此前缀添加路由。默认值是 no

AutoJoin=

接受一个布尔值。因为交换机不会复制不为多播地址报告IGMP的端口上的多播包, 所以如果有一个能够感知IGMP的以太网交换机, 那么将无法通过 ip maddr 命令在以太网层次上加入到多播组中去。 通过 ip link add vxlan 命令创建的 vxlan 设备或者通过 systemd-networkd 创建的 vxlan 虚拟网络设备, 都开启了必要的选项以允许它们加入到多播组中去。 通过使用 "autojoin" 选项扩展 ip maddr 命令, 可以让 openvswitch (OVS) vxlan 获得类似的功能, 同时仍然保留其他需要接受多播流量的隧道机制。 默认值是 "no"

[IPv6AddressLabel] 小节选项

IPv6地址标签用于地址选择(参见 RFC 3484)。 内核仅存储标签自身,而标签的优先级则由用户空间程序管理。 可以使用多个 "[IPv6AddressLabel]" 小节来配置多个IPv6地址标签。 可在 "[IPv6AddressLabel]" 小节中使用的选项如下:

Label=

用于前缀(一个无符号整数)的标签,必须设为 0 到 4294967294 之间的一个整数。 0xffffffff 是预留值,禁止使用。这是一个必须设置的选项。

Prefix=

IPv6前缀是指一个带有前缀长度的地址(以 "/" 字符分隔)。 这是一个必须设置的选项。

[RoutingPolicyRule] 小节选项

可以使用多个 "[RoutingPolicyRule]" 小节来配置多个路由策略。 可在 "[RoutingPolicyRule]" 小节中使用的选项如下:

TypeOfService=

指定要匹配的服务类型。可设为一个 0~255 之间的整数。

From=

指定要匹配的源地址前缀。可以加上"/前缀长度"后缀。

To=

指定要匹配的目的地址前缀。可以加上"/前缀长度"后缀。

FirewallMark=

指定要匹配的 iptables 防火墙标签值(一个介于 1~4294967295 之间的整数)

Table=

指定在规则选择器匹配成功时,要查找的路由表ID(一个介于 1~4294967295 之间的整数)。

Priority=

指定该规则的优先级,必须设为一个无符号整数。 数值越小优先级越高,也就是多条规则按照各自优先级数值从小到大的顺序处理。

[Route] 小节选项

可以使用多个 "[Route]" 小节来配置多个路由。 可在 "[Route]" 小节中使用的选项如下:

Gateway=

含义与 "[Network]" 中的同名选项相同。

GatewayOnlink=

接受一个布尔值。默认值为 "no" 。 设为 yes 表示要求内核不必检查本小节设置的网关是否直接可达, 也就是内核不必检查本小节所设置的网关是否确实连接到了本地网络上。 这样,在向内核的路由表插入路由记录时,可以阻止内核抱怨"路由不可达"的错误。

Destination=

该路由的目的地址前缀,可以带有"/前缀长度"后缀, 如果省略了此后缀,则视为一个全长度的主机路由。

Source=

该路由的源地址前缀,可以带有"/前缀长度"后缀, 如果省略了此后缀,则视为一个全长度的主机路由。

Metric=

该路由的跃点数(一个正整数)

IPv6Preference=

为路由发现消息(Router Discovery messages)设置路由优先级(参见 RFC4191)。 可设为如下值: "low" 表示最低优先级、 "medium" 表示默认优先级、 "high" 表示最高优先级。

Scope=

该路由的适用范围: "global", "link", "host" 。 默认值为 "global"

PreferredSource=

该路由的首选源地址,必须符合 inet_pton(3) 格式。

Table=num

该路由表的标识符(可设为 1~4294967295 之间的整数, 0 表示不设置标识符)。 可以通过 ip route show table num 命令查看此路由表的内容。

Protocol=

设置路由的协议标识符。可设为 0 到 255 之间的整数,或者特殊值 "kernel", "boot", "static" 之一。 默认值为 "static"

Type=

设置路由的类型。可设为下列值之一: "unicast" 表示描述到目的地址的真实路径、 "blackhole" 表示直接悄无声息的丢弃数据包、 "unreachable" 表示直接丢弃数据包并返回给发送者一个表示"主机不可达"的ICMP消息、 "prohibit" 表示直接丢弃数据包并返回给发送者一个表示"通信被禁止"的ICMP消息。 默认值是 "unicast" 。

[DHCP] 小节选项

"[DHCP]" 小节用于配置 DHCPv4/DHCP6 客户端。 仅在 [Network] 小节中的 DHCP= 选项已开启的情况下有意义。

UseDNS=

默认值 yes 表示 从DHCP服务器接收DNS服务器的设置, 同时无视任何本地的静态DNS配置。

这相当于 resolv.conf(5)nameserver 的作用。

UseNTP=

默认值 yes 表示 从DHCP服务器接收NTP服务器的设置(被 systemd-timesyncd 使用), 同时无视任何本地的静态NTP配置。

UseMTU=

若设为 yes 则表示 从DHCP服务器接收MTU(最大传输单元)的设置。 默认值是 no 。

Anonymize=

接受一个布尔值。设为 yes 表示按照 RFC 7844 规范向 DHCP 服务器发送选项, 也就是不再发送例如主机名之类暴露用户身份的信息,以实现匿名的网络访问。 默认值是 no 。

此选项应该仅在 MACAddressPolicy=random 的情况下才可以设为 yes 。 参见 systemd.link(5) 手册。

注意,当此选项被设为 yes 之后, 下列选项将被忽略: SendHostname=, ClientIdentifier=, UseRoutes=, SendHostname=, UseMTU=, VendorClassIdentifier=, UseTimezone=

SendHostname=

默认值 yes 表示 将本机的主机名(hostname)发送给DHCP服务器。

UseHostname=

默认值 yes 表示 将从DHCP服务器接收到的主机名(hostname)设置为系统的临时主机名。

Hostname=

如果设置了此值,那么将把此处设置的值作为主机名(hostname)发送给DHCP服务器, 而不是本机真实的主机名。

UseDomains=

可设为 yes, no, "route" 之一。 yes 表示将从DHCP服务器接收到的域名用于此连接的DNS搜索域。 在效果上与 Domains= 中不带 "~" 前缀的值类似。 "route" 表示仅将从DHCP服务器接收到的域名用于路由DNS查询(而不用于搜索), 在效果上与 Domains= 中带有 "~" 前缀的值类似。 默认值为 no 。

建议仅在可信任网络环境中才能将此选项设为 yes 。 因为它会影响到所有主机名的解析,特别是单标签域名(不含"."的主机名)的解析。 一般来说,仅设置"路由专用域名"而不设置"搜索域名"是安全的, 因为这样做不会影响到单标签域名(不含"."的主机名)的解析。

当设为 yes 时,此选项相当于 resolv.conf(5)domain 的作用。

UseRoutes=

默认值 yes 表示从DHCP服务器请求静态路由,并将DHCP服务器返回的结果添加到本机的路由表中, 同时将跃点数设为 1024 ,此外,还会根据路由目的地址以及网关的不同,将 scope 值设为 "global", "link", "host" 之一。 如果目的地址就在本机(例如 127.x.x.x 或者本地连接自身的地址),那么 scope 值将被设为 "host" , 否则如果网关不存在(也就是直接路由),那么 scope 值将被设为 "link" 。 对于其他情况, scope 值将被设为默认的 "global" 。

UseTimezone=

若设为 yes 则表示将从DHCP服务器接收到的时区用作本机的时区。 默认值是 "no"

CriticalConnection=

若设为 yes 则表示 即使所获得的IP地址租约已经过期,也不归还,依然继续使用。 这种做法是与DHCP协议相违背的, 但在某些场合却是最佳的选择(例如根文件系统依赖于此连接)。 默认值为 no

ClientIdentifier=

使用什么样的 DHCPv4 客户端标识符: "mac" 表示连接的MAC地址; "duid"(默认值) 表示一个符合RFC4361规范的客户端ID

VendorClassIdentifier=

标识厂商类型与配置的厂商类标识符(DHCP Option 60), 这是一个DHCP可选项。

DUIDType=

为此连接设置一个专用的 DUIDType 以覆盖全局默认值。参见 networkd.conf(5) 以了解可用值。

DUIDRawData=

为此连接设置一个专用的 DUIDRawData 以覆盖全局默认值。参见 networkd.conf(5) 以了解可用值。

IAID=

为此连接设置一个 DHCP IAID(Identity Association Identifier) ,一个 32-bit 无符号整数。

RequestBroadcast=

要求DHCP服务器在完成配置IP地址之前使用广播消息。 对于不能接收原始包的网卡, 或者在配置IP地址之前不能接收任何包的网卡来说,必须开启此选项。 另一方面,对于广播包被屏蔽的网络来说,则必须关闭此选项。

RouteMetric=

指定由DHCP分配的路由的跃点数(一个正整数)。

RouteTable=num

DHCP路由表标识符(一个 1 到 4294967295 之间的整数, 0 表示未设置)。 可以使用 ip route show table num 查看路由表内容。

除非已经明确为此选项设置了一个正整数, 否则当与 VRF= 一起使用时,将会使用VRF的路由表。

ListenPort=

设置DHCP客户端的监听端口(客户端默认在UDP的68端口监听)。

[IPv6AcceptRA] 小节选项

"[IPv6AcceptRA]" 用于配置IPv6路由器通告(Router Advertisement)客户端。 仅在 [Network] 小节中的 IPv6AcceptRA= 选项已开启的情况下有意义。

UseDNS=

默认值 yes 表示从IPv6路由器通告消息中接收DNS服务器的设置, 同时无视任何本地的静态DNS配置。

这相当于 resolv.conf(5)nameserver 的作用。

UseDomains=

可设为 yes, no, "route" 之一。 yes 表示将从IPv6路由器通告消息中接收到的域名用于此连接的DNS搜索域。 在效果上与 Domains= 中不带 "~" 前缀的值类似。 "route" 表示仅将从IPv6路由器通告消息中接收到的域名用于路由DNS查询(而不用于搜索), 在效果上与 Domains= 中带有 "~" 前缀的值类似。 默认值为 no

建议仅在可信任网络环境中才能将此选项设为 yes 。 因为它会影响到所有主机名的解析,特别是单标签域名(不含"."的主机名)的解析。 一般来说,仅设置"路由专用域名"而不设置"搜索域名"是安全的, 因为这样做不会影响到单标签域名(不含"."的主机名)的解析。

当设为 yes 时,此选项相当于 resolv.conf(5)nameserver 的作用。

RouteTable=num

在路由通告中接收到的路由表编号(一个 1 到 4294967295 之间的整数, 0 表示未设置)。 可以使用 ip route show table num 命令显示表内容。

[DHCPServer] 小节选项

"[DHCPServer]" 小节用于配置 DHCPv4 服务端。 仅在 [Network] 小节中的 DHCPServer= 选项已开启的情况下有意义。

PoolOffset=, PoolSize=

配置可用于动态分配的IP地址池。 地址池必须与DHCP服务器的IP地址位于同一子网内, 并且不得包含子网地址与广播地址。 PoolOffset= 用于设置地址池的起点,用相对于子网起点的偏移量表示。 若设为"0"则表示使用默认值。 PoolSize= 用于设置地址池的长度(也就是包含的IP地址数量)。 若设为"0"则表示使用默认值。 默认情况下,地址池的起点位于子网地址之后的第一个地址, 终点位于广播地址前面的那个地址,也就是包含了全部的可分配地址。 如果地址池中正好包含了DHCP服务器自身的地址(默认情况就是这样)也没关系, 这个地址不会被分配给DHCP客户端。

DefaultLeaseTimeSec=, MaxLeaseTimeSec=

设置传递给DHCP客户端的 默认租期(默认"1h")与最大租期(默认"12h"), 可以使用 "min", "h", "days", "weeks", "months" 后缀。 默认租期用于客户端未指定租约时长的情况。 如果客户端指定的租约时长超过了此处设置的最大值, 那么将自动限制为此处设置的最大值。 如果租约经常变化, 那么应该设置较小的值; 反之,为了降低DHCP所占用的网络流量, 应该设置较大的值。

EmitDNS=, DNS=

设置是否要给DHCP客户端传递DNS服务器信息。 EmitDNS= 的默认值 "yes" 表示要传递。 而 DNS= 则用于设置一个 要传递的DNS服务器列表(以IPv4地址表示)。 如果 EmitDNS=yes 但同时并未设置 DNS= 的值, 那么将自动使用从"上级连接"中获得的DNS服务器列表。 所谓"上级连接"是指系统中优先级最高的默认路由。 注意: (1)不会从本机的 /etc/resolv.conf 中提取DNS服务器。 (2)并不通知DHCP客户端"上级连接"的DNS变化。 为了确保客户端能够及时知晓"上级连接"的DNS变化, 应该减小 MaxLeaseTimeSec= 的值。

EmitNTP=, NTP=

EmitDNS=DNS= 完全相同, 不同之处仅在于这两个选项针对的是NTP时间服务器。

EmitRouter=

EmitDNS= 完全相同, 不同之处仅在于这两个选项针对的是路由器。

EmitTimezone=, Timezone=

设置是否要给DHCP客户端传递时区信息。 EmitTimezone= 的默认值 "yes" 表示要传递。 而 Timezone= 则用于设置一个要传递的时区字符串, 例如 "Asia/Shanghai"(中华民国中原时区) 或 "UTC"(世界统一时间) 或 "PRC"(中华人民共和国)。 若未明确设置 Timezone= 的值, 那么将使用本机的时区,也就是 /etc/localtime 软连接。

[IPv6PrefixDelegation] 小节选项

"[IPv6PrefixDelegation]" 小节用于配置如何发送IPv6路由器通告消息(IPv6 Router Advertisement)以及是否用作路由器角色, 仅在 [Network] 小节中的 IPv6PrefixDelegation= 选项已开启的情况下有意义。 IPv6 网络前缀定义在一个或多个 "[IPv6Prefix]" 小节中。

Managed=, OtherInformation=

此二选项都只接受一个布尔值。 Managed=yes 表示通过 DHCPv6 服务器来获取 IPv6 地址。 OtherInformation=yes 表示通过 DHCPv6 服务器来获取其他信息。 此二选项的默认值都是 "no" ,表示完全不使用 DHCPv6 服务器。

RouterLifetimeSec=

设置此连接作为 IPv6 路由器的时长(单位是秒)。 如果设置了此选项,那么将会在路由通告消息中将该网络连接宣布为一个 IPv6 路由器。 默认值 0 表示本机不是一个路由器。

RouterPreference=

设置 IPv6 路由的优先权,此选项仅在 RouterLifetimeSec= 非零的时候有意义。 可设为 "high", "medium"(默认值), "low" 之一。 详见 RFC 4191 文档。

DNS=

通过路由通告消息分发的递归DNS服务器的 IPv6 地址列表。

Domains=

通过路由通告消息分发的DNS搜索域列表。 默认值为空,表示不发送任何DNS搜索域。

DNSLifetimeSec=

设置 DNS=Domains= 两个选项中设置的列表的有效期(单位是秒)。

[IPv6Prefix] 小节选项

可以设置多个 "[IPv6Prefix]" 小节, 每个小节都包含一个通过路由通告声明的 IPv6 前缀。详见 RFC 4861 文档。

AddressAutoconfiguration=, OnLink=

此二选项都只接受一个布尔值。 AddressAutoconfiguration=yes 表示允许自动配置带有此前缀的 IPv6 地址。 OnLink=yes 表示此前缀可用于在线(OnLink)检测。 此二选项的默认值都是 "yes" 以简化配置难度。

Prefix=

设置用于分发的 IPv6 前缀。 值是一个形如 "IPv6地址/前缀长度" 的字符串。 因为每个 IPv6 前缀的有效期、是否允许自动配置地址、在线(OnLink)状态可能各不相同, 所以需要使用多个 "[IPv6Prefix]" 小节来分别配置多个不同的 IPv6 前缀。

PreferredLifetimeSec=, ValidLifetimeSec=

PreferredLifetimeSec= 表示该IPv6前缀的首选生存期时长(单位是秒),默认值是 604800 秒(一个星期)。 ValidLifetimeSec= 表示该IPv6前缀的有效生存期时长(单位是秒),默认值是 2592000 秒(30天)。

[Bridge] 小节选项

可在 "[Bridge]" 小节中使用的选项如下:

UnicastFlood=

默认值 yes 表示网桥应该通过该端口转发 没有FDB项并且目标MAC地址未知的流量

HairPin=

若设为 yes 则表示网桥可以 将从该端口接收到的流量仍然通过该端口返还发送回去。 默认值为 no

UseBPDU=

默认值 yes 表示该端口将会处理 STP BPDU(Bridge Protocol Data Units)

FastLeave=

若设为 yes 则表示允许在该端口接收到"IGMP Leave"消息后立即停止此端口上多播, 仅用于与IGMP嗅探一起使用。 默认值为 no

AllowPortToBeRoot=

默认值 yes 表示允许该端口成为根端口(Root Port),也就是与根桥(Root Bridge)直接相连或路径最短的端口。 仅在网桥启用了STP(生成树协议)的情况下才有意义。

Cost=

设置该端口发送数据包的"cost"。 一个网桥上的不同端口可能有不同的速度, 速度越快的端口,其"cost"值也越低。 因此,"cost"值可用于决定使用哪个端口。 取值范围是 1 到 65535 之间的一个整数。

Priority=

设置该接口的"优先级"。 网桥上的每一个端口都可以拥有一个"优先级",用于确定优先使用哪一个连接。 较小的数值表示优先级较高(更优先使用)。 可设为 0 到 63 之间的整数。 此选项没有默认值,意味着默认使用内核的值(默认为 32)。

[BridgeFDB] 小节选项

"[BridgeFDB]" 小节 用于管理网桥端口的流量转发表。 可以通过设置多个 "[BridgeFDB]" 小节 来配置多个静态MAC表项。

MACAddress=

这是一个必须设置的选项, 含义与 "[Link]" 小节中的同名选项相同。

VLANId=

新的静态MAC表项的"VLAN ID"。 若未设置,则不添加任何"VLAN ID"信息。

[BridgeVLAN] 小节选项

"[BridgeVLAN]" 小节用于管理网桥端口的 VLAN ID 配置。 可以通过设置多个 "[BridgeVLAN]" 小节来配置多个 VLAN 项。 此小节仅在 systemd.netdev(5) 中 "[Bridge]" 小节下的 VLANFiltering= 选项被开启时才有意义。

VLAN=

可以设为一个单独的 ID 或 "M-N" 格式表示的ID范围。表示在此端口上启用的 VLAN ID 。 有效的 VLAN ID 范围是 1~4094 。

EgressUntagged=

可以设为一个单独的 ID 或 "M-N" 格式表示的ID范围。 此处设置的 VLAN ID 将被用于在出口上 untag 帧。 设置此选项将会隐含的使用 VLAN= 并将 VLAN ID 同时应用于进入的帧。

PVID=

为所有进入的 untag 帧设置 Port VLAN ID 。此选项仅可使用一次。 设置此选项将会隐含的使用 VLAN= 并将 VLAN ID 同时应用于进入的帧。

例子

例 1. 静态网络配置

# /etc/systemd/network/50-static.network
[Match]
Name=enp2s0

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

启动 "enp2s0" 接口并配置一个静态地址。 此处设置的网关将被用作默认路由。


例 2. 在所有以太网接口上使用 DHCP

# /etc/systemd/network/80-dhcp.network
[Match]
Name=en*

[Network]
DHCP=yes

在所有名字以 "en" 开头的接口(也就是以太网接口)上开启 DHCPv4 与 DHCPv6


例 3. 桥接两个网卡

# /etc/systemd/network/25-bridge-static.network
[Match]
Name=bridge0

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1
DNS=192.168.0.1
# /etc/systemd/network/25-bridge-slave-interface-1.network
[Match]
Name=enp2s0

[Network]
Bridge=bridge0
# /etc/systemd/network/25-bridge-slave-interface-2.network
[Match]
Name=wlp3s0

[Network]
Bridge=bridge0

创建一个网桥,并将 "enp2s0" 与 "wlp3s0" 添加进去。 同时为网桥配置一个静态地址,静态设置的网关也将被用作默认路由。 设置的DNS服务器将会被添加到全局DNS服务器列表中。


例 4. 

# /etc/systemd/network/20-bridge-slave-interface-vlan.network
[Match]
Name=enp2s0

[Network]
Bridge=bridge0

[BridgeVLAN]
VLAN=1-32
PVID=42
EgressUntagged=42

[BridgeVLAN]
VLAN=100-200

[BridgeVLAN]
EgressUntagged=300-400

本例的设置覆盖了上例中对 "enp2s0" 接口的配置,为其开启了 VLAN 功能: (1) VLAN ID 等于 1-32, 42, 100-400 的包将被直接发出, (2) VLAN ID 等于 42, 300-400 的包将被去掉 tag 标记之后再发出。 (3) 接收到的无 tag 标记的包将被指定一个 VLAN ID 等于 42 的值。


例 5. 各种隧道

/etc/systemd/network/25-tunnels.network
[Match]
Name=ens1

[Network]
Tunnel=ipip-tun
Tunnel=sit-tun
Tunnel=gre-tun
Tunnel=vti-tun
      
/etc/systemd/network/25-tunnel-ipip.netdev
[NetDev]
Name=ipip-tun
Kind=ipip
      
/etc/systemd/network/25-tunnel-sit.netdev
[NetDev]
Name=sit-tun
Kind=sit
      
/etc/systemd/network/25-tunnel-gre.netdev
[NetDev]
Name=gre-tun
Kind=gre
      
/etc/systemd/network/25-tunnel-vti.netdev
[NetDev]
Name=vti-tun
Kind=vti
      

这将启动 "ens1" 接口,并使用此接口创建一个 IPIP 隧道、 一个 SIT 隧道、一个 GRE 隧道、一个 VTI 隧道。


例 6. 多网卡绑定

# /etc/systemd/network/30-bond1.network
[Match]
Name=bond1

[Network]
DHCP=ipv6
# /etc/systemd/network/30-bond1.netdev
[NetDev]
Name=bond1
Kind=bond
# /etc/systemd/network/30-bond1-dev1.network
[Match]
MACAddress=52:54:00:e9:64:41

[Network]
Bond=bond1
# /etc/systemd/network/30-bond1-dev2.network
[Match]
MACAddress=52:54:00:e9:64:42

[Network]
Bond=bond1

创建一个 "bond1" 设备, 并将两个MAC地址为 52:54:00:e9:64:41 与 52:54:00:e9:64:42 的网卡添加进去。 同时使用 DHCPv6 来获取地址。


例 7. 虚拟路由转发(VRF)

将 "bond1" 添加到 VRF 主接口 "vrf1" 上。 这将把此接口上生成的路由重定向到创建 VFR 过程中定义的路由表中。 注意,Linux-4.8 之前的内核不会根据 VFR 路由表重定向流量,除非专门添加了特定的IP规则。

# /etc/systemd/network/25-vrf.network
[Match]
Name=bond1

[Network]
VRF=vrf1

例 8. MacVTap

启动 "macvtap-test" 接口, 并将其附着到 "enp0s25" 上。

# /usr/lib/systemd/network/25-macvtap.network
[Match]
Name=enp0s25

[Network]
MACVTAP=macvtap-test

参见

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