linux-system-roles.network
linux-system-roles/network
概述
network
角色让用户可以在目标机器上配置网络。这个角色可以用于配置:
- 以太网接口
- 桥接接口
- 绑定接口
- VLAN 接口
- MacVLAN 接口
- Infiniband 接口
- 无线(WiFi)接口
- IP 配置
- 802.1x 认证
介绍
network
角色支持两种提供者:nm
和 initscripts
。默认情况下,自 RHEL7 开始使用 nm
,而在 RHEL6 中使用 initscripts
。initscripts
提供者需要 network-scripts
包,该包在 RHEL8 中已被弃用,并在 RHEL9 中被移除。可以通过 network_provider
变量为每个主机配置这些提供者。如果没有明确配置,将会根据发行版自动检测。然而,请注意,nm
或 initscripts
并未绑定到某个特定的发行版。network
角色在任何地方工作,只要需要的 API 可用。这意味着 nm
至少需要 NetworkManager API 版本 1.2,并且某些由 nm
提供者支持的设置也要求更高的 NetworkManager API 版本。
network
角色支持两个模块:network_connections
和 network_state
。
可以通过 network_connections
变量为每个主机配置一系列网络配置文件。
对于
initscripts
,配置文件对应于/etc/sysconfig/network-scripts/
目录中的 ifcfg 文件,而这些 ifcfg 文件中必须写有NM_CONTROLLED=no
。对于
nm
,配置文件对应于由 NetworkManager 处理的连接配置文件,并且从 RHEL9 开始,只有 NetworkManager 密钥文件格式的配置文件被支持,位于/etc/NetworkManager/system-connections/
中。
还可以通过 network_state
变量直接向接口应用网络状态配置,仅 nm
提供者支持使用 network_state
变量。
请注意,network
角色同时操作设备的连接配置文件(通过 network_connections
变量)和设备本身(通过 network_state
变量)。通过角色配置连接配置文件时,默认使用配置文件名称作为接口名称。也可以创建通用配置文件,例如创建一个具有特定 IP 配置的配置文件而不激活该配置文件。要将配置应用于实际网络接口,请在目标系统上使用 nmcli
命令。
警告:network
角色将根据 network_connections
变量更新或创建目标系统上的所有连接配置文件。因此,network
角色将从指定的配置文件中删除选项,如果这些选项仅存在于系统中而未在 network_connections
变量中列出。以下是例外情况。然而,通过在 network_state
变量中指定网络状态配置,可以实现部分网络配置。
需求
见下文。
集合需求
该角色仅需外部集合来管理 rpm-ostree
节点。如果需要管理 rpm-ostree
节点,请运行以下命令安装这些集合:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
变量
network
角色通过以 network_
开头的变量进行配置。变量列表如下:
network_provider
- 该变量允许设置特定提供者 (nm
或initscripts
)。将其设置为{{ network_provider_os_default }}
时,提供者将根据操作系统设置。通常情况下,这个值为nm
,除非是在 RHEL 6 或 CentOS 6 系统。对于现有配置文件,修改提供者不被支持。建议首先删除旧提供者的配置文件,然后使用新提供者创建新配置文件。network_connections
- 连接配置文件作为network_connections
被配置,这是一组包含特定选项的字典。network_allow_restart
- 默认值为false
。要在安装后加载 NetworkManager 插件,需要重新启动 NetworkManager。例如,如果配置了无线连接但尚未安装 NetworkManager-wifi,则必须在配置连接之前重新启动 NetworkManager。重新启动可能会导致连接丢失,因此角色不允许在未明确同意的情况下进行此操作。用户可以通过将network_allow_restart
设置为true
来表示同意。将network_allow_restart
设置为false
将阻止角色重新启动 NetworkManager。network_state
- 网络状态设置可以在受管理主机中配置,配置的格式和语法应与 nmstate 状态示例 (YAML)一致。
变量示例
设置变量
network_provider: nm
network_connections:
- name: eth0
#...
network_allow_restart: true
network_provider: nm
network_state:
interfaces:
- name: eth0
#...
routes:
config:
#...
dns-resolver:
config:
#...
network_connections 选项
network_connections
变量是一系列字典,包含以下选项。选项列表如下:
name
(通常是必需的)
name
选项用于标识要配置的连接配置文件。它不是适用于该配置文件的网络接口的名称,尽管我们可以将配置文件与接口关联,并给予相同的名称。请注意,可以为同一设备有多个配置文件,但每次只能有一个配置文件在该设备上处于活动状态。对于 NetworkManager,连接只能在一种设备上处于活动状态。
对于
NetworkManager
,name
选项对应于connection.id
属性选项。尽管 NetworkManager 支持多个相同的connection.id
的连接,network
角色无法处理重复的name
。多次指定name
只会引用同一个连接配置文件。对于
initscripts
,name
选项决定 ifcfg 文件名/etc/sysconfig/network-scripts/ifcfg-$NAME
。注意,name
不指定DEVICE
,而是一个文件名。因此,'/'
不是name
的有效字符。
您还可以多次使用相同的连接配置文件。因此,可以分别创建和激活一个配置文件。
注意:network
角色将仅更改 network_connections
变量中指定的配置文件。因此,如果只指定了要从控制器移除的配置文件的端口,而未指定控制器,则该控制器配置文件将保留在系统上。如果所有端口都从绑定接口中移除,这种情况可能会发生。
注意:要删除系统上未在 network_connections
变量中指定的所有配置文件,请添加一个条目,名称为空且 persistent_state: absent
。这样将匹配并删除所有剩余的配置文件:
network_connections:
- name: eth0 # 要在系统上保留/配置的配置文件
[...]
- persistent_state: absent # 删除所有其他配置文件
state
state
选项指示每个连接配置文件的运行时状态。state
选项(可选)可以设置以下值:
up
- 启用连接配置文件down
- 禁用连接配置文件
state: up
对于
NetworkManager
,这对应于nmcli connection id {{name}} up
。对于
initscripts
,这对应于调用ifup {{name}}
。
当将 state
选项设置为 up
时,您还可以指定 wait
选项(可选):
wait: 0
- 仅启动激活,但不等到设备完全连接。连接将在后台完成,例如在收到 DHCP 租约后。wait: <seconds>
是一个超时,允许您决定给设备多长时间进行激活。默认情况下使用适合的超时。请注意,wait
选项仅由 NetworkManager 支持。
请注意,state: up
始终会重新激活配置文件,甚至可能更改网络配置,即使该配置文件之前已经处于活动状态。因此,state: up
总是会更改系统。
state: down
对于
NetworkManager
,这对应于nmcli connection id {{name}} down
。对于
initscripts
,这对应于调用ifdown {{name}}
。
您可以禁用连接配置文件,即使它当前未处于活动状态。因此,state: down
总是会更改系统。
请注意,如果未设置 state
选项,则不会更改连接配置文件的运行时状态。
persistent_state
persistent_state
选项指示连接配置文件是否是持久的(保存在磁盘上)。persistent_state
选项可以设置为以下值:
persistent_state: present
(默认)
请注意,如果 persistent_state
为 present
,并且连接配置文件包含 type
选项,则将创建或更新配置文件。如果连接配置文件不完整(不存在 type
选项),则行为未定义。此外,present
值不会直接导致网络配置的更改。如果 state
选项未设置为 up
,则仅创建或修改配置文件,而不激活。
对于 NetworkManager,新连接配置文件默认情况下启用 autoconnect
选项。因此,NetworkManager 可以在当前未连接的设备上激活新配置文件。(rh#1401515)。
persistent_state: absent
absent
值确保该配置文件不在目标主机上存在。如果存在具有给定名称的文件,它将被删除。在这种情况下:
NetworkManager
删除所有与相应connection.id
相关的连接配置文件。通常情况下,删除配置文件不会更改当前的网络配置,除非该配置文件在设备上当前处于激活状态。删除当前激活的连接配置文件会断开设备的连接,使设备能够自动连接到其他连接(有关更多详细信息,请参阅 rh#1401515)。initscripts
大多数情况下会删除 ifcfg 文件,而不会对系统的运行时状态产生影响,除非某个组件在观察 sysconfig 目录。
注意:对于只包含 state
选项的配置文件,network
角色仅激活或禁用连接,而不更改其配置。
type
type
选项可以设置为以下值:
ethernet
bridge
bond
team
vlan
macvlan
infiniband
wireless
dummy
type: ethernet
如果类型为 ethernet
,则可以有一个额外的 ethernet
字典,包含以下项(选项):autoneg
、speed
和 duplex
,这些均对应于 ethtool
实用程序中的相同设置。
autoneg
:true
(默认)或false
(表示启用或禁用自动协商)speed
:速率,单位为 Mbit/sduplex
:half
或full
请注意,当禁用自动协商(autoneg: false
)时,speed
和 duplex
链接设置是必需的。
type: bridge
, type: bond
, type: team
bridge
、bond
、team
设备类型的工作方式类似。请注意,RHEL6 内核不支持 team
,并且在 RHEL 9 中被弃用。
对于端口,port_type
和 controller
属性必须设置。请注意,端口不应具有 ip
设置,这意味着活动端口将不会分配 IP 地址。
controller
引用的是 Ansible 剧本中配置文件的 name
。它既不是接口名称,也不是 NetworkManager 的 connection-id。
对于 NetworkManager,
controller
将转换为相应配置文件的connection.uuid
。对于 initscripts,通过相应的 ifcfg 文件查找控制器的
DEVICE
。
由于 controller
引用的是同一或另一个剧本的其他配置文件,因此 connections
列表的顺序很重要。由其他配置文件引用的配置文件应首先指定。此外,--check
忽略 controller
的值,并假定在实际执行时将存在。这意味着,如果存在无效的 controller
,--check
可能会显示成功,但实际的剧本运行失败。
如果仅关闭 controller
配置文件,则端口配置文件将自动关闭。如果关闭某些或所有端口上的连接,则控制器配置文件将保持活动状态。
team
类型使用 roundrobin
作为 runner
配置。当前不支持进一步的配置。
type: vlan
与 controller
类似,parent
引用 Ansible 角色中的连接配置文件。可以使用嵌套的 vlan 设置来指定 vlan ID,合法的 vlan ID 值范围为 0 至 4094。这里是如何指定 vlan ID 的示例:
type: vlan
vlan:
id: 6
type: macvlan
与 controller
和 vlan
类似,parent
引用 Ansible 角色中的连接配置文件。
type: infiniband
对于 infiniband 连接,目前仅支持 nm 提供者,并且支持以下选项:
p_key
:用于设备的 infiniband P_Key。当未指定时,连接创建在物理 infiniband 结构上。否则,它是一个 16 位无符号整数,将创建 ipoib(IP over Infiniband)连接,如果这是 “全部成员资格” P_Key,则高位应设置。特殊的p_key
值 0x0000 和 0x8000 是无效的,因为内核不支持它们。transport_mode
:ipoib(IP over Infiniband)连接的操作模式。可用模式是datagram
(默认)和connected
。
注意:如果指定了 p_key
,则必须取消设置 interface_name
。
type: wireless
wireless
类型支持 WPA-PSK(密码)认证、WPA-EAP(802.1x)认证、WPA3-个人 SAE(密码)认证和增强开放(OWE)。
nm
(NetworkManager)是此类型唯一支持的 network_provider
。
如果使用 WPA-EAP,则必须在 ieee802_1x 选项中定义 ieee802_1x 设置。
支持以下选项:
ssid
:无线网络的 SSID(必需)key_mgmt
(必需)以下密钥中的任何一个:
owe
sae
wpa-eap
wpa-psk
password
:网络的密码(如果使用wpa-psk
或sae
则必需)
type: dummy
虚拟网络接口,nm
(NetworkManager)是此类型唯一支持的 network_provider
。
autoconnect
默认情况下,创建的配置文件启用自动连接。
对于
NetworkManager
,这对应于connection.autoconnect
属性。对于
initscripts
,这对应于ONBOOT
属性。
mac
mac
地址是可选的,并限制配置文件仅在具有给定 MAC 地址的设备上使用。仅允许 type
为 ethernet
或 infiniband
的配置文件设置 mac
以匹配非虚拟设备。mac
地址的值需使用冒号(例如:mac: "00:00:5e:00:53:5d"
)以十六进制表示。为了避免 YAML 将 mac 地址解析为六十进制(base 60)整数(见 https://yaml.org/spec/1.1/#id858600),建议始终使用双引号引住该值,有时这是必要的。
对于
NetworkManager
,mac
是永久 MAC 地址,ethernet.mac-address
。对于
initscripts
,mac
是设备的当前配置 MAC 地址(HWADDR
)。
cloned_mac
cloned_mac
地址是可选的,允许指定获取默认 mac 的策略或设置自己的 mac。cloned_mac
地址的值需要以十六进制形式指定,类似于 mac
属性。除了明确指定值作为 mac 地址外,还支持以下特殊值:
default
:遵循 NetworkManager 中的默认行为permanent
:使用设备的永久 MAC 地址preserve
:在激活时不更改设备的 MAC 地址random
:在每次连接时生成一个随机值stable
:生成一个稳定的哈希 MAC 地址
mtu
mtu
选项表示配置文件设备的最大传输单元。最大值取决于设备。对于虚拟设备,mtu
选项的最大值取决于底层设备。
interface_name
对于 ethernet
和 infiniband
类型,interface_name
选项将配置文件限制为指定的接口名称。这个参数是可选的,默认使用配置文件名称,除非使用 mac
键指定了 mac 地址。指定空字符串(""
)意味着配置文件不被限制于某个网络接口。
注意:通过 持久接口命名,接口根据硬件配置是可预测的。
否则,mac
地址可能是一个选项。
对于桥接等虚拟接口类型,interface_name
是创建的接口的名称。如果缺少 interface_name
,则将使用配置文件名称。
注意:name
(配置文件名称)和 interface_name
(设备名称)可能不同,或者配置文件根本不与任何接口绑定。
match
设置以指定匹配配置文件的设备或系统。目前,仅实现了 path
设置。
设置支持一系列模式,支持以下修饰符和通配符:
match
设置的特殊修饰符:
|
,该元素是一个可选项,如果至少一个可选项匹配,则匹配为真(逻辑或)。默认情况下,元素是可选的。 这是说,元素foo
的行为与|foo
相同。&
,该元素是强制性元素,如果所有元素匹配,则匹配为真(逻辑与)。!
,可使用感叹号(!
)对元素进行反转,反转发生在管道符号(或和)之间,位于模式之前。注意,!foo
是强制性匹配&!foo
的快捷方式。\
,可以在元素开头(第一个可选特殊字符后)使用反斜杠以转义模式的开头。例如,&\!a
是强制性匹配字面量!a
。
match
设置的通配符模式:
一般来说,这些与 shell 通配符的工作方式相似。
*
,匹配零个或多个任何字符。?
,匹配任何单个字符。[fo]
- 匹配任何单个f
或o
字符 - 也支持范围 -[0-9]
将匹配任何单个数字字符。
path
path
设置是与设备的 ID_PATH
udev 属性匹配的一系列模式。ID_PATH
udev 属性表示设备的持久路径。它由一个子系统字符串(pci、usb、platform 等)和一个子系统特定的标识符组成。可以通过命令 udevadm info /sys/class/net/$dev | grep ID_PATH=
获取设备的 ID_PATH
,或查看 NetworkManager 导出的 path
属性(nmcli -f general.path device show $dev
)。path
设置是可选的,并将配置文件限制为仅在具有匹配 ID_PATH
的设备上激活。path
设置仅支持以太网或 Infiniband 配置文件。它支持如上所述的修饰符和通配符。
zone
zone
选项设置接口的 firewalld 区域。
桥接、绑定或团队设备的端口无法指定区域。
ip
IP 配置支持以下选项:
address
可以通过在address
选项下列出的地址列表指定手动地址。auto_gateway
如果启用,将使用默认网关配置默认路由。如果禁用,将删除默认路由。
如果未指定该变量,角色将使用所选
network_provider
的默认行为。将此选项设置为
false
等同于:initscripts
中的DEFROUTE = no
,或nmcli
中的ipv4.never-default/ipv6.never-default yes
。
dhcp4
、auto6
和ipv6_disabled
此外,可以通过设置
dhcp4
或auto6
指定手动地址。dhcp4
键用于 DHCPv4,auto6
用于无状态地址自动配置(SLAAC)。注意,dhcp4
和auto6
键可以省略,默认键依赖于手动地址的存在。可以将ipv6_disabled
设置为禁用连接的 ipv6。dhcp4_send_hostname
如果启用
dhcp4
,可以配置 DHCPv4 请求是否通过dhcp4_send_hostname
选项包括主机名。注意,dhcp4_send_hostname
仅由nm
提供者支持,并对应于ipv4.dhcp-send-hostname
属性。dns
可以通过在
dns
选项中列出的地址列表指定手动 DNS 配置。dns_search
可以通过在
dns_search
选项中列出的域指定手动 DNS 配置。dns_options
dns_options
仅支持 NetworkManager 提供者。可以通过在dns_options
中给出 DNS 选项的列表来进行手动 DNS 配置。IPv4 名称服务器支持的 DNS 选项列表在 man 5 resolv.conf 中有描述。目前,支持的 DNS 选项列表有:attempts:n
debug
edns0
inet6
ip6-bytestring
ip6-dotint
ndots:n
no-aaaa
no-check-names
no-ip6-dotint
no-reload
no-tld-query
rotate
single-request
single-request-reopen
timeout:n
trust-ad
use-vc
注意:仅当配置文件对 resolv.conf 贡献了名称服务器,并且所有贡献的配置文件都启用 "trust-ad" 时,“trust-ad” 设置才会被尊重。使用缓存 DNS 插件(NetworkManager.conf 中的 dnsmasq 或 systemd-resolved)时,将自动添加 “edns0” 和 “trust-ad”。
dns_priority
DNS 服务器优先级。此设置指定的 DNS 服务器的相对优先级。默认值为 0,较低的数值具有较高的优先级。
dns_priority
的有效值范围为 -2147483648 到 2147483647。负值具有特殊效果,排除其他配置,其数值优先级更高;因此在至少有一个负优先级的情况下,仅使用优先级最低的连接的 DNS 服务器。gateway4
和gateway6
IPv4(
gateway4
)或 IPv6(gateway6
)数据包的默认网关。ipv4_ignore_auto_dns
和ipv6_ignore_auto_dns
如果启用,则自动配置的名称服务器和搜索域(通过 DHCPv4、DHCPv6、调制解调器等)将被忽略,仅使用在
dns
和dns_search
属性中指定的名称服务器和搜索域。这些设置按地址族区分。变量不被 initscripts 提供者支持。如果未指定变量,角色将使用 nm 提供者的默认行为。
route_metric4
和route_metric6
对于
NetworkManager
,route_metric4
和route_metric6
分别对应于ipv4.route-metric
和ipv6.route-metric
属性。如果指定,则将决定 DHCP 分配路由和默认路由的路由度量,从而决定多个接口的优先级。对于initscripts
,route_metric4
设置默认路由的度量,而不支持route_metric6
。route
可以通过在
route
选项中给出的路由列表指定静态路由配置。默认值为空列表。每个路由是一个字典,具有以下条目:gateway
、metric
、network
、prefix
、src
、table
和type
。network
和prefix
指定目标网络。src
指定路由的源 IP 地址。table
支持数字表和命名表。为了指定命名表,用户必须确保命名表在/etc/iproute2/rt_tables
或/etc/iproute2/rt_tables.d/*.conf
中已正确定义。可选的type
键支持值blackhole
、prohibit
和unreachable
。 请参见 man 8 ip-route 以获取其定义。这些类型的路由不支持网关。如果未指定类型,则将路由认为是单播路由。请注意,类无关域间路由(CIDR)表示法或网络掩码表示法不支持network
键。routing_rule
策略路由规则可以通过在
routing_rule
选项中给出的规则列表指定,允许根据其他数据包字段路由数据包,除了目标地址。默认值为空列表。每条规则是一个字典,具有以下条目:priority
- 规则的优先级。有效的优先级范围为 0 到 4294967295。更高的数字表示较低的优先级。action
- 规则的操作。可能的值为to-table
(默认)、blackhole
、prohibit
、unreachable
。dport
- 目标端口的范围(例如1000 - 2000
)。对于开始和结束范围,合法的 dport 值范围为 0 到 65534。开始值不能大于结束值。family
- 规则的 IP 家族。可能的值为ipv4
和ipv6
。from
- 匹配的数据包的源地址(例如192.168.100.58/24
)。fwmark
- 匹配的数据包的 fwmark 值。fwmask
- 匹配的数据包的 fwmask 值。iif
- 选择要匹配的入站接口名称。invert
- 反转规则的选择匹配。可能的值为布尔值true
和false
(默认)。如果值为true
,则等同于匹配任何不满足规则选择匹配的数据包。ipproto
- 选择要匹配的 IP 协议值,合法值范围为 1 到 255。oif
- 选择要匹配的出站接口名称。sport
- 源端口的范围(例如1000 - 2000
)。对于开始和结束范围,合法的 sport 值范围为 0 到 65534。开始值不能大于结束值。suppress_prefixlength
- 拒绝路由决策,其前缀长度为指定值或更小。table
- 查找to-table
操作的路由表。table
支持数字表和命名表。为了指定命名表,用户必须确保命名表在/etc/iproute2/rt_tables
或/etc/iproute2/rt_tables.d/*.conf
中已正确定义。to
- 要匹配的数据包的目标地址(例如192.168.100.58/24
)。tos
- 选择要匹配的 tos 值。uid
- 匹配的 uid 范围(例如1000 - 2000
)。对于开始和结束范围,合法的 uid 值范围为 0 到 4294967295。开始值不能大于结束值。
route_append_only
route_append_only
选项仅允许为系统中现有路由添加新的路由。如果将布尔选项
route_append_only
设置为true
,则将指定的路由追加到现有路由。如果将route_append_only
设置为false
(默认),则将替换当前路由。请注意,将route_append_only
设置为true
而不设置route
会保留当前静态路由。rule_append_only
rule_append_only
布尔选项允许保留当前路由规则。
注意:当未指定 route_append_only
或 rule_append_only
时,网络角色将删除当前的路由或路由规则。
注意:桥接、绑定或团队设备的端口无法指定 ip
设置。
ethtool
ethtool 设置允许启用或禁用各种功能。名称对应于 ethtool
实用程序中使用的名称。根据实际的内核和设备,某些选项可能不支持更改。
ethtool 配置支持以下选项:
ring
修改指定网络设备的
rx
/tx
ring
参数。支持的ring
参数列表:rx
- 更改 Rx ring 的环形条目数量。rx-jumbo
- 更改 Rx Jumbo ring 的环形条目数量。rx-mini
- 更改 Rx Mini ring 的环形条目数量。tx
- 更改 Tx ring 的环形条目数量。
ethtool:
features:
esp_hw_offload: true|false # 可选
esp_tx_csum_hw_offload: true|false # 可选
fcoe_mtu: true|false # 可选
gro: true|false # 可选
gso: true|false # 可选
highdma: true|false # 可选
hw_tc_offload: true|false # 可选
l2_fwd_offload: true|false # 可选
loopback: true|false # 可选
lro: true|false # 可选
ntuple: true|false # 可选
rx: true|false # 可选
rx_all: true|false # 可选
rx_fcs: true|false # 可选
rx_gro_hw: true|false # 可选
rx_udp_tunnel_port_offload: true|false # 可选
rx_vlan_filter: true|false # 可选
rx_vlan_stag_filter: true|false # 可选
rx_vlan_stag_hw_parse: true|false # 可选
rxhash: true|false # 可选
rxvlan: true|false # 可选
sg: true|false # 可选
tls_hw_record: true|false # 可选
tls_hw_tx_offload: true|false # 可选
tso: true|false # 可选
tx: true|false # 可选
tx_checksum_fcoe_crc: true|false # 可选
tx_checksum_ip_generic: true|false # 可选
tx_checksum_ipv4: true|false # 可选
tx_checksum_ipv6: true|false # 可选
tx_checksum_sctp: true|false # 可选
tx_esp_segmentation: true|false # 可选
tx_fcoe_segmentation: true|false # 可选
tx_gre_csum_segmentation: true|false # 可选
tx_gre_segmentation: true|false # 可选
tx_gso_partial: true|false # 可选
tx_gso_robust: true|false # 可选
tx_ipxip4_segmentation: true|false # 可选
tx_ipxip6_segmentation: true|false # 可选
tx_nocache_copy: true|false # 可选
tx_scatter_gather: true|false # 可选
tx_scatter_gather_fraglist: true|false # 可选
tx_sctp_segmentation: true|false # 可选
tx_tcp_ecn_segmentation: true|false # 可选
tx_tcp_mangleid_segmentation: true|false # 可选
tx_tcp_segmentation: true|false # 可选
tx_tcp6_segmentation: true|false # 可选
tx_udp_segmentation: true|false # 可选
tx_udp_tnl_csum_segmentation: true|false # 可选
tx_udp_tnl_segmentation: true|false # 可选
tx_vlan_stag_hw_insert: true|false # 可选
txvlan: true|false # 可选
coalesce:
adaptive_rx: true|false # 可选
adaptive_tx: true|false # 可选
pkt_rate_high: 0 # 可选 最小=0 最大=0xffffffff
pkt_rate_low: 0 # 可选 最小=0 最大=0xffffffff
rx_frames: 0 # 可选 最小=0 最大=0xffffffff
rx_frames_high: 0 # 可选 最小=0 最大=0xffffffff
rx_frames_irq: 0 # 可选 最小=0 最大=0xffffffff
rx_frames_low: 0 # 可选 最小=0 最大=0xffffffff
rx_usecs: 0 # 可选 最小=0 最大=0xffffffff
rx_usecs_high: 0 # 可选 最小=0 最大=0xffffffff
rx_usecs_irq: 0 # 可选 最小=0 最大=0xffffffff
rx_usecs_low: 0 # 可选 最小=0 最大=0xffffffff
sample_interval: 0 # 可选 最小=0 最大=0xffffffff
stats_block_usecs: 0 # 可选 最小=0 最大=0xffffffff
tx_frames: 0 # 可选 最小=0 最大=0xffffffff
tx_frames_high: 0 # 可选 最小=0 最大=0xffffffff
tx_frames_irq: 0 # 可选 最小=0 最大=0xffffffff
tx_frames_low: 0 # 可选 最小=0 最大=0xffffffff
tx_usecs: 0 # 可选 最小=0 最大=0xffffffff
tx_usecs_high: 0 # 可选 最小=0 最大=0xffffffff
tx_usecs_irq: 0 # 可选 最小=0 最大=0xffffffff
tx_usecs_low: 0 # 可选 最小=0 最大=0xffffffff
ring:
rx: 0 # 可选 最小=0 最大=0xffffffff
rx_jumbo: 0 # 可选 最小=0 最大=0xffffffff
rx_mini: 0 # 可选 最小=0 最大=0xffffffff
tx: 0 # 可选 最小=0 最大=0xffffffff
ieee802_1x
为接口配置 802.1x 认证。
目前,NetworkManager 是唯一支持的提供者,EAP-TLS 是唯一支持的 EAP 方法。
在运行角色之前,必须在主机上部署 SSL 证书和密钥。
eap
允许用于通过 802.1x 向网络进行身份验证的 EAP 方法。
目前,默认值为
tls
,并且是唯一接受的值。identity
(必需)EAP 身份验证方法的身份字符串。
private_key
(必需)用于 802.1x 认证的客户端 PEM 或 PKCS#12 编码的私钥的绝对路径。
private_key_password
指定在
private_key
中的私钥的密码。private_key_password_flags
用于配置私钥密码管理方式的标志列表。
可以指定多个标志。
有效标志为:
none
agent-owned
not-saved
not-required
有关详细信息,请参阅 NetworkManager 文档中的“秘密标志类型”(
man 5 nm-settings
)。client_cert
(必需)用于 802.1x 认证的客户端 PEM 编码证书的绝对路径。
ca_cert
用于验证 EAP 服务器的 PEM 编码证书颁发机构的绝对路径。
ca_path
包含用于验证 EAP 服务器的附加 PEM 编码 CA 证书的绝对路径。可以替代或补充
ca_cert
使用。如果启用了system_ca_certs
,则无法使用。system_ca_certs
如果设置为
true
,NetworkManager 将使用系统的受信任 CA 证书来验证 EAP 服务器。domain_suffix_match
如果设置,NetworkManager 将确保 EAP 服务器证书的域名与此字符串匹配。
bond
bond
设置配置绑定接口(类型为 bond
)的选项。有关有效值,请参阅 内核文档 或您分发的 nmcli
文档。支持以下选项:
mode
绑定模式。可能的值为
balance-rr
(默认)、active-backup
、balance-xor
、broadcast
、802.3ad
、balance-tlb
或balance-alb
。ad_actor_sys_prio
在
802.3ad
绑定模式中,指定系统优先级。有效范围为 1 - 65535。ad_actor_system
在
802.3ad
绑定模式中,指定在协议数据包交换(LACPDUs)中参与者的系统 MAC 地址。ad_select
此选项指定要使用的 802.3ad 聚合选择逻辑。可能的值为:
stable
、bandwidth
、count
。ad_user_port_key
在
802.3ad
绑定模式中,定义端口密钥的高10位。值的允许范围为 0 - 1023。all_ports_active
all_slaves_active
在内核和 NetworkManager 中。布尔值false
会删除重复帧(在非活动端口上接收),布尔值true
会传递重复帧。arp_all_targets
此选项指定必须可达的 arp_ip_targets 的数量,以使 ARP 监控器认为端口处于活动状态。可能的值为
any
或all
。arp_interval
此选项指定以毫秒为单位的 ARP 链路监控频率。值为 0 会禁用 ARP 监控。
arp_validate
在支持 arp 监控的任何模式下,此选项指定是否应验证 ARP 探测和应答。或者出于链路监控目的,是否应筛选(忽略)非 ARP 流量。可能的值为:
none
、active
、backup
、all
、filter
、filter_active
、filter_backup
。arp_ip_target
当启用
arp_interval
时,此选项指定用作 ARP 监控对等体的 IP 地址。downdelay
连接故障发生后,检测到的端口在禁用之前需要等待的时间(以毫秒为单位)。
fail_over_mac
此选项指定在主动备份模式下选择绑定接口的 MAC 地址的策略。可能的值为:
none
(默认)、active
、follow
。lacp_rate
在
802.3ad
绑定模式中,此选项定义请求链路伙伴以传输 LACPDU 数据包的速率。可能的值为:slow
、fast
。lp_interval
此选项指定在每个端口向每个对等交换机发送学习数据包之间的秒数。
miimon
设置 MII 链路监控间隔(以毫秒为单位)。
min_links
此选项指定必须活动的最小链路数量,才能确认承载。
num_grat_arp
此选项指定在故障转移事件后要发出的对等通知(gratuitous ARPs)数量。允许值范围为 0 - 255。
packets_per_port
在
balance-rr
绑定模式中,此选项指定网络传输中每个端口允许的包数量。允许值范围为 0 - 65535。peer_notif_delay
此选项指定在故障转移事件后发出每个对等通知之间的延迟(以毫秒为单位)。
primary
此选项定义主要设备。
primary_reselect
此选项指定主要端口的重新选择策略。可能的值为:
always
、better
、failure
。resend_igmp
此选项指定在故障转移事件后要发出的 IGMP 会员报告数量。允许值范围为 0 - 255。
tlb_dynamic_lb
此选项指定是否在 tlb 模式下启用流的动态洗牌。布尔值
true
启用流的洗牌,而布尔值false
禁用它。updelay
此选项指定在检测到链路恢复后启用端口之前需要的时间(以毫秒为单位)。
use_carrier
此选项指定 miimon 是否应使用 MII 或 ETHTOOL ioctls,而不是 netif_carrier_ok() 来确定链路状态。布尔值
true
启用使用 netif_carrier_ok(),而布尔值false
则使用 MII 或 ETHTOOL ioctls。xmit_hash_policy
此选项指定用于端口选择的传输哈希策略,可能的值为:
layer2
、layer3+4
、layer2+3
、encap2+3
、encap3+4
、vlan+srcmac
。
选项示例
多次设置相同连接配置文件:
network_connections:
- name: Wired0
type: ethernet
interface_name: eth0
ip:
dhcp4: true
- name: Wired0
state: up
激活现有连接配置文件:
network_connections:
- name: eth0
state: up
禁用现有连接配置文件:
network_connections:
- name: eth0
state: down
创建持久连接配置文件:
network_connections:
- name: eth0
#persistent_state: present # 默认
type: ethernet
autoconnect: true
mac: "00:00:5e:00:53:5d"
ip:
dhcp4: true
指定一个连接配置文件用于具有 ID_PATH
的以太网设备:
network_connections:
- name: eth0
type: ethernet
# 对于 PCI 设备,路径的形式为 "pci-$domain:$bus:$device.$function"
# 此配置文件将仅与位于 PCI 地址 pci-0000:00:03.0 的接口匹配
match:
path:
- pci-0000:00:03.0
ip:
address:
- 192.0.2.3/24
- name: eth0
type: ethernet
# 仅指定与 PCI 地址 pci-0000:00:01.0 或 pci-0000:00:03.0 连接的配置文件
match:
path:
- pci-0000:00:0[1-3].0
- &!pci-0000:00:02.0
ip:
address:
- 192.0.2.3/24
删除名为 eth0
的连接配置文件(如果存在):
network_connections:
- name: eth0
persistent_state: absent
配置以太链接设置:
network_connections:
- name: eth0
type: ethernet
ethernet:
autoneg: false
speed: 1000
duplex: full
创建桥接连接:
network_connections:
- name: br0
type: bridge
#interface_name: br0 # 默认为连接名称
配置桥接连接:
network_connections:
- name: internal-br0
interface_name: br0
type: bridge
ip:
dhcp4: false
auto6: false
设置 controller
和 port_type
:
network_connections:
- name: br0-bond0
type: bond
interface_name: bond0
controller: internal-br0
port_type: bridge
- name: br0-bond0-eth1
type: ethernet
interface_name: eth1
controller: br0-bond0
port_type: bond
配置 VLAN:
network_connections:
- name: eth1-profile
autoconnect: false
type: ethernet
interface_name: eth1
ip:
dhcp4: false
auto6: false
- name: eth1.6
autoconnect: false
type: vlan
parent: eth1-profile
vlan:
id: 6
ip:
address:
- 192.0.2.5/24
auto6: false
配置 MACVLAN:
network_connections:
- name: eth0-profile
type: ethernet
interface_name: eth0
ip:
address:
- 192.168.0.1/24
- name: veth0
type: macvlan
parent: eth0-profile
macvlan:
mode: bridge
promiscuous: true
tap: false
ip:
address:
- 192.168.1.1/24
配置无线连接:
network_connections:
- name: wlan0
type: wireless
wireless:
ssid: "My WPA2-PSK Network"
key_mgmt: "wpa-psk"
# 推荐对无线密码进行保密加密
# 见 https://docs.ansible.com/ansible/latest/user_guide/vault.html
password: "p@55w0rD"
设置 IP 配置:
network_connections:
- name: eth0
type: ethernet
ip:
route_metric4: 100
dhcp4: false
#dhcp4_send_hostname: false
gateway4: 192.0.2.1
dns:
- 192.0.2.2
- 198.51.100.5
dns_search:
- example.com
- subdomain.example.com
dns_options:
- rotate
- timeout:1
route_metric6: -1
auto6: false
gateway6: 2001:db8::1
address:
- 192.0.2.3/24
- 198.51.100.3/26
- 2001:db8::80/7
route:
- network: 198.51.100.128
prefix: 26
gateway: 198.51.100.1
metric: 2
- network: 198.51.100.64
prefix: 26
gateway: 198.51.100.6
metric: 4
route_append_only: false
rule_append_only: true
配置 802.1x:
network_connections:
- name: eth0
type: ethernet
ieee802_1x:
identity: myhost
eap: tls
private_key: /etc/pki/tls/client.key
# 推荐对私钥密码进行加密
# 见 https://docs.ansible.com/ansible/latest/user_guide/vault.html
private_key_password: "p@55w0rD"
client_cert: /etc/pki/tls/client.pem
ca_cert: /etc/pki/tls/cacert.pem
domain_suffix_match: example.com
配置增强开放(OWE):
network_connections:
- name: wlan0
type: wireless
wireless:
ssid: "WIFI_SSID"
key_mgmt: "owe"
应用网络状态配置的示例
配置 IP 地址:
network_state:
interfaces:
- name: ethtest0
type: ethernet
state: up
ipv4:
enabled: true
address:
- ip: 192.168.122.250
prefix-length: 24
dhcp: false
ipv6:
enabled: true
address:
- ip: 2001:db8::1:1
prefix-length: 64
autoconf: false
dhcp: false
- name: ethtest1
type: ethernet
state: up
ipv4:
enabled: true
address:
- ip: 192.168.100.192
prefix-length: 24
auto-dns: false
dhcp: false
ipv6:
enabled: true
address:
- ip: 2001:db8::2:1
prefix-length: 64
autoconf: false
dhcp: false
配置路由:
network_state:
interfaces:
- name: eth1
type: ethernet
state: up
ipv4:
enabled: true
address:
- ip: 192.0.2.251
prefix-length: 24
dhcp: false
routes:
config:
- destination: 198.51.100.0/24
metric: 150
next-hop-address: 192.0.2.251
next-hop-interface: eth1
table-id: 254
配置 DNS 搜索和服务器:
network_state:
dns-resolver:
config:
search:
- example.com
- example.org
server:
- 2001:4860:4860::8888
- 8.8.8.8
无效和错误配置
network
角色会拒绝无效配置。建议首先使用 --check
测试角色。对错误(但有效)配置没有保护。在应用之前请仔细检查您的配置。
network_connections 内部模块
network_connections
内部模块旨在供内部使用或集成测试,不打算直接对外访问或使用。当在集成测试中使用此内部模块时,tasks/main.yaml
中指定的任务将被跳过,从而加快测试执行速度。
兼容性
network
角色为两个提供者(nm
和 initscripts
)支持相同的配置方案。也就是说,您可以使用同一剧本在 NetworkManager 和 initscripts 上。注意,并非每个选项在每个提供者中的处理方式完全相同。请首先进行 --check
的测试运行。
不支持为一种提供者创建配置,而期望另一种提供者处理。例如,使用 initscripts
提供者创建配置文件,然后稍后启用 NetworkManager 并不能保证自动工作。可能需要调整配置,以便能够让另一个提供者使用。
例如,在 RHEL6 主机上使用 initscripts 进行配置,而在升级到 RHEL7 的同时继续使用 initscripts 是一个可接受的场景。不保证的是升级到 RHEL7、禁用 initscripts 并期望 NetworkManager 自动接管配置。
根据 NetworkManager 的配置,连接也可以作为 ifcfg 文件存储,但不保证禁用 NetworkManager 服务后,普通 initscripts 可以处理这些 ifcfg 文件。
network
角色还支持配置在一些 Ansible 发行版中,该角色将其视为 RHEL,例如 AlmaLinux、CentOS、OracleLinux、Rocky。
限制
由于 Ansible 通常通过网络工作,例如通过 SSH,因此需要考虑一些限制:
network
角色不支持引导网络配置。一种选择可以是 ansible-pull。另一种选择可能是在安装过程中(基于 ISO、kickstart 等)初步自动配置主机,以使主机连接到管理 LAN 或 VLAN。这很大程度上取决于您的环境。
对于 initscripts
提供者,部署一个配置文件仅意味着创建 ifcfg 文件。在 up
或 down
state 通过 ifup
或 ifdown
在 play 中发出指令之前,自动不会发生任何事情——除非有其他依赖于 ifcfg 文件并对变化做出反应的组件。
initscripts
提供者要求不同的配置文件根据依赖关系排列。例如,绑定控制器设备需要在端口设备之前指定。
当删除 NetworkManager 的配置文件时,它还会将连接关闭,并可能删除虚拟接口。使用 initscripts
提供者时,删除配置文件不会更改其当前运行状态(这也是未来 NetworkManager 的一项功能)。
对于 NetworkManager,修改启用自动连接的连接可能会导致在以前未连接的接口上激活新配置文件。而且,删除当前活动的 NetworkManager 连接会导致接口被移除。因此,应遵循步骤的顺序,可能需要谨慎处理 autoconnect 属性。这在 NetworkManager RFE rh#1401515 中会有所改善。
在更改目标主机的网络时,似乎很难以破坏当前 ansible 的 SSH 连接。如果要这样做,ansible-pull 可能是一个解决方案。或者,可以结合使用 async
/poll
,在执行过程中更改 ansible_host
。
TODO:当前角色尚不支持将 play 轻松拆分为预配置步骤和激活新的配置的第二步骤。
一般来说,要成功运行 play,首先确定当前的配置,然后仔细配置一系列步骤以更改为新配置。实际解决方案在很大程度上取决于您的环境。
处理潜在问题
在远程配置网络时,如果出现问题,您可能需要获得物理访问权限以恢复。
TODO:NetworkManager 支持 checkpoint/rollback 功能。在 play 的开头,我们可以创建一个检查点,如果由于错误而失去联接,NetworkManager 会在超时后自动回滚。其限制是,这将仅适用于 NetworkManager,并且尚不清楚回滚是否会导致工作配置。
想要贡献?请查看我们的 贡献指南!
rpm-ostree
见 README-ostree.md