linux-system-roles.network

linux-system-roles/network

ansible-lint.yml ansible-test.yml codeql.yml integration.yml markdownlint.yml python-unit-test.yml shellcheck.yml tft.yml tft_citest_bad.yml woke.yml Coverage Status Code Style: black Language grade: Python

概述

network 角色让用户可以在目标机器上配置网络。这个角色可以用于配置:

  • 以太网接口
  • 桥接接口
  • 绑定接口
  • VLAN 接口
  • MacVLAN 接口
  • Infiniband 接口
  • 无线(WiFi)接口
  • IP 配置
  • 802.1x 认证

介绍

network 角色支持两种提供者:nminitscripts。默认情况下,自 RHEL7 开始使用 nm,而在 RHEL6 中使用 initscriptsinitscripts 提供者需要 network-scripts 包,该包在 RHEL8 中已被弃用,并在 RHEL9 中被移除。可以通过 network_provider 变量为每个主机配置这些提供者。如果没有明确配置,将会根据发行版自动检测。然而,请注意,nminitscripts 并未绑定到某个特定的发行版。network 角色在任何地方工作,只要需要的 API 可用。这意味着 nm 至少需要 NetworkManager API 版本 1.2,并且某些由 nm 提供者支持的设置也要求更高的 NetworkManager API 版本。

network 角色支持两个模块:network_connectionsnetwork_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 - 该变量允许设置特定提供者 (nminitscripts)。将其设置为 {{ 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,连接只能在一种设备上处于活动状态。

  • 对于 NetworkManagername 选项对应于 connection.id 属性选项。尽管 NetworkManager 支持多个相同的 connection.id 的连接,network 角色无法处理重复的 name。多次指定 name 只会引用同一个连接配置文件。

  • 对于 initscriptsname 选项决定 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_statepresent,并且连接配置文件包含 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 字典,包含以下项(选项):autonegspeedduplex,这些均对应于 ethtool 实用程序中的相同设置。

  • autonegtrue(默认)或 false(表示启用或禁用自动协商)
  • speed:速率,单位为 Mbit/s
  • duplexhalffull

请注意,当禁用自动协商(autoneg: false)时,speedduplex 链接设置是必需的。

type: bridge, type: bond, type: team

bridgebondteam 设备类型的工作方式类似。请注意,RHEL6 内核不支持 team,并且在 RHEL 9 中被弃用。

对于端口,port_typecontroller 属性必须设置。请注意,端口不应具有 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

controllervlan 类似,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-psksae 则必需)

type: dummy

虚拟网络接口,nm(NetworkManager)是此类型唯一支持的 network_provider

autoconnect

默认情况下,创建的配置文件启用自动连接。

  • 对于 NetworkManager,这对应于 connection.autoconnect 属性。

  • 对于 initscripts,这对应于 ONBOOT 属性。

mac

mac 地址是可选的,并限制配置文件仅在具有给定 MAC 地址的设备上使用。仅允许 typeethernetinfiniband 的配置文件设置 mac 以匹配非虚拟设备。mac 地址的值需使用冒号(例如:mac: "00:00:5e:00:53:5d")以十六进制表示。为了避免 YAML 将 mac 地址解析为六十进制(base 60)整数(见 https://yaml.org/spec/1.1/#id858600),建议始终使用双引号引住该值,有时这是必要的。

  • 对于 NetworkManagermac 是永久 MAC 地址,ethernet.mac-address

  • 对于 initscriptsmac 是设备的当前配置 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

对于 ethernetinfiniband 类型,interface_name 选项将配置文件限制为指定的接口名称。这个参数是可选的,默认使用配置文件名称,除非使用 mac 键指定了 mac 地址。指定空字符串("")意味着配置文件不被限制于某个网络接口。

注意:通过 持久接口命名,接口根据硬件配置是可预测的。 否则,mac 地址可能是一个选项。

对于桥接等虚拟接口类型,interface_name 是创建的接口的名称。如果缺少 interface_name,则将使用配置文件名称。

注意name(配置文件名称)和 interface_name(设备名称)可能不同,或者配置文件根本不与任何接口绑定。

match

设置以指定匹配配置文件的设备或系统。目前,仅实现了 path 设置。

设置支持一系列模式,支持以下修饰符和通配符:

match 设置的特殊修饰符:

  • |,该元素是一个可选项,如果至少一个可选项匹配,则匹配为真(逻辑或)。默认情况下,元素是可选的。 这是说,元素 foo 的行为与 |foo 相同。

  • &,该元素是强制性元素,如果所有元素匹配,则匹配为真(逻辑与)。

  • !,可使用感叹号(!)对元素进行反转,反转发生在管道符号(或和)之间,位于模式之前。注意,!foo 是强制性匹配 &!foo 的快捷方式。

  • \,可以在元素开头(第一个可选特殊字符后)使用反斜杠以转义模式的开头。例如,&\!a 是强制性匹配字面量 !a

match 设置的通配符模式: 一般来说,这些与 shell 通配符的工作方式相似。

  • *,匹配零个或多个任何字符。
  • ?,匹配任何单个字符。
  • [fo] - 匹配任何单个 fo 字符 - 也支持范围 - [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
  • dhcp4auto6ipv6_disabled

    此外,可以通过设置 dhcp4auto6 指定手动地址。dhcp4 键用于 DHCPv4,auto6 用于无状态地址自动配置(SLAAC)。注意,dhcp4auto6 键可以省略,默认键依赖于手动地址的存在。可以将 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 服务器。

  • gateway4gateway6

    IPv4(gateway4)或 IPv6(gateway6)数据包的默认网关。

  • ipv4_ignore_auto_dnsipv6_ignore_auto_dns

    如果启用,则自动配置的名称服务器和搜索域(通过 DHCPv4、DHCPv6、调制解调器等)将被忽略,仅使用在 dnsdns_search 属性中指定的名称服务器和搜索域。这些设置按地址族区分。变量不被 initscripts 提供者支持。

    如果未指定变量,角色将使用 nm 提供者的默认行为。

  • route_metric4route_metric6

    对于 NetworkManagerroute_metric4route_metric6 分别对应于 ipv4.route-metricipv6.route-metric 属性。如果指定,则将决定 DHCP 分配路由和默认路由的路由度量,从而决定多个接口的优先级。对于 initscriptsroute_metric4 设置默认路由的度量,而不支持 route_metric6

  • route

    可以通过在 route 选项中给出的路由列表指定静态路由配置。默认值为空列表。每个路由是一个字典,具有以下条目:gatewaymetricnetworkprefixsrctabletypenetworkprefix 指定目标网络。src 指定路由的源 IP 地址。table 支持数字表和命名表。为了指定命名表,用户必须确保命名表在 /etc/iproute2/rt_tables/etc/iproute2/rt_tables.d/*.conf 中已正确定义。可选的 type 键支持值 blackholeprohibitunreachable。 请参见 man 8 ip-route 以获取其定义。这些类型的路由不支持网关。如果未指定类型,则将路由认为是单播路由。请注意,类无关域间路由(CIDR)表示法或网络掩码表示法不支持 network 键。

  • routing_rule

    策略路由规则可以通过在 routing_rule 选项中给出的规则列表指定,允许根据其他数据包字段路由数据包,除了目标地址。默认值为空列表。每条规则是一个字典,具有以下条目:

    • priority - 规则的优先级。有效的优先级范围为 0 到 4294967295。更高的数字表示较低的优先级。
    • action - 规则的操作。可能的值为 to-table(默认)、blackholeprohibitunreachable
    • dport - 目标端口的范围(例如 1000 - 2000)。对于开始和结束范围,合法的 dport 值范围为 0 到 65534。开始值不能大于结束值。
    • family - 规则的 IP 家族。可能的值为 ipv4ipv6
    • from - 匹配的数据包的源地址(例如 192.168.100.58/24)。
    • fwmark - 匹配的数据包的 fwmark 值。
    • fwmask - 匹配的数据包的 fwmask 值。
    • iif - 选择要匹配的入站接口名称。
    • invert - 反转规则的选择匹配。可能的值为布尔值 truefalse(默认)。如果值为 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_onlyrule_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-backupbalance-xorbroadcast802.3adbalance-tlbbalance-alb

  • ad_actor_sys_prio

    802.3ad 绑定模式中,指定系统优先级。有效范围为 1 - 65535。

  • ad_actor_system

    802.3ad 绑定模式中,指定在协议数据包交换(LACPDUs)中参与者的系统 MAC 地址。

  • ad_select

    此选项指定要使用的 802.3ad 聚合选择逻辑。可能的值为:stablebandwidthcount

  • 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 监控器认为端口处于活动状态。可能的值为 anyall

  • arp_interval

    此选项指定以毫秒为单位的 ARP 链路监控频率。值为 0 会禁用 ARP 监控。

  • arp_validate

    在支持 arp 监控的任何模式下,此选项指定是否应验证 ARP 探测和应答。或者出于链路监控目的,是否应筛选(忽略)非 ARP 流量。可能的值为:noneactivebackupallfilterfilter_activefilter_backup

  • arp_ip_target

    当启用 arp_interval 时,此选项指定用作 ARP 监控对等体的 IP 地址。

  • downdelay

    连接故障发生后,检测到的端口在禁用之前需要等待的时间(以毫秒为单位)。

  • fail_over_mac

    此选项指定在主动备份模式下选择绑定接口的 MAC 地址的策略。可能的值为:none(默认)、activefollow

  • lacp_rate

    802.3ad 绑定模式中,此选项定义请求链路伙伴以传输 LACPDU 数据包的速率。可能的值为:slowfast

  • 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

    此选项指定主要端口的重新选择策略。可能的值为:alwaysbetterfailure

  • 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

    此选项指定用于端口选择的传输哈希策略,可能的值为:layer2layer3+4layer2+3encap2+3encap3+4vlan+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

设置 controllerport_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 角色为两个提供者(nminitscripts)支持相同的配置方案。也就是说,您可以使用同一剧本在 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 文件。在 updown state 通过 ifupifdown 在 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

安装
ansible-galaxy install linux-system-roles.network
许可证
bsd-3-clause
下载
263.3k