配置和管理网络
大约 202 分钟
配置和管理网络
来源:官方文档 原始多页入口:配置和管理网络 内容规模:约 271,171 字符,202 个章节标题,856 个命令/代码块,74 条提示框
阅读提要
- 副标题:管理网络接口和高级网络功能
- 摘要:通过使用 Red Hat Enterprise Linux (RHEL)的网络功能,您可以配置主机来满足机构的网络和安全要求。这包括不同的网络类型和高级网络功能,如基于策略的路由和多路径 TCP (MPTCP)。
- 主要章节:管理网络接口和高级网络功能;对红帽文档提供反馈;第 1 章 实现一致的网络接口命名;第 2 章 配置以太网连接;第 3 章 配置网络绑定;第 4 章 配置 VLAN 标记;第 5 章 配置网络桥接;第 6 章 设置 IPsec VPN;第 7 章 设置 WireGuard VPN;第 8 章 配置 IP 隧道;第 9 章 管理 wifi 连接;第 10 章 在 IBM Z 中配置持久性 qeth 设备;第 11 章 使用 MACsec 加密同一物理网络中的第 2 层流量;第 12 章 将 NetworkManager 配置为忽略某些接口;第 13 章 管理默认网关
- 推荐阅读顺序:先看目录定位主题,再按章节查看关键点、命令和注意事项;超大清单类章节只保留样例与统计。
章节笔记
概览
- 该章节主要为下一级主题的入口。
管理网络接口和高级网络功能
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:步骤
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 实现一致的网络接口命名
- 要点:udev 设备管理器在 Red Hat Enterprise Linux 中实现一致的设备命名。设备管理器支持不同的命名方案,默认情况下,根据固件、拓扑和位置信息分配固定的名称。
- 要点:如果没有一致的设备命名,Linux 内核通过组合固定前缀和索引来为网络接口分配名称。当内核初始化网络设备时,索引会增加。例如:eth0 代表启动时探测到的第一个以太网设备。如果您在系统中添加了另一个网络接口控制器,则内核设备名称的分配不再固定,因为重启后,设备可以以不同的顺序初始化。在这种情况下,内核可以以不同的方式命名设备。
- 列表:设备名称在重启后是稳定的。
- 列表:即使添加或删除了硬件,设备名称也会保持不变。
- 列表:因此,有问题的硬件可以被无缝地替换。
- 列表:网络命名是无状态的,不需要显式配置文件。
- 列表:设置 net.ifnames=0 (红帽知识库解决方案)是安全的。
- 注意:警告 通常,红帽不支持禁用了一致设备命名的系统。
1.1. udev 设备管理器如何重命名网络接口
- 要点:udev 设备管理器处理一组规则,以便为网络接口实施一致的命名方案。
- 要点:规则文件的顺序:
- 列表:只在 Dell 系统上:/usr/lib/udev/rules.d/71-biosdevname.rules 只有安装了 biosdevname 软件包,且规则文件定义了 biosdevname 工具根据其命名策略重命名了接口,如果其没有在之前的步骤中被重命名,该文件才存在。 注意 仅在 Dell 系统上安装和使用 biosdevname。
- 列表:/usr/lib/udev/rules.d/75-net-description.rules 此文件定义了 udev 如何检查网络接口,并在 udev-internal 变量中设置属性。然后,这些变量由 /usr/lib/udev/rules.d/80-net-setup-link.rules 文件在下一步中进行处理。其中一些属性可以未定义。
- 列表:/usr/lib/udev/rules.d/80-net-setup-link.rules 此文件调用 udev 服务的 net_setup_link builtin,并且 udev 根据 /usr/lib/systemd/network/99-default.link 文件中 NamePolicy 参数中策略的顺序重命名接口。 如果没有应用任何策略,则 udev 不会重命名接口。
- 列表:为什么 systemd 网络接口名称在主 RHEL 版本之间有所不同(红帽知识库)
- 列表:网络接口命名策略
- 注意:注意 仅在 Dell 系统上安装和使用 biosdevname。
1.2. 网络接口命名策略
- 要点:默认情况下,udev 设备管理器使用 /usr/lib/systemd/network/99-default.link 文件来确定它如何重命名接口。此文件中的 NamePolicy 参数定义 udev 应用哪个命名策略,以及以什么顺序。
- 要点:默认顺序:
- 列表:udev 设备管理器如何重命名网络接口
- 命令/配置摘录:
NamePolicy=keep kernel database onboard slot path- 表格样本(共 8 行):
- policy | 描述 | 名称示例
- keep | 如果设备在用户空间中已有分配的名称,则 udev 不会重命名此设备。例如,如果在创建设备期间或通过重命名操作分配了名称,则会出现这种情况。
- kernel | 如果内核表示设备名称是可预测的,则 udev 不会重命名这个设备。 | lo
- database | 此策略根据 udev 硬件数据库中的映射分配名称。详情请查看 hwdb (7) 手册页。 | idrac
1.3. 网络接口命名方案
- 要点:udev 设备管理器使用设备驱动程序提供的某些稳定的接口属性,来生成一致的设备名称。
- 要点:如果新的 udev 版本更改了服务如何为某些接口创建名称的方式,红帽会添加一个新的方案版本,并在您系统上的 systemd.net-naming-scheme (7) 手册页中记录详细信息。默认情况下,Red Hat Enterprise Linux (RHEL) 10 使用 rhel-10.0 命名方案,即使您安装或更新到了 RHEL 的更高次版本。
- 列表:切换网络接口命名方案
- 注意:注意 在 RHEL 10 上,您也可以使用所有 rhel-8.* 和 rhel-9.* 命名方案。
1.4. 切换到不同的网络接口命名方案
- 要点:默认情况下,RHEL 10 使用 rhel-10.0 命名方案,即使您安装或升级到更新的 RHEL 次版本。虽然在大多数情况下,默认命名方案适合使用,但可能存在切换到其他方案版本的原因。
- 要点:您必须更改命名方案时的示例:
- 列表:如果其向接口名称添加了额外的属性(如插槽号),则新方案可以帮助更好地识别设备。
- 列表:新方案可以防止 udev 回退到内核分配的设备名称(eth*)。如果驱动程序没有为两个或多个接口提供足够的唯一属性,来为它们生成唯一名称,则会发生这种情况。
- 列表:您可以访问服务器的控制台。
- 列表:列出网络接口: # ip link show 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ... 记录接口的 MAC 地址。
- 列表:可选:显示网络接口的 ID_NET_NAMING_SCHEME 属性,来识别 RHEL 当前使用的命名方案: # udevadm info --query=property --property=ID_NET_NAMING_SCHEME /sys/class/net/eno1 ID_NET_NAMING_SCHEME=rhel-10.0 请注意,属性在 lo loopback 设备上不可用。
- 列表:将 net.naming-scheme=<scheme> 选项附加到所有安装的内核的命令行中,例如: # grubby --update-kernel=ALL --args=net.naming-scheme=rhel-10.1
- 命令/配置摘录:
# ip link show 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
# udevadm info --query=property --property=ID_NET_NAMING_SCHEME /sys/class/net/eno1 ID_NET_NAMING_SCHEME=rhel-10.01.5. 在安装过程中为以太网接口自定义前缀
- 要点:如果您不想将默认 device-naming 策略用于以太网接口,您可以在 Red Hat Enterprise Linux (RHEL)安装过程中设置一个自定义设备前缀。
- 要点:如果您在安装过程中设置了设备前缀,则 udev 服务在安装后对以太网接口使用 <prefix><index> 格式。例如,如果您设置了前缀 net,服务会将名称 net0、net1 等分配给以太网接口。
- 列表:前缀由 ASCII 字符组成。
- 列表:前缀是一个字母数字字符串。
- 列表:前缀少于 16 个字符。
- 列表:前缀不会与任何其他熟知的网络接口前缀冲突,如 eth、eno、ens 和 em。
- 列表:引导 Red Hat Enterprise Linux 安装介质。
- 列表:在引导管理器中,请按照以下步骤操作: 选择 Install Red Hat Enterprise Linux <version> 条目。 按 Tab 编辑条目。 将 net.ifnames.prefix=<prefix> 追加到在内核选项中。 按 Enter 启动安装程序。
- 命令/配置摘录:
# ip link show ... 2: net0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...- 注意:重要 只有您在 RHEL 安装过程中设置了前缀,红帽才支持带有自定义以太网前缀的系统。不支持在已部署的系统上使用 prefixdevname 工具。
1.6. 使用 udev 规则配置用户定义的网络接口名称
- 要点:您可以使用 udev 规则来实现反映您机构要求的自定义网络接口名称。
- 要点:流程
- 列表:识别您要重命名的网络接口: # ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ... 记录接口的 MAC 地址。
- 列表:显示接口的设备类型 ID: # cat /sys/class/net/enp1s0/type 1
- 列表:创建 /etc/udev/rules.d/70-persistent-net.rules 文件,并为您要重命名的每个接口添加一个规则: SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="<MAC_address>",ATTR{type}=="<device_type_id>",NAME="<new_interface_name>" 重要 如果您在引导过程中需要一致的设备名称,则只使用 70-persistent-net.rules 作为文件名。如果您重新生成 RAM 磁盘镜像,则 dracut 工具会在 initrd 镜像中添加具有此名称的文件。 例如,使用以下规则将 MAC 地址为 0…
- 列表:可选:重新生成 initrd RAM 磁盘镜像: # dracut -f 只有在 RAM 磁盘中需要网络功能时才需要这一步。例如,如果 root 文件系统存储在网络设备上,如 iSCSI,则是这种情况。
- 列表:确定哪个 NetworkManager 连接配置文件使用您要重命名的接口: # nmcli -f device,name connection show DEVICE NAME enp1s0 example_profile ...
- 列表:在连接配置文件中取消 connection.interface-name 属性的设置: # nmcli connection modify example_profile connection.interface-name ""
- 命令/配置摘录:
# ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
# cat /sys/class/net/enp1s0/type 1- 注意:重要 如果您在引导过程中需要一致的设备名称,则只使用 70-persistent-net.rules 作为文件名。如果您重新生成 RAM 磁盘镜像,则 dracut 工具会在 initrd 镜像中添加具有此名称的文件。
1.7. 使用 systemd 链接文件配置用户定义的网络接口名称
- 要点:您可以使用 systemd 链接文件来实现反映您机构要求的自定义网络接口名称。
- 要点:先决条件
- 列表:NetworkManager 不管理此接口。
- 列表:识别您要重命名的网络接口: # ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ... 记录接口的 MAC 地址。
- 列表:如果不存在,请创建 /etc/systemd/network/ 目录: # mkdir -p /etc/systemd/network/
- 列表:对于您要重命名的每个接口,请在 /etc/systemd/network/ 目录中,使用如下内容创建一个 70-*.link 文件: [Match] MACAddress=<MAC_address> [Link] Name=<new_interface_name> 重要 使用具有 70- 前缀的文件名,使文件名与基于 udev 规则的解决方案一致。 例如,使用以下内容创建 /etc/systemd/network/70-provider0.link 文件,将 MAC 地址为 00:00:5e:00:53:1a 的接口重命名为 provider0 : [Match] MACAddress=00:00:5e:00:53:1a [Lin…
- 列表:可选:重新生成 initrd RAM 磁盘镜像: # dracut -f 只有在 RAM 磁盘中需要网络功能时才需要这一步。例如,如果 root 文件系统存储在网络设备上,如 iSCSI,则是这种情况。
- 列表:确定哪个 NetworkManager 连接配置文件使用您要重命名的接口: # nmcli -f device,name connection show DEVICE NAME enp1s0 example_profile ...
- 命令/配置摘录:
# ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
# mkdir -p /etc/systemd/network/- 注意:重要 使用具有 70- 前缀的文件名,使文件名与基于 udev 规则的解决方案一致。
1.8. 使用 systemd 链接文件将替代名称分配给网络接口
- 要点:通过替代接口命名,内核可以将额外名称分配给网络接口。您可以使用这些替代名称,方式与需要网络接口名称的命令中的普通接口名称相同。
- 要点:先决条件
- 列表:您必须对替代名称使用 ASCII 字符。
- 列表:备用名称必须小于 128 个字符。
- 列表:显示网络接口名称及其 MAC 地址: # ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ... 记录您要为其分配替代名称的接口的 MAC 地址。
- 列表:如果不存在,请创建 /etc/systemd/network/ 目录: # mkdir -p /etc/systemd/network/
- 列表:对于必须有备用名称的每个接口,在 /etc/systemd/network/ 目录中创建一个具有唯一名称和 .link 后缀的 /usr/lib/systemd/network/99-default.link 文件的副本,例如: # cp /usr/lib/systemd/network/99-default.link /etc/systemd/network/98-lan.link
- 列表:修改您在上一步中创建的文件。按如下所示重写 [Match] 部分,并将 AlternativeName 条目附加到 [Link] 部分: [Match] MACAddress=<MAC_address> [Link] ... AlternativeName=<alternative_interface_name_1> AlternativeName=<alternative_interface_name_2> AlternativeName=<alternative_interface_name_n> 例如,使用以下内容创建 /etc/systemd/network/70-altname.link 文件,来将 provider 作…
- 命令/配置摘录:
# ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
# mkdir -p /etc/systemd/network/第 2 章 配置以太网连接
- 要点:NetworkManager 为主机上安装的每个以太网适配器创建一个连接配置文件。默认情况下,此配置文件将 DHCP 用于 IPv4 和 IPv6 连接。
- 要点:修改自动创建的配置集,或在以下情况下添加新配置集:
- 列表:网络需要自定义设置,如静态 IP 地址配置。
- 列表:您需要多个配置文件,因为主机在不同的网络中漫游。
- 列表:在命令行中使用 nmcli 配置连接。
- 列表:使用 nmtui 在基于文本的用户界面中配置连接。
- 列表:使用 GNOME Settings 菜单在图形界面中配置连接。
- 列表:使用 nmstatectl 通过 Nmstate API 配置连接。
- 注意:注意 如果要对运行在 Microsoft Azure 云中的主机手动配置以太网连接,请禁用 cloud-init 服务或将其配置为忽略从云环境检索到的网络设置。否则,cloud-init 在下次重启时会覆盖您手动配置的网络设置。
2.1. 使用 nmcli 配置以太网连接
- 要点:如果您通过以太网将主机连接到网络,您可以使用 nmcli 工具在命令行上管理连接的设置。
- 要点:先决条件
- 列表:服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
- 列表:列出 NetworkManager 连接配置文件: # nmcli connection show NAME UUID TYPE DEVICE Wired connection 1 a5eb6490-cc20-3668-81f8-0314a27f3f75 ethernet enp1s0 默认情况下,NetworkManager 为主机中的每个 NIC 创建一个配置文件。如果您计划仅将这个 NIC 连接到特定的网络,请调整自动创建的配置文件。如果您计划使用不同的设置将这个 NIC 连接到网络,请为每个网络创建单独的配置文件。
- 列表:如果要创建额外的连接配置文件,请输入: # nmcli connection add con-name <connection-name> ifname <device-name> type ethernet 跳过此步骤来修改现有的配置文件。
- 列表:可选:重命名连接配置文件: # nmcli connection modify "Wired connection 1" connection.id "Internal-LAN" 在有多个配置文件的主机上,有意义的名称可以更容易识别配置文件的用途。
- 列表:显示连接配置文件的当前设置: # nmcli connection show Internal-LAN ... connection.interface-name: enp1s0 connection.autoconnect: yes ipv4.method: auto ipv6.method: auto ...
- 列表:配置 IPv4 设置: 要使用 DHCP,请输入: # nmcli connection modify Internal-LAN ipv4.method auto 如果 ipv4.method 已设置为 auto(默认),请跳过这一步。 要设置静态 IPv4 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入: # nmcli connection modify Internal-LAN ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
- 命令/配置摘录:
# nmcli connection show NAME UUID TYPE DEVICE Wired connection 1 a5eb6490-cc20-3668-81f8-0314a27f3f75 ethernet enp1s0
# nmcli connection add con-name <connection-name> ifname <device-name> type ethernet2.2. 使用 nmtui 配置以太网连接
- 要点:如果您将主机连接到以太网网络,您可以在基于文本的用户界面中管理连接的设置。使用 nmtui 应用程序创建新配置文件,并在没有图形界面的主机上更新现有配置文件。
- 要点:先决条件
- 列表:服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
- 列表:如果您不知道连接中使用的网络设备名称,显示可用的设备: # nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unavailable -- ...
- 列表:启动 nmtui : # nmtui
- 列表:选择 Edit a connection,然后按 Enter。
- 列表:选择是否添加新连接配置文件或修改现有连接配置文件: 要创建新配置文件: 按 Add。 从网络类型列表中选择 Ethernet,然后按 Enter 。 要修改现有的配置文件,请从列表中选择配置文件,然后按 Enter。
- 列表:要创建新配置文件: 按 Add。 从网络类型列表中选择 Ethernet,然后按 Enter 。
- 命令/配置摘录:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unavailable -- ...
# nmtui- 注意:注意 在 nmtui 中: 使用光标键导航。 选择一个按钮并按 Enter 键。 使用 空格 选择和清除复选框。 要返回上一个屏幕,请使用 ESC。
2.3. 使用控制中心配置以太网连接
- 要点:如果您通过以太网将主机连接到网络,您可以使用 GNOME Settings 菜单,通过图形界面管理连接的设置。
- 要点:请注意,control-center 不支持像 nmcli 工具那样多的配置选项。
- 列表:服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
- 列表:已安装了 GNOME。
- 列表:按 Super 键,输入 Settings,然后按 Enter 键。
- 列表:在左侧导航中选择 Network。
- 列表:选择是否添加新连接配置文件或修改现有连接配置文件: 要创建新配置文件,请单击 Ethernet 条目旁边的 + 按钮。 要修改现有配置文件,请点击配置文件条目旁的齿轮图标。
- 列表:要创建新配置文件,请单击 Ethernet 条目旁边的 + 按钮。
- 命令/配置摘录:
# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:17:b8:b6 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/64 scope global noprefixroute valid_lft forever preferred_lft forever
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 1022.4. 使用nmstatectl 和接口名称配置具有静态 IP 地址的以太网连接
- 要点:您可以使用声明 Nmstate API 配置带有静态 IP 地址、网关和 DNS 设置的以太网连接,并将它们分配给指定的接口名称。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
- 列表:nmstate 软件包已安装。
- 列表:创建包含以下内容的 YAML 文件,如 ~/create-ethernet-profile.yml : --- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false routes: config: - destin…
- 列表:静态 IPv4 地址 - 192.0.2.1,子网掩码为 /24
- 列表:静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
- 列表:IPv4 默认网关 - 192.0.2.254
- 命令/配置摘录:
--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: enp1s0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: enp1s0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
--- interfaces: - name: <profile_name> type: ethernet identifier: mac-address mac-address: <mac_address> ...2.5. 使用 nmstatectl 和 PCI 地址配置具有静态 IP 地址的以太网连接
- 要点:您可以使用声明 Nmstate API 配置带有静态 IP 地址、网关和 DNS 设置的以太网连接,并根据其 PCI 地址将它们分配给设备。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:服务器配置中存在一个物理以太网网络接口控制器(NIC)。
- 列表:您知道设备的 PCI 地址。您可以使用 ethtool -i <interface_name> | grep bus-info 命令显示 PCI 地址。
- 列表:nmstate 软件包已安装。
- 列表:创建包含以下内容的 YAML 文件,如 ~/create-ethernet-profile.yml : --- interfaces: - name: <profile_name> type: ethernet state: up identifier: pci-address pci-address: 0000:00:14.3 ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length:…
- 列表:静态 IPv4 地址 - 192.0.2.1,子网掩码为 /24
- 列表:静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
- 命令/配置摘录:
--- interfaces: - name: <profile_name> type: ethernet state: up identifier: pci-address pci-address: 0000:00:14.3 ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: <profile_name> - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: <profile_name> dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
# nmstatectl apply ~/create-ethernet-profile.yml2.6. 使用 network RHEL 系统角色和接口名称,配置具有静态 IP 地址的以太网连接
- 要点:您可以使用 network RHEL 系统角色配置具有静态 IP 地址、网关和 DNS 的以太网连接,并将它们分配给指定的接口名称。
- 要点:要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:物理或者虚拟以太网设备在服务器配置中存在。
- 列表:受管节点使用 NetworkManager 配置网络。
- 列表:编辑 ~/inventory 文件,并将特定于主机的设置附加到主机条目中: managed-node-01.example.com interface=enp1s0 ip_v4=192.0.2.1/24 ip_v6=2001:db8:1::1/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe managed-node-02.example.com interface=enp1s0 ip_v4=192.0.2.2/24 ip_v6=2001:db8:1::2/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe
- 命令/配置摘录:
managed-node-01.example.com interface=enp1s0 ip_v4=192.0.2.1/24 ip_v6=2001:db8:1::1/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe managed-node-02.example.com interface=enp1s0 ip_v4=192.0.2.2/24 ip_v6=2001:db8:1::2/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe
--- - name: Configure the network hosts: managed-node-01.example.com,managed-node-02.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: "{{ interface }}" interface_name: "{{ interface }}" type: ethernet autoconnect: yes ip: address: - "{{ ip_v4 }}" - "{{ ip_v6 }}" gateway4: "{{ gateway_v4 }}" gateway6: "{{ gateway_v6 }}" dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com state: up2.7. 使用 network RHEL 系统角色和设备路径,配置具有静态 IP 地址的以太网连接
- 要点:您可以使用 network RHEL 系统角色配置带有静态 IP 地址、网关和 DNS 设置的以太网连接,并根据其路径而不是其名称将它们分配给设备。
- 要点:要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:服务器配置中有一个物理或者虚拟以太网设备。
- 列表:受管节点使用 NetworkManager 配置网络。
- 列表:您知道设备的路径。您可以使用 udevadm info /sys/class/net/<device_name> | grep ID_PATH= 命令显示设备路径。
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: example match: path: - pci-0000:00:0[1-3].0 - '&!pci-0000:00:02.0' type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
$ ansible-playbook --syntax-check ~/playbook.yml2.8. 使用 nmstatectl 和接口名称配置具有动态 IP 地址的以太网连接
- 要点:您可以使用声明 Nmstate API 配置带有静态 IP 地址、网关和 DNS 设置的以太网连接,并根据其 PCI 地址将配置分配给设备。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
- 列表:网络中有 DHCP 服务器。
- 列表:nmstate 软件包已安装。
- 列表:创建包含以下内容的 YAML 文件,如 ~/create-ethernet-profile.yml : --- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true 这些设置为 enp1s0 设备…
- 列表:可选:您可以在 interfaces 属性中定义 identifier: mac-address 和 mac-address: <mac_address> 属性,来通过其 MAC 地址而不是其名称来识别网络接口卡,例如: --- interfaces: - name: <profile_name> type: ethernet identifier: mac-address mac-address: <mac_address> ...
- 列表:将设置应用到系统: # nmstatectl apply ~/create-ethernet-profile.yml
- 命令/配置摘录:
--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true
--- interfaces: - name: <profile_name> type: ethernet identifier: mac-address mac-address: <mac_address> ...2.9. 使用 nmstatectl 和 PCI 地址配置具有动态 IP 地址的以太网连接
- 要点:您可以使用声明 Nmstate API 配置 DHCP 和 IPv6 无状态地址自动配置(SLAAC)的以太网连接,并根据其 PCI 地址将配置分配给设备。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:服务器配置中存在一个物理以太网设备。
- 列表:网络中有 DHCP 服务器和 SLAAC。
- 列表:受管主机使用 NetworkManager 配置网络。
- 列表:您知道设备的 PCI 地址。您可以使用 ethtool -i <interface_name> | grep bus-info 命令显示 PCI 地址。
- 列表:nmstate 软件包已安装。
- 列表:创建包含以下内容的 YAML 文件,如 ~/create-ethernet-profile.yml : --- interfaces: - name: <profile_name> type: ethernet state: up identifier: pci-address pci-address: 0000:00:14.3 ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true a…
- 命令/配置摘录:
--- interfaces: - name: <profile_name> type: ethernet state: up identifier: pci-address pci-address: 0000:00:14.3 ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true
# nmstatectl apply ~/create-ethernet-profile.yml2.10. 使用 network RHEL 系统角色和接口名称配置具有动态 IP 地址的以太网连接
- 要点:您可以使用 network RHEL 系统角色配置以太网连接,该连接从 DHCP 服务器检索其 IP 地址、网关和 DNS 设置,以及 IPv6 无状态地址自动配置(SLAAC)。使用此角色,您可以将连接配置文件分配给指定的接口名称。
- 要点:要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:服务器配置中有一个物理或者虚拟以太网设备。
- 列表:网络中有 DHCP 服务器和 SLAAC。
- 列表:受管节点使用 NetworkManager 服务来配置网络。
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with dynamic IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 interface_name: enp1s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
$ ansible-playbook --syntax-check ~/playbook.yml2.11. 使用 network RHEL 系统角色和设备路径,配置具有动态 IP 地址的以太网连接
- 要点:通过使用 network RHEL 系统角色,您可以配置一个以太网连接,来从 DHCP 服务器和 IPv6 无状态地址自动配置(SLAAC)检索其 IP 地址、网关和 DNS 设置。角色可以按设备的路径分配配置文件。
- 要点:要将 Red Hat Enterprise Linux 主机连接到以太网网络,请为网络设备创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:服务器配置中有一个物理或者虚拟以太网设备。
- 列表:网络中有 DHCP 服务器和 SLAAC。
- 列表:受管主机使用 NetworkManager 配置网络。
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with dynamic IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: example match: path: - pci-0000:00:0[1-3].0 - '&!pci-0000:00:02.0' type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
$ ansible-playbook --syntax-check ~/playbook.yml2.12. 按接口名称,使用单个连接配置文件配置多个以太网接口
- 要点:NetworkManager 支持再连接配置文件中对接口名称使用通配符。使用此功能,您可以为多个以太网接口创建一个配置文件,这在带有动态 IP 地址分配的以太网网络间出现时很有用。
- 要点:先决条件
- 列表:服务器配置中存在多个物理或虚拟以太网设备。
- 列表:网络中有 DHCP 服务器。
- 列表:主机上不存在连接配置文件。
- 列表:添加可应用于以 enp 开头的所有接口名称的连接配置文件: # nmcli connection add con-name "Wired connection 1" connection.multi-connect multiple match.interface-name enp type ethernet*
- 列表:显示单个连接配置文件的所有设置: # nmcli connection show "Wired connection 1" connection.id: Wired connection 1 ... connection.multi-connect: 3 (multiple) match.interface-name: enp* ... 3 表示接口在特定的时间可以被多次激活。连接配置文件使用与 match.interface-name 参数中的模式匹配的所有设备,因此连接配置文件具有相同的通用唯一识别符(UUID)。
- 列表:显示连接的状态: # nmcli connection show NAME UUID TYPE DEVICE ... Wired connection 1 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp7s0 Wired connection 1 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp8s0 Wired connection 1 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp9s0
- 命令/配置摘录:
# nmcli connection add con-name "Wired connection 1" connection.multi-connect multiple match.interface-name enp type ethernet*
# nmcli connection show "Wired connection 1" connection.id: Wired connection 1 ... connection.multi-connect: 3 (multiple) match.interface-name: enp* ...2.13. 使用 PCI ID 为多个以太网接口配置一个连接配置文件
- 要点:PCI ID 唯一标识系统中的设备。连接配置文件可以通过将接口匹配到 PCI ID 的列表来添加多个设备。使用此功能,您可以将多个设备链接到一个连接配置文件。
- 要点:先决条件
- 列表:服务器配置中存在多个物理或虚拟以太网设备。
- 列表:网络中有 DHCP 服务器。
- 列表:主机上不存在连接配置文件。
- 列表:识别设备路径。例如,要显示以 enp 开头的所有接口的设备路径,请输入: # udevadm info /sys/class/net/enp* | grep ID_PATH= ... E: ID_PATH=pci-0000:07:00.0 E: ID_PATH=pci-0000:08:00.0
- 列表:添加可应用于匹配 0000:00:0[7-8].0 表达式的所有 PCI ID 的连接配置文件: # nmcli connection add type ethernet connection.multi-connect multiple match.path "pci-0000:07:00.0 pci-0000:08:00.0" con-name "Wired connection 1"
- 列表:显示连接的状态: # nmcli connection show NAME UUID TYPE DEVICE Wired connection 1 9cee0958-512f-4203-9d3d-b57af1d88466 ethernet enp7s0 Wired connection 1 9cee0958-512f-4203-9d3d-b57af1d88466 ethernet enp8s0 ...
- 命令/配置摘录:
# udevadm info /sys/class/net/enp* | grep ID_PATH= ... E: ID_PATH=pci-0000:07:00.0 E: ID_PATH=pci-0000:08:00.0
# nmcli connection add type ethernet connection.multi-connect multiple match.path "pci-0000:07:00.0 pci-0000:08:00.0" con-name "Wired connection 1"第 3 章 配置网络绑定
- 要点:网络绑定将物理和虚拟网络接口聚合到一个逻辑网络接口。内核专门处理所有操作。您可以在不同的设备类型上创建绑定,如以太网或 VLAN,以实现更高的吞吐量或冗余。
- 要点:Red Hat Enterprise Linux 为管理员提供了不同的选项来配置绑定设备。例如:
- 列表:使用 nmcli 使用命令行配置绑定连接。
- 列表:通过 RHEL web 控制台使用 Web 浏览器配置绑定连接。
- 列表:使用 nmtui 在基于文本的用户界面中配置绑定连接。
- 列表:使用 nmstatectl 通过 Nmstate API 配置绑定连接。
- 列表:使用 RHEL 系统角色在一个或多个主机上自动化绑定配置。
3.1. 了解控制器和端口接口的默认行为
- 要点:在管理绑定端口接口时了解 NetworkManager 的默认行为可帮助您更有效地对问题进行故障排除。
- 要点:默认行为:
- 列表:启动控制器接口不会自动启动端口接口。
- 列表:启动端口接口总会启动控制器接口。
- 列表:停止控制器接口也会停止端口接口。
- 列表:没有端口的控制器可以启动静态 IP 连接。
- 列表:没有端口的控制器在启动 DHCP 连接时会等待端口。
- 列表:当您添加具有载体的端口时,等待端口且具有 DHCP 连接的控制器会完成。
3.2. 上游交换机配置依赖绑定模式
- 要点:根据您要使用的绑定模式,您必须在交换机上配置端口。
- 要点:有关如何配置交换机的详情,请查看交换机文档。
- 列表:支持使用跨电缆(红帽知识库解决方案)的直接连接支持绑定。
- 注意:重要 某些网络绑定的功能,比如故障切换机制,不支持不通过网络交换机的直接电缆连接。
- 表格样本(共 9 行):
- 绑定模式 | 交换机上的配置
- 0 - balance-rr | 需要启用静态 EtherChannel,而不是协商的链路聚合控制协议(LACP)。
- 1 - active-backup | 交换机上不需要配置。
- 2 - balance-xor | 需要启用静态 EtherChannel,而不是协商的 LACP 。
3.3. 使用 nmcli 配置网络绑定
- 要点:要在命令行上配置网络绑定,请使用 nmcli 工具。
- 要点:先决条件
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作绑定的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:要将网桥或 Virtual Local Area Network (VLAN)设备用作绑定的端口,您可以在创建绑定时创建这些设备,或者预先创建它们,如: 使用 nmcli 配置网桥 使用 nmcli 配置 VLAN 标记
- 列表:使用 nmcli 配置网桥
- 列表:使用 nmcli 配置 VLAN 标记
- 列表:创建绑定接口: # nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup" 这个命令会创建一个使用 active-backup 模式、名为 bond0 的绑定。 要额外设置介质独立接口(MII)监控间隔,请在 bond.options 属性中添加 miimon=interval 选项,例如: # nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"
- 命令/配置摘录:
# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"3.4. 使用 RHEL web 控制台配置网络绑定
- 要点:如果您希望使用基于 Web 浏览器的界面管理网络设置,请使用 RHEL web 控制台配置网络绑定。
- 要点:先决条件
- 列表:已登陆到 RHEL web 控制台。
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作绑定的成员,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:要将网桥或虚拟本地区域网络(VLAN)设备用作绑定的成员,请预先创建它们,如下所述: 使用 RHEL web 控制台配置网桥 使用 RHEL web 控制台配置 VLAN 标记
- 列表:使用 RHEL web 控制台配置网桥
- 列表:使用 RHEL web 控制台配置 VLAN 标记
- 命令/配置摘录:
# cat /proc/net/bonding/bond03.5. 使用 nmtui 配置网络绑定
- 要点:nmtui 应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui 在没有图形界面的主机上配置网络绑定。
- 要点:先决条件
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作绑定的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:如果您不知道您要在其上配置网络绑定的网络设备名称,请显示可用的设备: # nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
- 列表:启动 nmtui : # nmtui
- 列表:选择 Edit a connection,然后按 Enter。
- 列表:按 Add。
- 命令/配置摘录:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
# nmtui- 注意:注意 在 nmtui 中: 使用光标键导航。 选择一个按钮并按 Enter 键。 使用 空格 选择和清除复选框。 要返回上一个屏幕,请使用 ESC。
3.6. 使用 nmstatectl 配置网络绑定
- 要点:您可以使用声明性 Nmstate API 配置网络绑定。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:根据您的环境,相应地调整 YAML 文件。例如,要使用与绑定中以太网适配器不同的设备,请调整您在绑定中使用的端口的 base-iface 属性和 type 属性。
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作绑定中的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:要将网桥或 Virtual Local Area Network (VLAN)设备用作绑定中的端口,请在 port 列表中设置接口名称,并定义对应的接口。
- 列表:nmstate 软件包已安装。
- 列表:创建一个包含以下内容的 YAML 文件,如 ~/create-bond.yml : --- interfaces: - name: bond0 type: bond state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false link-aggregation: mode: active-backup …
- 列表:绑定中的网络接口:enp1s0 和 enp7s0
- 命令/配置摘录:
--- interfaces: - name: bond0 type: bond state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false link-aggregation: mode: active-backup port: - enp1s0 - enp7s0 - name: enp1s0 type: ethernet state: up - name: enp7s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: bond0 metric: 300 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: bond0 metric: 300 dns-resolver: config: search: - example.com ser…
# nmstatectl apply ~/create-bond.yml3.7. 使用 network RHEL 系统角色配置网络绑定
- 要点:您可以使用 network RHEL 系统角色配置网络绑定,如果用于绑定的父设备的连接配置文件不存在,角色也可以创建它。
- 要点:您可以将网络接口组合在一个绑定中,以提供具有高吞吐量或冗余的逻辑接口。要配置绑定,请创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bond connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bond profile - name: bond0 type: bon…
- 列表:balance-rr (默认)
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bond connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bond profile - name: bond0 type: bond interface_name: bond0 ip: dhcp4: yes auto6: yes bond: mode: active-backup state: up # Port profile for the 1st Ethernet device - name: bond0-port1 interface_name: enp7s0 type: ethernet controller: bond0 state: up # Port profile for the 2nd Ethernet device - name: bond0-port2 interface_name: enp8s0 type: ethernet controller: bond0 state: up
$ ansible-playbook --syntax-check ~/playbook.yml3.8. 不同的网络绑定模式
- 要点:绑定将多个网络接口聚合到一个逻辑网络接口。绑定接口的行为取决于其绑定策略,也称为模式,它提供负载平衡或热待机服务。
- 要点:Linux 绑定驱动程序支持以下模式:
- 列表:值 0 :使用哈希分发策略在不进行负载均衡的情况下分发流量
- 列表:值 1: 利用负载均衡将流量分配到每个端口 使用 bonding 选项 tlb_dynamic_lb=0,此绑定模式使用 xmit_hash_policy bonding 选项来均衡传输。primary 选项定义绑定接口的首选端口。
- 列表:当使用虚拟机客户机或容器连接的网桥时,哪种绑定模式可以正常工作?(红帽知识库)
- 列表:"xmit_hash_policy" 绑定参数中不同策略的值是如何计算的?(红帽知识库)
3.9. xmit_hash_policy bonding 参数
- 要点:xmit_hash_policy 负载均衡参数在 balance-xor、802.3ad、balance-alb 和 balance-tlb 模式中选择节点选择的传输散列策略。如果 tlb_dynamic_lb 参数为 0,则仅适用于模式 5 和 6。
- 要点:tlb_dynamic_lb 可能的值为 layer2,layer2+3,layer3+4,encap2+3,encap3+4 和 vlan+srcmac。
- 表格样本(共 7 行):
- 策略或网络层 | Layer2 | Layer2+3 | Layer3+4 | encap2+3 | encap3+4 | VLAN+srcmac
- 使用 | 源和目的地 MAC 地址和以太网协议类型的 XOR | 源和目标 MAC 地址和 IP 地址的 XOR | 源和目标端口和 IP 地址的 XOR | 支持的隧道内的目的地 MAC 地址和 IP 地址的 XOR,如虚拟可扩展局域网 (VXLAN)。此模式依赖于 skb_flow_dissect() 函数来获取标头字段 | 受支持的隧道内的目标端口和 IP 地址的 XOR,如 VXLAN。此模式依赖于 skb_flow_dissect() 函数来获取标头字段 | VLAN ID 和源 MAC 厂商和源 MAC 设备的 XOR
- 流量放置 | 在同一个底层网络接口上到特定网络对等的所有流量 | 同一底层网络接口上特定 IP 地址的所有流量 | 同一底层网络接口上特定 IP 地址和端口的所有流量
- 主要选择 | 如果网络流量在同一广播域中的这个系统和多个其他系统之间 | 如果此系统和多个其他系统间的网络流量会通过默认网关 | 如果此系统和其他系统之间的网络流量使用相同的 IP 地址,但会经历多个端口 | 封装的流量在源系统和多个其它系统中使用多个 IP 地址 | 封装的流量是源系统和其它使用多个端口号的系统间 | 如果绑定承载了来自多个容器或虚拟机(VM)的网络流量,这些容器或虚拟机将其 MAC 地址直接暴露给外部网络,如网桥网络,并且您无法为模式 2 或模式 4 配置交换机。
第 4 章 配置 VLAN 标记
- 要点:Virtual Local Area Network (VLAN) 是物理网络中的一个逻辑网络。当 VLAN 接口通过接口时,VLAN 接口标签带有 VLAN ID 的数据包,并删除返回的数据包的标签。
- 要点:您可以在另一个接口(如以太网、绑定或桥接设备)上创建 VLAN 接口。这些接口称为 父接口。
- 列表:使用 nmcli 使用命令行配置 VLAN 标记。
- 列表:通过 RHEL web 控制台使用 Web 浏览器配置 VLAN 标记。
- 列表:使用 nmtui 在基于文本的用户界面中配置 VLAN 标记。
- 列表:使用 nmstatectl 通过 Nmstate API 配置连接。
- 列表:使用 RHEL 系统角色在一个或多个主机上自动化 VLAN 配置。
4.1. 使用 nmcli 配置 VLAN 标记
- 要点:您可以使用 nmcli 实用程序在命令行中配置 Virtual Local Area Network (VLAN) 标记。
- 要点:先决条件
- 列表:您计划用作虚拟 VLAN 接口的父接口支持 VLAN 标签。
- 列表:如果您在绑定接口之上配置 VLAN: 绑定的端口是上线的。 这个绑定没有使用 fail_over_mac=follow 选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。 这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。在创建绑定时,通过设置 ipv4.method=disable 和 ipv6.method=disable 选项来确保。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 列表:绑定的端口是上线的。
- 列表:这个绑定没有使用 fail_over_mac=follow 选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。
- 列表:这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。在创建绑定时,通过设置 ipv4.method=disable 和 ipv6.method=disable 选项来确保。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 列表:主机连接到的交换机被配置为支持 VLAN 标签。详情请查看您的交换机文档。
- 命令/配置摘录:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet disconnected enp1s0 bridge0 bridge connected bridge0 bond0 bond connected bond0 ...
# nmcli connection add type vlan con-name vlan10 ifname vlan10 vlan.parent enp1s0 vlan.id 104.2. 使用 nmcli 配置嵌套 VLAN
- 要点:802.1ad 是用于虚拟局域网(VLAN)标记的协议。它也被称为 Q-in-Q 标记。您可以使用此技术在单个以太网范围内创建多个 VLAN 标签。
- 要点:单个帧中有多个 VLAN 标签的好处:
- 列表:通过在 VLAN 中创建多个隔离网络段来提高网络可扩展性。这可让您将大型网络分段并组织成较小的、可管理的单元。
- 列表:通过隔离和控制不同类型的网络流量,改进了流量管理。这可以提高网络性能并减少网络拥塞。
- 列表:通过创建较小的,多个目标网络段,实现高效资源利用率。
- 列表:通过隔离网络流量,降低未授权访问敏感数据的风险,提高了安全性。
- 列表:您计划用作虚拟 VLAN 接口的父接口支持 VLAN 标签。
- 列表:如果您在绑定接口之上配置 VLAN: 绑定的端口是上线的。 这个绑定没有使用 fail_over_mac=follow 选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。 这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。在创建绑定时,通过设置 ipv4.method=disable 和 ipv6.method=disable 选项来确保。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 命令/配置摘录:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet connected enp1s0 ...
# nmcli connection add type vlan con-name vlan10 dev enp1s0 vlan.id 104.3. 使用 RHEL web 控制台配置 VLAN 标记
- 要点:如果您希望使用基于 Web 浏览器的界面管理网络设置,请使用 RHEL web 控制台配置 VLAN 标记。
- 要点:先决条件
- 列表:您计划用作虚拟 VLAN 接口的父接口支持 VLAN 标签。
- 列表:如果您在绑定接口之上配置 VLAN: 绑定的端口是上线的。 这个绑定没有使用 fail_over_mac=follow 选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。 这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。禁用 IPv4 和 IPv6 协议创建绑定以确保它。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 列表:绑定的端口是上线的。
- 列表:这个绑定没有使用 fail_over_mac=follow 选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。
- 列表:这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。禁用 IPv4 和 IPv6 协议创建绑定以确保它。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 列表:主机连接到的交换机被配置为支持 VLAN 标签。详情请查看您的交换机文档。
4.4. 使用 nmtui 配置 VLAN 标记
- 要点:nmtui 应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui 在没有图形界面的主机上配置 VLAN 标签。
- 要点:先决条件
- 列表:您计划用作虚拟 VLAN 接口的父接口支持 VLAN 标签。
- 列表:如果您在绑定接口之上配置 VLAN: 绑定的端口是上线的。 这个绑定没有使用 fail_over_mac=follow 选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。 这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。在创建绑定时,通过设置 ipv4.method=disable 和 ipv6.method=disable 选项来确保。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 列表:绑定的端口是上线的。
- 列表:这个绑定没有使用 fail_over_mac=follow 选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。
- 列表:这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。在创建绑定时,通过设置 ipv4.method=disable 和 ipv6.method=disable 选项来确保。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 列表:主机连接到的交换机被配置为支持 VLAN 标签。详情请查看您的交换机文档。
- 命令/配置摘录:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unavailable -- ...
# nmtui- 注意:注意 在 nmtui 中: 使用光标键导航。 选择一个按钮并按 Enter 键。 使用 空格 选择和清除复选框。 要返回上一个屏幕,请使用 ESC。
4.5. 使用 nmstatectl 配置 VLAN 标记
- 要点:您可以使用声明性 Nmstate API 来配置 Virtual Local Area Network VLAN。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:根据您的环境,相应地调整 YAML 文件。例如,要使用与 VLAN 中以太网适配器不同的设备,请调整您在 VLAN 中使用的端口的 base-iface 属性和 type 属性。
- 列表:要将以太网设备用作 VLAN 中的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:nmstate 软件包已安装。
- 列表:创建一个包含以下内容的 YAML 文件,如 ~/create-vlan.yml : --- interfaces: - name: vlan10 type: vlan state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false vlan: base-iface: enp1s0 id: 10 - nam…
- 列表:静态 IPv4 地址 - 192.0.2.1,子网掩码为 /24
- 列表:静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
- 列表:IPv4 默认网关 - 192.0.2.254
- 命令/配置摘录:
--- interfaces: - name: vlan10 type: vlan state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false vlan: base-iface: enp1s0 id: 10 - name: enp1s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: vlan10 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: vlan10 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
# nmstatectl apply ~/create-vlan.yml4.6. 使用 network RHEL 系统角色配置 VLAN 标记
- 要点:您可以使用 network RHEL 系统角色配置 VLAN 标记,如果 VLAN 的父设备的连接配置文件不存在,则角色也可以创建它。
- 要点:如果您的网络使用 Virtual Local Area Networks (VLAN)将网络流量分隔到逻辑网络中,请创建一个 NetworkManager 连接配置文件来配置 VLAN 标记。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: VLAN connection profile with Ethernet port ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Ethernet profile - name: enp1s0 type: eth…
- 列表:验证 playbook 语法: $ ansible-playbook --syntax-check ~/playbook.yml 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
- 列表:运行 playbook: $ ansible-playbook ~/playbook.yml
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: VLAN connection profile with Ethernet port ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Ethernet profile - name: enp1s0 type: ethernet interface_name: enp1s0 autoconnect: yes state: up ip: dhcp4: no auto6: no # VLAN profile - name: enp1s0.10 type: vlan vlan: id: 10 ip: dhcp4: yes auto6: yes parent: enp1s0 state: up
$ ansible-playbook --syntax-check ~/playbook.yml- 注意:注意 如果 VLAN 设备需要一个 IP 地址、默认网关和 DNS 设置,请在 VLAN 设备上,而不是在父设备上配置它们。
4.7. 使用网桥上的 VLAN 过滤,使用单个 uplink 将虚拟机映射到外部 VLAN
- 要点:启用 VLAN 过滤,以通过单一网桥管理多个虚拟机网络。这取代了低效的 bridge-per-VLAN 配置,并提高了可扩展性。对于需要类似硬件的 VLAN 隔离的环境,VLAN 过滤至关重要。
- 要点:您不需要将主机上的任何流量接受点(TAP)设备添加到网桥。在虚拟机启动时,libvirtd 服务会动态添加它们。
4.7.1. 使用 nmcli在网桥上配置 VLAN 过滤
- 要点:要使 VLAN 与虚拟机不可见,请在虚拟机使用的网桥上启用 VLAN 过滤,并在物理接口上配置 VLAN ID。
- 要点:先决条件
- 列表:您创建了网桥设备。
- 列表:您知道网桥设备的名称,如 bridge0。
- 列表:识别定义 bridge0 设备的 NetworkManager 连接配置文件: # nmcli -f GENERAL.CONNECTION device show bridge0 GENERAL.CONNECTION: bridge0 在示例中,配置集名称与设备名称相同。
- 列表:修改 bridge0 配置集并启用 VLAN 过滤: # nmcli connection modify bridge0 bridge.vlan-filtering yes
- 列表:识别在 bridge0 配置集中配置为端口的物理接口: # nmcli -f BRIDGE.SLAVES device show bridge0 BRIDGE.SLAVES: enp1s0 vnet0 vnet1 ... 在示例中,enp1s0 是物理接口。
- 列表:识别将 enp1s0 配置为网桥端口的配置集: # nmcli -f GENERAL.CONNECTION device show enp1s0 GENERAL.CONNECTION: bridge0-port0
- 命令/配置摘录:
# nmcli -f GENERAL.CONNECTION device show bridge0
GENERAL.CONNECTION: bridge04.7.2. 使用 nmstatectl配置带有 VLAN 过滤的桥接
- 要点:您可以使用声明性 Nmstate API 来配置带有 VLAN 过滤的网络桥接,并在物理接口上分配 VLAN ID。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:您知道应成为网桥中端口的物理接口的名称。
- 列表:nmstate 软件包已安装。
- 列表:创建包含以下内容的 YAML 文件,如 ~/create-bridge-with-vlan-filtering.yml : --- interfaces: - name: bridge0 type: linux-bridge state: up ipv4: enabled: false dhcp: false forwarding: false ipv6: enabled: false dhcp: false autoconf: false bridge: port: - name: enp1s0 vlan: enable-native: false mode: trunk trunk-tags:…
- 列表:网桥中的物理网络接口: enp1s0
- 列表:enp1s0 上允许的 VLAN 标签:10 和 20
- 列表:将设置应用到系统: # nmstatectl apply ~/create-bridge-with-vlan-filtering.yml
- 命令/配置摘录:
--- interfaces: - name: bridge0 type: linux-bridge state: up ipv4: enabled: false dhcp: false forwarding: false ipv6: enabled: false dhcp: false autoconf: false bridge: port: - name: enp1s0 vlan: enable-native: false mode: trunk trunk-tags: - id: 10 - id: 20
# nmstatectl apply ~/create-bridge-with-vlan-filtering.yml4.7.3. 在带有现有网桥的 libvirt 中创建一个虚拟网络
- 要点:要启用虚拟机使用启用了 VLAN 过滤的 bridge0 设备,请将每个 VLAN ID 的虚拟网络添加到使用此网桥的 libvirtd 服务。
- 要点:先决条件
- 列表:您已安装了 libvirt 软件包。
- 列表:您已启用并启动 libvirtd 服务。
- 列表:您在桥接中配置了 VLAN 过滤,例如使用以下方法之一: nmcli nmstatectl
- 列表:nmcli
- 列表:nmstatectl
- 列表:您知道网桥设备的名称,如 bridge0。
- 命令/配置摘录:
<network> <name>vlan10-bridge</name> <forward mode="bridge" /> <bridge name="bridge0" /> <vlan> <tag id="10" /> </vlan> </network>
# virsh net-define ~/vlan10-bridge.xml4.7.4. 配置虚拟机以使用 VLAN 定义的虚拟网络
- 要点:在创建了带有 VLAN 过滤和适用于各个 VLAN 的虚拟网络的网桥后,将虚拟机分配给网络。虚拟机不需要任何修改作为 VLAN 的成员,因为 libvirtd 服务会相应地管理 VLAN 标记,网桥会相应地过滤流量。
- 要点:前提条件
- 列表:您已为 libvirtd 服务中的每个 VLAN 配置虚拟网络。
- 列表:例如,要创建新虚拟机并将其配置为使用 vlan10-bridge 网络,请在创建虚拟机时将-- network network:vlan10-bridge 选项传给 virt-install 命令: # virt-install ... --network network:vlan10-bridge
- 列表:要更改现有虚拟机的网络设置: 将虚拟机的网络接口连接到虚拟网络,例如 # virt-xml <VM_name> --edit --network network=vlan10-bridge 关闭虚拟机,并重新启动它: # virsh shutdown <VM_name> # virsh start <VM_name>
- 列表:将虚拟机的网络接口连接到虚拟网络,例如 # virt-xml <VM_name> --edit --network network=vlan10-bridge
- 列表:关闭虚拟机,并重新启动它: # virsh shutdown <VM_name> # virsh start <VM_name>
- 列表:显示主机上虚拟机的虚拟网络接口: # virsh domiflist <VM_name> Interface Type Source Model MAC ------------------------------------------------------------------- vnet1 bridge vlan10-bridge virtio 52:54:00:c5:98:1c
- 命令/配置摘录:
# virt-install ... --network network:vlan10-bridge
# virt-xml <VM_name> --edit --network network=vlan10-bridge第 5 章 配置网络桥接
- 要点:网桥是一个链路层设备,它通过使用 MAC 地址表来在网络之间转发流量。例如,您可以使用软件网桥将虚拟机连接到与主机相同的网络。
- 要点:桥接需要在桥接应该连接的每个网络中有一个网络设备。当您配置网桥时,网桥被称为 控制器,其使用的设备被称为端口。
- 列表:物理和虚拟以太网设备
- 列表:网络绑定
- 列表:虚拟局域网(VLAN)设备
- 列表:使用 nmcli 使用命令行配置 VLAN 标记。
- 列表:通过 RHEL web 控制台使用 Web 浏览器配置 VLAN 标记。
- 列表:使用 nmtui 在基于文本的用户界面中配置 VLAN 标记。
5.1. 使用 nmcli 配置网桥
- 要点:要在命令行上配置网桥,请使用 nmcli 工具。
- 要点:先决条件
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作网桥的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:要将 bond 或 Virtual Local Area Network (VLAN)设备用作网桥的端口,您可以在创建桥接时创建这些设备,或者预先创建它们,如: 使用 nmcli 配置网络绑定 使用 nmcli 配置 VLAN 标记
- 列表:使用 nmcli 配置网络绑定
- 列表:使用 nmcli 配置 VLAN 标记
- 列表:创建网桥接口: # nmcli connection add type bridge con-name bridge0 ifname bridge0 此命令创建一个名为 bridge0 的网桥。
- 命令/配置摘录:
# nmcli connection add type bridge con-name bridge0 ifname bridge0
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet disconnected -- enp8s0 ethernet disconnected -- bond0 bond connected bond0 bond1 bond connected bond1 ...5.2. 使用 RHEL web 控制台配置网桥
- 要点:如果您希望通过基于 Web 浏览器的界面管理网络设置,请使用 RHEL web 控制台来配置网桥。
- 要点:前提条件
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作网桥的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:要将 bond 或 Virtual Local Area Network (VLAN)设备用作网桥的端口,您可以在创建桥接时创建这些设备,或者预先创建它们,如: 使用 RHEL web 控制台配置网络绑定 使用 RHEL web 控制台配置 VLAN 标记
- 列表:使用 RHEL web 控制台配置网络绑定
- 列表:使用 RHEL web 控制台配置 VLAN 标记
- 列表:在屏幕左侧的导航中选择 Networking 选项卡。
5.3. 使用 nmtui 配置网桥
- 要点:nmtui 应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui 在没有图形界面的主机上配置网桥。
- 要点:先决条件
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作网桥的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:如果您不知道您要在其上配置网桥的网络设备名称,请显示可用的设备: # nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
- 列表:启动 nmtui : # nmtui
- 列表:选择 Edit a connection,点 Enter。
- 列表:按 Add。
- 命令/配置摘录:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
# nmtui- 注意:注意 在 nmtui 中: 使用光标键导航。 选择一个按钮并按 Enter 键。 使用 空格 选择和清除复选框。 要返回上一个屏幕,请使用 ESC。
5.4. 使用 nmstatectl 配置网桥
- 要点:您可以使用声明性 Nmstate API 来配置网桥。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:根据您的环境,相应地调整 YAML 文件。例如,要使用与网桥中以太网适配器不同的设备,请调整您在网桥中使用的端口的 base-iface 属性和 type 属性。
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:要将以太网设备用作网桥中的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 列表:要将绑定或 Virtual Local Area Network (VLAN)设备用作网桥中的端口,请在 port 列表中设置接口名称,并定义对应的接口。
- 列表:nmstate 软件包已安装。
- 列表:创建一个包含以下内容的 YAML 文件,如 ~/create-bridge.yml : --- interfaces: - name: bridge0 type: linux-bridge state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false bridge: options: stp: ena…
- 列表:网桥中的网络接口:enp1s0 和 enp7s0
- 命令/配置摘录:
--- interfaces: - name: bridge0 type: linux-bridge state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false bridge: options: stp: enabled: true port: - name: enp1s0 - name: enp7s0 - name: enp1s0 type: ethernet state: up - name: enp7s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: bridge0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: bridge0 dns-resolver: config: search: - example.com ser…
# nmstatectl apply ~/create-bridge.yml5.5. 使用 network RHEL 系统角色配置网桥
- 要点:您可以使用 network RHEL 系统角色配置网桥,如果网桥的父设备的连接配置文件不存在,则角色也可以创建它。
- 要点:您可以通过创建网桥,在 Open Systems Interconnection (OSI)模型的第 2 层上连接多个网络。要配置网桥,请在 NetworkManager 中创建一个连接配置文件。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并在 playbook 中定义的主机上远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bridge connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bridge profile - name: bridge0 typ…
- 列表:验证 playbook 语法: $ ansible-playbook --syntax-check ~/playbook.yml 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bridge connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bridge profile - name: bridge0 type: bridge interface_name: bridge0 ip: dhcp4: yes auto6: yes state: up # Port profile for the 1st Ethernet device - name: bridge0-port1 interface_name: enp7s0 type: ethernet controller: bridge0 port_type: bridge state: up # Port profile for the 2nd Ethernet device - name: bridge0-port2 interface_name: enp8s0 type: ethernet controller: bridge0 port_type: …
$ ansible-playbook --syntax-check ~/playbook.yml- 注意:注意 如果要为网桥分配 IP 地址、网关和 DNS 设置,请在网桥上,而不是在其端口上配置它们。
第 6 章 设置 IPsec VPN
- 要点:使用 IPsec 协议套件的 Libreswan 实现,配置和管理安全虚拟专用网络(VPN)。libreswan 创建加密隧道来通过互联网进行安全数据传输。
- 要点:IPsec 隧道确保传输中数据的保密性和完整性。常见用例包括将分支机构连接到总部,或为远程用户提供对公司网络的安全访问。
- 列表:手动编辑 Libreswan 配置文件,来精细控制高级选项。
- 列表:使用 vpn RHEL 系统角色自动化创建 Libreswan VPN 配置的过程。
- 列表:使用 Nmstate ,通过声明性 API 配置 Libreswan 连接。
- 注意:注意 Libreswan 是 RHEL 中唯一支持的 VPN 技术。
6.1. IPsec VPN 中的组件
- 要点:在设置 IPsec VPN 前,务必要了解其主要组件:用于身份验证和协商的互联网密钥交换(IKE),以及用于数据加密和传输的 IPsec。
- 要点:IKE 是两个端点之间身份验证和协商的协议。它协商连接规则,包括加密算法。Libreswan 在 pluto 守护进程中实现 IKE。
6.2. Libreswan 身份验证方法
- 要点:根据您的安全需求和网络环境,选择合适的验证方法来建立安全 VPN 连接。
- 要点:Libreswan 支持以下验证方法:
6.3. 手动配置具有原始 RSA 密钥身份验证的 IPsec 主机到主机的 VPN
- 要点:主机到主机 VPN 在两个设备之间建立一个直接、安全和加密的连接,允许应用程序通过不安全的网络(如互联网)安全地进行通信。
- 要点:对于身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需求,并提供强大的对等身份验证来简化部署。
- 列表:如果 Libreswan 尚未安装,请执行以下步骤: 安装 libreswan 软件包: # dnf install libreswan 初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。 启用并启动 ipsec 服务: # systemctl enable --now ipsec 在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
- 列表:安装 libreswan 软件包: # dnf install libreswan
- 列表:初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。
- 列表:启用并启动 ipsec 服务: # systemctl enable --now ipsec
- 列表:在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
- 列表:创建一个 RSA 密钥对: # ipsec newhostkey ipsec 工具将密钥对存储在 NSS 数据库中。
- 命令/配置摘录:
# dnf install libreswan
# ipsec initnss- 注意:注意 您可以在两个主机上使用同样的配置文件,Libreswan 使用内部信息决定在左还是右主机上操作。但是,务必确保 left* 参数中的所有值都属于一个对等主机,且 right* 参数中的值属于另一个主机。
6.4. 手动配置具有原始 RSA 密钥身份验证的 IPsec 站点到站点 VPN
- 要点:站点到站点的 VPN 在两个不同的网络之间建立一个安全、加密的隧道,在不安全的公共网络(如互联网)中链接它们。
- 要点:例如,站点到站点 VPN 允许分支办公室中的设备访问公司总部的资源,就如同它们都是同一本地网络的一部分一样。
- 列表:两个网络中的路由确保流量通过本地 VPN 网关设备发送到远程网络。
- 列表:如果 Libreswan 尚未安装,请执行以下步骤: 安装 libreswan 软件包: # dnf install libreswan 初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。 启用并启动 ipsec 服务: # systemctl enable --now ipsec 在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
- 列表:安装 libreswan 软件包: # dnf install libreswan
- 列表:初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。
- 列表:启用并启动 ipsec 服务: # systemctl enable --now ipsec
- 列表:在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
- 命令/配置摘录:
# dnf install libreswan
# ipsec initnss- 注意:注意 您可以在两个网关设备上使用同样的配置文件,Libreswan 使用内部信息决定在左还是右主机上操作。但是,务必确保 left* 参数中的所有值都属于一个对等主机,且 right* 参数中的值属于另一个主机。
6.5. 手动配置具有基于证书身份验证的 IPsec 主机到站点 VPN
- 要点:主机到站点 VPN 在远程计算机和专用网络之间创建一个安全、加密的连接。这会跨公共网络(如互联网)链接它们。
- 要点:远程员工使用主机到站点的 VPN 访问其公司的内部网络。它们可以从其计算机访问资源,就如同它们在办公室中一样。
6.5.1. 手动设置 IPsec 网关
- 要点:您必须正确配置 Libreswan IPsec 网关来启用安全远程访问。Libreswan 从网络安全服务(NSS)数据库读取服务器证书、私钥和 CA 证书。
- 要点:以下示例允许经过身份验证的用户访问内部 192.0.2.0/24 子网,并将虚拟 IP 池中的 IP 地址动态分配给每个客户端。要保持安全性,网关会验证客户端证书是否由同一可信 CA 发布,并自动使用证书撤销列表(CRL)来确保对于任何撤销的证书都拒绝访问。
- 列表:Public Key Cryptography Standards #12(PKCS #12)文件 ~/file.p12 在网关上存在,并具有以下内容: 服务器的私钥 服务器证书 CA 证书 如果需要,则为中间证书 有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
- 列表:服务器的私钥
- 列表:服务器证书
- 列表:CA 证书
- 列表:如果需要,则为中间证书
- 列表:服务器证书包含以下字段: Extended Key Usage(EKU)被设置为 TLS Web Server Authentication。 Common Name (CN)或 Subject Alternative Name(SAN)被设置为网关的完全限定域名(FQDN)。 X509v3 CRL 发行版点包含证书撤销列表(CRL)的 URL。
- 命令/配置摘录:
# dnf install libreswan
# ipsec initnss6.5.2. 使用 GNOME 设置将客户端配置为连接到 IPsec VPN 网关
- 要点:要访问远程私有网络上的资源,用户必须首先配置一个 IPsec VPN 连接。GNOME Settings 应用程序提供一个图形化的解决方案,来在 NetworkManager 中创建一个 IPsec VPN 连接配置文件,并建立隧道。
- 要点:先决条件
- 列表:您已配置了 IPsec VPN 网关。
- 列表:已安装 NetworkManager-libreswan-gnome 软件包。
- 列表:PKCS #12 文件 ~/file.p12 客户端上存在,其中包含以下内容: 用户的私钥 用户证书 CA 证书 如果需要,则为中间证书 有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
- 列表:用户的私钥
- 列表:用户证书
- 列表:CA 证书
- 命令/配置摘录:
# ipsec initnss
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA- 表格样本(共 7 行):
- 字段名称 | 值 | 相应的 ipsec.conf 参数
- Name | <networkmanager_profile_name> | N/A
- Gateway | <ip_address_or_fqdn_of_the_gateway> | right
- 类型 | IKEv2 (certificate) | authby
6.6. 手动配置具有基于证书的身份验证的 IPsec 网格 VPN
- 要点:IPsec 网格会创建一个完全互连的网络,其中每个服务器都可以与其他服务器安全且直接地进行通信。这是跨多个数据中心或云提供商的分布式数据库集群或高可用性环境的理想选择。
- 要点:在每对服务器之间建立直接的加密隧道可确保安全通信,而没有中央瓶颈。为进行身份验证,使用由证书颁发机构(CA)管理的数字证书,可提供安全、可扩展的解决方案。网格中的每个主机都存在一个由可信 CA 签名的证书。这个方法提供强大的、可靠的身份验证,并简化了用户管理。可以在 CA 中集中授予或撤销访问权限,Libreswan 通过针对证书撤销列表(CRL)检查每个证书来强制实施这个操作,如果证书出现在列表中,则拒绝访问。
- 列表:网格中的每个对等点都存在一个 Public Key Cryptography Standards #12 (PKCS #12)文件,其中包含以下内容: 服务器的私钥 服务器证书 CA 证书 如果需要,则为中间证书 有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
- 列表:服务器的私钥
- 列表:服务器证书
- 列表:CA 证书
- 列表:如果需要,则为中间证书
- 列表:服务器证书包含以下字段: Extended Key Usage(EKU)被设置为 TLS Web Server Authentication。 Common Name(CN)或 Subject Alternative Name(SAN)被设置为主机的完全限定域名(FQDN)。 X509v3 CRL 发行版点包含证书撤销列表(CRL)的 URL。
- 命令/配置摘录:
# dnf install libreswan
# ipsec initnss6.7. 使用密码保护 IPsec NSS 数据库
- 要点:默认情况下,只有 root 用户可以访问 /var/lib/ipsec/nss/ 目录中的 IPsec 网络安全服务(NSS)数据库。您还可以使用密码保护数据库。如果您在联邦信息处理标准(FIPS)模式下运行 RHEL,则需要这样做。
- 要点:先决条件
- 列表:/var/lib/ipsec/nss/ 目录包含 NSS 数据库。
- 列表:为 Libreswan NSS 数据库启用密码保护: # certutil -W -d /var/lib/ipsec/nss/
- 列表:输入当前密码: Enter Password or Pin for "NSS Certificate DB": <password> 如果数据库目前不受密码保护,请按 Enter 键。
- 列表:输入新密码: Enter new password: <new_password> Re-enter password: <new_password>
- 列表:要解锁数据库,ipsec 服务需要 /etc/ipsec.d/nsspassword 文件。使用以下内容创建文件: 如果主机没有在 FIPS 模式下运行: NSS Certificate DB:<password> 如果主机在 FIPS 模式下运行: NSS FIPS 140-2 Certificate DB:<password>
- 列表:如果主机没有在 FIPS 模式下运行: NSS Certificate DB:<password>
- 命令/配置摘录:
# certutil -W -d /var/lib/ipsec/nss/
Enter Password or Pin for "NSS Certificate DB": <password>6.8. 在启用了 FIPS 模式的系统上使用 IPsec
- 要点:Federal Information Processing Standard (FIPS)模式中的 RHEL 只使用经过验证的加密模块。FIPS 模式禁用旧的协议和密码。联邦合规性通常需要 FIPS 模式。它还提高了系统安全性。
- 要点:RHEL 中的 Libreswan IPsec 工具完全兼容 FIPS。当 FIPS 模式为 on 时,Libreswan 使用认证的加密模块。您不需要配置任何内容。无论您在新的 FIPS 系统上安装 Libreswan,或者在现有的 Libreswan VPN 中启用 FIPS。
- 命令/配置摘录:
# ipsec whack --fipsstatus FIPS mode enabled
# ipsec pluto --selftest 2>&1 ... FIPS Encryption algorithms: AES_CCM_16 {256,192,*128} IKEv1: ESP IKEv2: ESP FIPS aes_ccm, aes_ccm_c AES_CCM_12 {256,192,*128} IKEv1: ESP IKEv2: ESP FIPS aes_ccm_b AES_CCM_8 {256,192,*128} IKEv1: ESP IKEv2: ESP FIPS aes_ccm_a ...6.9. 为 IPsec VPN 连接配置 TCP 回退
- 要点:标准 IPsec VPN 可能会在阻止 UDP 和 Encapsulating Security Payload(ESP)协议的限制网络中失败。要确保此类环境中的连接性,Libreswan 可以在 TCP 连接内封装所有 VPN 流量。
- 要点:先决条件
- 列表:IPsec 连接已配置。
- 列表:编辑 /etc/ipsec.conf 文件,并在 config setup 部分中进行以下更改: 将 Libreswan 配置为侦听 TCP 端口: listen-tcp=yes 默认情况下,Libreswan 侦听端口 4500。如果要使用不同的端口,请输入: tcp-remoteport=<port_number> 如果 UDP 不可用或永久使用,则决定是否使用 TCP 作为回退选项: 作为回退选项,请输入: enable-tcp=fallback retransmit-timeout=5s 默认情况下,Libreswan 在使用 UDP 尝试连接失败后会等待 60 秒,然后再通过 TCP 重试连接。降低 retransmit…
- 列表:将 Libreswan 配置为侦听 TCP 端口: listen-tcp=yes
- 列表:默认情况下,Libreswan 侦听端口 4500。如果要使用不同的端口,请输入: tcp-remoteport=<port_number>
- 列表:如果 UDP 不可用或永久使用,则决定是否使用 TCP 作为回退选项: 作为回退选项,请输入: enable-tcp=fallback retransmit-timeout=5s 默认情况下,Libreswan 在使用 UDP 尝试连接失败后会等待 60 秒,然后再通过 TCP 重试连接。降低 retransmit-timeout 值会缩短延迟,从而使回退协议可以更快地启动。 作为 UDP 的永久替换,请输入: enable-tcp=yes
- 列表:作为回退选项,请输入: enable-tcp=fallback retransmit-timeout=5s 默认情况下,Libreswan 在使用 UDP 尝试连接失败后会等待 60 秒,然后再通过 TCP 重试连接。降低 retransmit-timeout 值会缩短延迟,从而使回退协议可以更快地启动。
- 命令/配置摘录:
listen-tcp=yes
tcp-remoteport=<port_number>- 注意:重要 在 TCP 中封装 VPN 数据包可减少吞吐量并增加延迟。因此,只使用 TCP 封装作为回退选项,或者如果您的环境中始终阻止了基于 UDP 的连接。
6.10. 在 Libreswan 中启用旧的密码和算法
- 要点:在 Libreswan 中启用旧的密码和算法,来向后兼容其他 IPsec 对等点。这会覆盖 RHEL 系统范围的加密策略,该策略默认为 IPsec 和互联网密钥交换(IKE)强制执行强大的加密密码和算法。
- 要点:RHEL 系统范围的加密策略会创建一个名为 %default 的特殊连接。此连接为 keyexchange、esp 和 ike 参数设置默认值。
- 列表:Libreswan 已安装。
- 列表:要覆盖 RHEL 系统范围加密策略设置的默认值,请在连接配置中添加 keyexchange、esp 和 ike 参数,并将它们设置为您需要的值。例如: conn <connection_name> keyexchange=ikev1 ike=aes-sha2,aes-sha1;modp2048 esp=aes-sha2,aes-sha1 ...
- 列表:重启 ipsec 服务: # systemctl restart ipsec
- 命令/配置摘录:
conn <connection_name> keyexchange=ikev1 ike=aes-sha2,aes-sha1;modp2048 esp=aes-sha2,aes-sha1 ...
# systemctl restart ipsec6.11. 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道
- 要点:要防止 VPN 连接免受流量重定向攻击,请将其分配给一个专用路由表。这可防止恶意的网络服务器绕过安全隧道,并损害数据完整性。
- 要点:DHCP 服务器和无状态地址自动配置(SLAAC)都可以将路由添加到客户端的路由表中。例如,恶意的 DHCP 服务器可以使用此功能强制带有 VPN 连接的主机通过物理接口而不是 VPN 隧道重定向流量。此漏洞也称为 TunnelVision,并在 CVE-2024-3661 漏洞文章中进行了描述。
- 列表:至少有一个网络接口使用 DHCP 或 SLAAC。
- 列表:您的网络不使用阻止恶意 DHCP 服务器的机制,如 DHCP 侦听。
- 列表:决定您要使用哪个路由表。以下步骤使用表 75。默认情况下,RHEL 不使用表 1-254,您可以使用其中任何一个。
- 列表:配置 VPN 连接配置文件,来将 VPN 路由放在专用的路由表中: # nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
- 列表:为您在之前的命令中使用的表设置一个低优先级值: # nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75" 优先级值可以是 1 到 32766 之间的任何值。值越低,优先级越高。
- 列表:重新连接 VPN 连接: # nmcli connection down <vpn_connection_profile> # nmcli connection up <vpn_connection_profile>
- 命令/配置摘录:
# nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
# nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"- 注意:重要 通过 VPN 路由整个流量可防止主机访问本地网络资源。
6.12. 使用 RHEL 系统角色配置 IPsec VPN 连接
- 要点:配置 IPsec VPN 连接,以便在不受信任的网络上建立加密隧道,并确保数据在传输过程中的完整性。通过使用 RHEL 系统角色,您可以自动化用例的设置,如将分支机构连接到总部。
- 注意:注意 vpn RHEL 系统角色只能创建使用预共享密钥(PSK)或证书来相互验证对等点的 VPN 配置。
6.12.1. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 主机到主机的 VPN
- 要点:主机到主机的 VPN 在两个设备之间建立一个加密连接,允许应用程序通过不安全的网络安全地通信。通过使用 vpn RHEL 系统角色,您可以自动化创建 IPsec 主机到主机连接的过程。
- 要点:对于身份验证,预共享密钥(PSK)是一个直接的方法,其使用一个只有两个对等点知道的共享 secret 。这种方法易于配置,非常适合优先考虑易于部署的基本设置。但是,您必须对密钥进行严格保密。可以访问密钥的攻击者可能会破坏连接。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: …
- 列表:验证 playbook 语法: $ ansible-playbook --syntax-check ~/playbook.yml 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
- 列表:运行 playbook: $ ansible-playbook ~/playbook.yml
- 命令/配置摘录:
--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: managed-node-02.example.com: auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
... - hosts: ... external-host.example.com: hostname: 192.0.2.16.12.2. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 主机到主机的 VPN ,并将数据和控制平面分开
- 要点:使用 vpn RHEL 系统角色自动化创建 IPsec 主机到主机的 VPN 过程。要通过最大程度减少被截获或破坏的控制消息的风险来提高安全性,请为数据流量和控制流量配置单独的连接。
- 要点:主机到主机 VPN 在两个设备之间建立一个直接、安全和加密的连接,允许应用程序通过不安全的网络(如互联网)安全地进行通信。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - name: control_plane_vpn hosts: mana…
- 列表:验证 playbook 语法: $ ansible-playbook --syntax-check ~/playbook.yml 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
- 列表:运行 playbook: $ ansible-playbook ~/playbook.yml
- 命令/配置摘录:
--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - name: control_plane_vpn hosts: managed-node-01.example.com: hostname: 203.0.113.1 # IP address for the control plane managed-node-02.example.com: hostname: 198.51.100.2 # IP address for the control plane auth_method: psk auto: start - name: data_plane_vpn hosts: managed-node-01.example.com: hostname: 10.0.0.1 # IP address for the data plane managed-node-02.example.com: hostname: 172.16.0.2 # IP…
$ ansible-playbook --syntax-check ~/playbook.yml6.12.3. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 站点到站点 VPN
- 要点:站点到站点的 VPN 在两个不同的网络之间建立了一个加密的隧道,在不安全的公共网络中连接它们。通过使用 vpn RHEL 系统角色,您可以自动化创建 IPsec 站点到站点 VPN 连接的过程。
- 要点:站点到站点 VPN 可让分支机构中的设备访问公司总部中的资源,就像它们都是同一本地网络的一部分一样。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: …
- 列表:验证 playbook 语法: $ ansible-playbook --syntax-check ~/playbook.yml 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
- 列表:运行 playbook: $ ansible-playbook ~/playbook.yml
- 命令/配置摘录:
--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: subnets: - 192.0.2.0/24 managed-node-02.example.com: subnets: - 198.51.100.0/24 - 203.0.113.0/24 auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
... - hosts: ... external-host.example.com: hostname: 192.0.2.16.12.4. 使用 vpn RHEL 系统角色配置带有基于证书身份验证的 IPsec 网格 VPN
- 要点:IPsec 网格会创建一个完全互连的网络,其中每个服务器都可以与其他服务器安全且直接地进行通信。通过使用 vpn RHEL 系统角色,您可以在受管节点之间自动化配置带有基于证书的身份验证的 VPN 网格。
- 要点:IPsec 网格适用于跨多个数据中心或云提供商的分布式数据库集群或高可用性环境。在每对服务器之间建立直接的加密隧道可确保安全通信,而没有中央瓶颈。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:您可以为每个受管节点准备一个 PKCS #12 文件: 每个文件包含: 服务器的私钥 服务器证书 CA 证书 如果需要,则为中间证书 文件被命名为 <managed_node_name_as_in_the_inventory>.p12。 文件存储在与 playbook 相同的目录中。 服务器证书包含以下字段: Extended Key Usage(EKU)被设置为 TLS Web Server Authentication。 Common Name(CN)或 Subject Alternative Name(SAN)被设置为主机的完全限定域名(FQDN)。 X509v3 CRL 发行版点包含证书撤销列表(CRL)的 URL。
- 列表:每个文件包含: 服务器的私钥 服务器证书 CA 证书 如果需要,则为中间证书
- 列表:服务器的私钥
- 命令/配置摘录:
managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.com
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>6.13. 使用 nmstatectl 配置 IPsec VPN 连接
- 要点:配置 IPsec VPN 连接,以便在不受信任的网络上建立加密隧道,并确保数据在传输过程中的完整性。通过使用 Nmstate,您可以使用声明性 API 创建 IPsec VPN 连接。
- 要点:您可以使用 nmstatectl 工具通过 Nmstate API 配置 Libreswan IPsec VPN 连接。nmstatectl 工具是一个命令行工具,用于通过声明性 Nmstate API 管理主机网络。您不必运行多个命令来配置接口,而是在 YAML 文件中定义预期的状态。然后,nmstate 会采用此定义并将其应用到系统。这种方法的关键优点是原子结果。nmstate 确保生成的配置与您的 YAML 定义准确匹配。如果配置的任何部分无法应用,它会自动回滚所有更改,并防止系统进入不正确或损坏的网络状态。
- 注意:注意 由于 NetworkManager-libreswan 插件的设计,您只能在一个对等点上使用 nmstatectl,且必须在另一个对等点上手动配置 Libreswan。
6.13.1. 使用 nmstatectl,配置具有原始 RSA 密钥身份验证的 IPsec 主机到主机的 VPN
- 要点:您可以使用声明性 Nmstate API 在两个设备之间配置主机到主机的 VPN,来在不安全的网络上安全地进行通信。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:对于身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需求,并提供强大的对等身份验证来简化部署。
- 列表:远程对等点运行 Libreswan IPsec,并为 主机到主机 连接做好了准备。 由于 NetworkManager-libreswan 插件的设计,Nmstate 无法与其他也使用此插件进行同样连接的对等点进行通信。
- 列表:如果 Libreswan 尚未安装,请执行以下步骤: 安装所需的软件包: # dnf install nmstate libreswan NetworkManager-libreswan 重启 NetworkManager 服务: # systemctl restart NetworkManager 初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。 在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewa…
- 列表:安装所需的软件包: # dnf install nmstate libreswan NetworkManager-libreswan
- 列表:重启 NetworkManager 服务: # systemctl restart NetworkManager
- 列表:初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。
- 列表:在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
- 命令/配置摘录:
# dnf install nmstate libreswan NetworkManager-libreswan
# systemctl restart NetworkManager- 注意:注意 通常,选择将哪台主机命名为 left 和 right 是任意的。但是,NetworkManager 始终对本地主机使用术语 left,对远程主机使用术语 right。
6.13.2. 使用 nmstatectl 配置具有原始 RSA 密钥身份验证的 IPsec 站点到站点 VPN
- 要点:您可以使用声明性 Nmstate API 在两个不同的网络之间配置站点到站点 VPN,在不安全的网络中连接它们。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:为对网关设备进行身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需求,并提供强大的对等身份验证来简化部署。
- 列表:远程网关运行 Libreswan IPsec,并为 站点到站点 连接做好了准备。 由于 NetworkManager-libreswan 插件的设计,Nmstate 无法与其他也使用此插件进行同样连接的对等点进行通信。
- 列表:如果 Libreswan 尚未安装,请执行以下步骤: 安装所需的软件包: # dnf install nmstate libreswan NetworkManager-libreswan 重启 NetworkManager 服务: # systemctl restart NetworkManager 初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。 在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewa…
- 列表:安装所需的软件包: # dnf install nmstate libreswan NetworkManager-libreswan
- 列表:重启 NetworkManager 服务: # systemctl restart NetworkManager
- 列表:初始化 Network Security Services (NSS)数据库: # ipsec initnss 命令在 /var/lib/ipsec/nss/ 目录中创建数据库。
- 列表:在防火墙中打开 IPsec 端口和协议: # firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
- 命令/配置摘录:
# dnf install nmstate libreswan NetworkManager-libreswan
# systemctl restart NetworkManager- 注意:注意 通常,选择将哪些主机命名为 left 和 right 是任意的。但是,NetworkManager 始终对本地主机使用术语 left,对远程主机使用术语 right。
6.13.3. 使用 nmstatectl 将客户端配置为连接到 IPsec VPN 网关
- 要点:要访问远程私有网络上的资源,用户必须首先配置一个 IPsec VPN 连接。通过使用 Nmstate,您可以使用声明性 API 创建与现有 Libreswan IPsec 网关的连接。
- 要点:先决条件
- 列表:远程网关运行 Libreswan IPsec,并为带有 基于证书的身份验证的主机到站点 连接做好了准备。 由于 NetworkManager-libreswan 插件的设计,Nmstate 无法与其他也使用此插件进行同样连接的对等点进行通信。
- 列表:PKCS#12 文件 ~/file.p12 在客户端上存在,其包含以下内容: 用户的私钥 用户证书 CA 证书 如果需要,则为中间证书 有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
- 列表:用户的私钥
- 列表:用户证书
- 列表:CA 证书
- 列表:如果需要,则为中间证书
- 命令/配置摘录:
# dnf install nmstate libreswan NetworkManager-libreswan
# systemctl restart NetworkManager- 注意:注意 通常,选择将哪台主机命名为 left 和 right 是任意的。但是,NetworkManager 始终对本地主机使用术语 left,对远程主机使用术语 right。
6.14. IPsec 配置故障排除
- 要点:诊断 IPsec 配置失败可能具有挑战性,因为问题可能是由不匹配的设置、防火墙规则和内核级错误造成的。以下信息提供了一个解决 IPsec VPN 连接常见问题的系统方法。
6.14.1. 基本连接问题
- 要点:VPN 连接的问题通常是因为端点之间不匹配的配置而发生的。
- 要点:要确认 IPsec 连接是否已建立,请输入:
- 命令/配置摘录:
# ipsec trafficstatus 006 #8: "vpn.example.com"[1] 192.0.2.1, type=ESP, add_time=1595296930, inBytes=5999, outBytes=3231, id='@vpn.example.com', lease=198.51.100.1/326.14.2. 与防火墙相关的问题
- 要点:诊断由防火墙相关的问题导致的 IPsec 连接失败。
- 要点:如果端点或中间路由上的防火墙丢弃了互联网密钥交换版本 2 (IKEv2)数据包,则 ipsec up 命令会超时,并显示重复的 retransmission 消息:
- 命令/配置摘录:
181 "vpn.example.com"[1] 192.0.2.2 #15: initiating IKEv2 IKE SA 181 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: sent v2I1, expected v2R1 010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 0.5 seconds for response 010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 1 seconds for response 010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 2 seconds for response ...
# tcpdump -i <interface> -n -n esp or udp port 500 or udp port 4500 or tcp port 45006.14.3. 不匹配的配置
- 要点:如果端点没有配置匹配的互联网密钥交换(IKE)版本、算法、IP 地址范围或预共享密钥(PSK),则 VPN 连接会失败。如果识别到不匹配,则您必须使两个端点上的设置保持一致,以解决这个问题。
- 要点:如果连接被拒绝,则会显示一个 ICMP 错误:
- 命令/配置摘录:
# ipsec up vpn.example.com ... 000 "vpn.example.com"[1] 192.0.2.2 #16: ERROR: asynchronous network error report on wlp2s0 (192.0.2.2:500), complainant 198.51.100.1: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]
# ipsec up vpn.example.com ... 003 "vpn.example.com"[1] 193.110.157.148 #3: dropping unexpected IKE_SA_INIT message containing NO_PROPOSAL_CHOSEN notification; message payloads: N; missing payloads: SA,KE,Ni6.14.4. MTU 问题
- 要点:诊断由最大传输单元(MTU)问题导致的间歇性 IPsec 连接失败。加密会增加数据包大小,在数据包超过网络的 MTU 时导致碎片和丢失数据,通常会看到更大的数据传输。
- 要点:一个常见的症状是,小数据包(例如 ping)可以正常工作,但大型数据包(如 SSH 会话)在登录后冻结。要解决这个问题,请通过将 mtu=1400 选项添加到配置文件来降低隧道的 MTU。
6.14.5. NAT 冲突
- 要点:解决当 IPsec 主机也充当 NAT 路由器时发生的 NAT 冲突。不正确的 NAT 应用程序可以在加密之前转换源 IP 地址,导致数据包在网络上被未加密发送。
- 要点:例如,如果在应用 IPsec 加密之前,如果数据包的源 IP 地址被伪装规则转换了,则数据包的源不再与 IPsec 策略匹配,并且 Libreswan 在网络上将其未经加密发送。
- 命令/配置摘录:
# nft add table ip nat # nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; } # nft add rule ip nat postrouting ip saddr 192.0.2.0/24 ip daddr 198.51.100.0/24 return6.14.6. 内核级 IPsec 问题
- 要点:当 VPN 隧道似乎已建立但没有流量流时,对内核级 IPsec 问题进行故障排除。在这种情况下,检查内核的 IPsec 状态,以检查隧道策略和加密密钥是否已正确安装。
- 要点:这个过程涉及检查两个组件:
- 列表:安全策略数据库(SPD):指示内核要加密哪些流量的规则。
- 列表:安全关联数据库(SAD):指示内核如何加密该流量的密钥。
- 命令/配置摘录:
# ip xfrm policy src 192.0.2.1/32 dst 10.0.0.0/8 dir out priority 666 ptype main tmpl src 198.51.100.13 dst 203.0.113.22 proto esp reqid 16417 mode tunnel
# ip xfrm state src 203.0.113.22 dst 198.51.100.13 proto esp spi 0xa78b3fdb reqid 16417 mode tunnel auth-trunc hmac(sha1) 0x3763cd3b... 96 enc cbc(aes) 0xd9dba399...- 注意:警告 这个命令显示私有密钥。不要共享此输出,因为攻击者可以使用它来解密您的 VPN 流量。
6.14.7. 内核 IPsec 子系统错误
- 要点:内核 IPsec 子系统中的缺陷可能会导致它失去与 IKE 守护进程的同步。这可能会导致协商的安全关联和实际 IPsec 策略实施之间的差异,从而破坏了安全的网络通信。
- 要点:要检查内核级错误,请显示转换(XFRM)统计信息:
- 命令/配置摘录:
# cat /proc/net/xfrm_stat6.14.8. 显示 Libreswan 日志
- 要点:显示 Libreswan 日志来诊断和排除 IPsec 服务事件和问题。访问 ipsec 服务的日志,以深入了解连接状态和潜在的问题。
- 要点:要显示日志,请输入:
- 命令/配置摘录:
# journalctl -xeu ipsec
plutodebug=all logfile=/var/log/pluto.log第 7 章 设置 WireGuard VPN
- 要点:WireGuard 是一个在 Linux 内核中运行的高性能 VPN。它使用现代加密机制,并且比许多其他 VPN 解决方案更容易配置。其小代码库提高了安全性,对于身份验证和加密,它使用类似于 SSH 的密钥。
- 要点:请注意,参与 WireGuard VPN 的所有主机都是同级的。本文档使用术语 客户端 来描述建立连接的主机,以使用客户端连接到的固定主机名或 IP 地址(可选)通过这个服务器路由所有流量。
- 列表:配置服务器。
- 列表:在本地防火墙中打开 WireGuard 端口。
- 列表:配置客户端。
- 注意:重要 WireGuard 只作为技术预览提供。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些预览可让用户早期访问将来的产品功能,让用户在开发过程中测试并提供反馈意见。
- 注意:重要 只有在禁用 RHEL 中的 Federal Information Processing Standard(FIPS)模式时,才能使用 WireGuard。
7.1. WireGuard 使用的协议和原语
- 要点:WireGuard 使用特定的协议和原语。了解它们以评估 WireGuard 的安全性。这有助于您验证 WireGuard 是否使用现代安全加密标准。
- 要点:WireGuard 使用以下协议和原语:
- 列表:ChaCha20 用于对称加密。它使用 Poly1305 进行身份验证和 AEAD 构造。
- 列表:用于 Elliptic-curve Diffie-Hellman (ECDH)密钥交换的Curve25519
- 列表:用于哈希和密钥哈希的 BLAKE2s
- 列表:用于哈希表键的 SipHash24
- 列表:用于密钥派生的 HKDF
7.2. WireGuard 如何使用隧道 IP 地址、公钥和远程端点
- 要点:WireGuard 的设计使用加密身份严格连接网络路由。通过这种设计,协议充当传出流量的路由机制,以及用于传入数据包的访问控制列表,确保仅处理经过验证和授权的流量。
- 要点:当 WireGuard 将网络数据包发送到对等点时:
- 列表:WireGuard 从数据包读取目标 IP,并将其与本地配置中允许的 IP 地址列表进行比较。如果未找到 peer,WireGuard 会丢弃数据包。
- 列表:如果 peer 有效,WireGuard 使用对等的公钥对数据包进行加密。
- 列表:发送主机查找主机的最新互联网 IP 地址,并将加密数据包发送到此地址。
- 列表:WireGuard 使用远程主机的私钥解密数据包。
- 列表:WireGuard 从数据包读取内部源地址,并在本地主机上对等点的设置中查询 IP 地址是否配置。如果源 IP 位于允许列表中,WireGuard 会接受数据包。如果 IP 地址不在列表中,WireGuard 会丢弃数据包。
7.3. 使用 NAT 和防火墙后面的 WireGuard 客户端
- 要点:WireGuard 使用 UDP 协议,只有在对等点发送数据包时才会传输数据。路由器上的有状态防火墙和网络地址转换(NAT)可跟踪连接,以启用 NAT 或防火墙接收数据包的对等点。
- 要点:为了保持连接处于活动状态,WireGuard 支持 持久性 keepalives。这意味着您可以设置一个间隔,其中 WireGuard 发送 keepalive 数据包。默认情况下,禁用持久的 keep-alive 功能来减少网络流量。如果您在带有 NAT 的网络中使用客户端,或者防火墙在一定时间不活动状态后关闭连接,在客户端上启用此功能。
- 注意:注意 请注意,您无法使用 RHEL web 控制台在 WireGuard 连接中配置 keepalive 数据包。要配置此功能,请使用 nmcli 工具编辑连接配置文件。
7.4. 创建在 WireGuard 连接中使用的私钥和公钥
- 要点:WireGuard 使用 base64 编码的私钥和公钥来互相验证主机。因此,您必须在参与 WireGuard VPN 的每个主机上创建密钥。
- 要点:如果您计划使用 RHEL web 控制台创建 WireGuard VPN 连接,您可以在 web 控制台中生成公钥和私钥对。
- 列表:安装 wireguard-tools 软件包: # dnf install wireguard-tools
- 列表:为主机创建私钥和对应的公钥: # wg genkey | tee /etc/wireguard/$HOSTNAME.private.key | wg pubkey > /etc/wireguard/$HOSTNAME.public.key 您需要密钥文件的内容,而不是文件本身。但是,红帽建议在将来需要记住密钥时保留文件。
- 列表:在密钥文件中设置安全权限: # chmod 600 /etc/wireguard/$HOSTNAME.private.key /etc/wireguard/$HOSTNAME.public.key
- 列表:显示私钥: # cat /etc/wireguard/$HOSTNAME.private.key YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg= 您需要私钥在本地主机上配置 WireGuard 连接。不要共享私钥。
- 列表:显示公钥: # cat /etc/wireguard/$HOSTNAME.public.key UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= 您需要公钥在远程主机上配置 WireGuard 连接。
- 命令/配置摘录:
# dnf install wireguard-tools
# wg genkey | tee /etc/wireguard/$HOSTNAME.private.key | wg pubkey > /etc/wireguard/$HOSTNAME.public.key- 注意:重要 对于安全连接,请为每个主机创建不同的密钥,并确保只使用远程 WireGuard 主机共享公钥。不要使用本文档中使用的示例键。
7.5. 使用 nmcli 配置 WireGuard 服务器
- 要点:您可以通过在 NetworkManager 中创建连接配置集来配置 WireGuard 服务器。使用此方法让 NetworkManager 管理 WireGuard 连接。
- 要点:此流程假设以下设置:
- 列表:server: 私钥: YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg= 隧道 IPv4 地址:192.0.2.1/24 Tunnel IPv6 address: 2001:db8:1::1/64
- 列表:私钥: YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
- 列表:隧道 IPv4 地址:192.0.2.1/24
- 列表:Tunnel IPv6 address: 2001:db8:1::1/64
- 列表:Client: Public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= 隧道 IPv4 地址:192.0.2.2/24 Tunnel IPv6 address: 2001:db8:1::2/64
- 列表:Public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=
- 命令/配置摘录:
# nmcli connection add type wireguard con-name server-wg0 ifname wg0 autoconnect no
# nmcli connection modify server-wg0 ipv4.method manual ipv4.addresses 192.0.2.1/247.6. 使用 nmtui 配置 WireGuard 服务器
- 要点:您可以通过在 NetworkManager 中创建连接配置集来配置 WireGuard 服务器。使用此方法让 NetworkManager 管理 WireGuard 连接。
- 要点:此流程假设以下设置:
- 列表:server: 私钥: YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg= 隧道 IPv4 地址:192.0.2.1/24 Tunnel IPv6 address: 2001:db8:1::1/64
- 列表:私钥: YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
- 列表:隧道 IPv4 地址:192.0.2.1/24
- 列表:Tunnel IPv6 address: 2001:db8:1::1/64
- 列表:Client: Public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= 隧道 IPv4 地址:192.0.2.2/24 Tunnel IPv6 address: 2001:db8:1::2/64
- 列表:Public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=
- 命令/配置摘录:
# nmtui
# wg show wg0 interface: wg0 public key: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= private key: (hidden) listening port: 51820 peer: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= allowed ips: 192.0.2.2/32, 2001:db8:1::2/1287.7. 使用 RHEL web 控制台配置 WireGuard 服务器
- 要点:您可以使用基于浏览器的 RHEL web 控制台配置 WireGuard 服务器。使用此方法让 NetworkManager 管理 WireGuard 连接。
- 要点:先决条件
- 列表:已登陆到 RHEL web 控制台。
- 列表:您知道以下信息: 服务器和客户端的静态隧道 IP 地址和子网掩码 客户端的公钥
- 列表:服务器和客户端的静态隧道 IP 地址和子网掩码
- 列表:客户端的公钥
- 列表:在屏幕左侧的导航中选择 Networking 选项卡。
- 列表:在 Interfaces 部分中点 Add VPN。
- 命令/配置摘录:
# wg show wg0 interface: wg0 public key: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= private key: (hidden) listening port: 51820 peer: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= allowed ips: 192.0.2.2/32, 2001:db8:1::2/128
# ip address show wg0 20: wg0: <POINTOPOINT,NOARP,UP,LOWERUP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute wg0 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::3ef:8863:1ce2:844/64 scope link noprefixroute valid_lft forever preferred_lft forever7.8. 使用命令行在 WireGuard 服务器上配置 firewalld
- 要点:在 WireGuard 服务器上配置 firewalld 服务,允许来自客户端的传入连接。如果客户端需要使用服务器作为其默认网关,并通过隧道路由所有流量,则还要启用伪装。
- 要点:流程
- 列表:为 firewalld 服务中的传入连接打开 WireGuard 端口: # firewall-cmd --permanent --add-port=51820/udp --zone=public
- 列表:如果您希望客户端通过隧道路由所有流量,并使用 WireGuard 服务器作为默认网关,请为 公共区 启用伪装: # firewall-cmd --permanent --zone=public --add-masquerade
- 列表:重新加载 firewalld 规则。 # firewall-cmd --reload
- 列表:显示 public 区域的配置: # firewall-cmd --list-all public (active) ... ports: 51820/udp masquerade: yes ...
- 命令/配置摘录:
# firewall-cmd --permanent --add-port=51820/udp --zone=public
# firewall-cmd --permanent --zone=public --add-masquerade7.9. 使用 RHEL web 控制台在 WireGuard 服务器上配置 firewalld
- 要点:在 WireGuard 服务器上配置 firewalld 服务,允许来自客户端的传入连接。如果客户端需要使用服务器作为其默认网关,并通过隧道路由所有流量,则还要启用伪装。
- 要点:先决条件
- 列表:已登陆到 RHEL web 控制台。
- 列表:在屏幕左侧的导航中选择 Networking 选项卡。
- 列表:点 Firewall 部分中的 Edit rules and zones。
- 列表:点 Add services。
- 列表:在 Filter services 字段中输入 wireguard。
- 列表:从列表中选择 wireguard 条目。
- 命令/配置摘录:
# firewall-cmd --permanent --zone=public --add-masquerade # firewall-cmd --reload
# firewall-cmd --list-all --zone=public public (active) ... services: ... wireguard ports: forward: yes masquerade: yes ...7.10. 使用 nmcli 配置 WireGuard 客户端
- 要点:您可以通过在 NetworkManager 中创建连接配置集来配置 WireGuard 客户端。使用此方法让 NetworkManager 管理 WireGuard 连接。
- 要点:此流程假设以下设置:
- 列表:Client: Private key: aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A= 隧道 IPv4 地址:192.0.2.2/24 Tunnel IPv6 address: 2001:db8:1::2/64
- 列表:Private key: aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
- 列表:隧道 IPv4 地址:192.0.2.2/24
- 列表:Tunnel IPv6 address: 2001:db8:1::2/64
- 列表:server: 公钥:UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= 隧道 IPv4 地址:192.0.2.1/24 Tunnel IPv6 address: 2001:db8:1::1/64
- 列表:公钥:UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
- 命令/配置摘录:
# nmcli connection add type wireguard con-name client-wg0 ifname wg0
# nmcli connection modify client-wg0 autoconnect no7.11. 使用 nmtui 配置 WireGuard 客户端
- 要点:您可以通过在 NetworkManager 中创建连接配置集来配置 WireGuard 客户端。使用此方法让 NetworkManager 管理 WireGuard 连接。
- 要点:此流程假设以下设置:
- 列表:Client: Private key: aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A= 隧道 IPv4 地址:192.0.2.2/24 Tunnel IPv6 address: 2001:db8:1::2/64
- 列表:Private key: aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
- 列表:隧道 IPv4 地址:192.0.2.2/24
- 列表:Tunnel IPv6 address: 2001:db8:1::2/64
- 列表:server: 公钥:UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= 隧道 IPv4 地址:192.0.2.1/24 Tunnel IPv6 address: 2001:db8:1::1/64
- 列表:公钥:UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
- 命令/配置摘录:
# nmtui
# ping 192.0.2.1 # ping6 2001:db8:1::17.12. 使用 RHEL web 控制台配置 WireGuard 客户端
- 要点:您可以使用基于浏览器的 RHEL web 控制台配置 WireGuard 客户端。使用此方法让 NetworkManager 管理 WireGuard 连接。
- 要点:先决条件
- 列表:已登陆到 RHEL web 控制台。
- 列表:您知道以下信息: 服务器和客户端的静态隧道 IP 地址和子网掩码 服务器的公钥
- 列表:服务器和客户端的静态隧道 IP 地址和子网掩码
- 列表:服务器的公钥
- 列表:在屏幕左侧的导航中选择 Networking 选项卡。
- 列表:在 Interfaces 部分中点 Add VPN。
- 命令/配置摘录:
# ping 192.0.2.1
# wg show wg0 interface: wg0 public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= private key: (hidden) listening port: 45513 peer: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= endpoint: server.example.com:51820 allowed ips: 192.0.2.1/32, 2001:db8:1::1/128 latest handshake: 1 minute, 41 seconds ago transfer: 824 B received, 1.01 KiB sent persistent keepalive: every 20 seconds7.13. 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道
- 要点:要防止 VPN 连接免受流量重定向攻击,请将其分配给一个专用路由表。这可防止恶意的网络服务器绕过安全隧道,并损害数据完整性。
- 要点:DHCP 服务器和无状态地址自动配置(SLAAC)都可以将路由添加到客户端的路由表中。例如,恶意的 DHCP 服务器可以使用此功能强制带有 VPN 连接的主机通过物理接口而不是 VPN 隧道重定向流量。此漏洞也称为 TunnelVision,并在 CVE-2024-3661 漏洞文章中进行了描述。
- 列表:至少有一个网络接口使用 DHCP 或 SLAAC。
- 列表:您的网络不使用阻止恶意 DHCP 服务器的机制,如 DHCP 侦听。
- 列表:决定您要使用哪个路由表。以下步骤使用表 75。默认情况下,RHEL 不使用表 1-254,您可以使用其中任何一个。
- 列表:配置 VPN 连接配置文件,来将 VPN 路由放在专用的路由表中: # nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
- 列表:为您在之前的命令中使用的表设置一个低优先级值: # nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75" 优先级值可以是 1 到 32766 之间的任何值。值越低,优先级越高。
- 列表:重新连接 VPN 连接: # nmcli connection down <vpn_connection_profile> # nmcli connection up <vpn_connection_profile>
- 命令/配置摘录:
# nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
# nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"- 注意:重要 通过 VPN 路由整个流量可防止主机访问本地网络资源。
7.14. 其他资源
- 列表:技术预览功能支持范围
第 8 章 配置 IP 隧道
- 要点:与 VPN 类似,IP 隧道通过第三方网络(如互联网)直接连接两个网络。然而,不是所有的隧道协议都支持加密。
- 要点:两个建立隧道网络的路由器至少需要两个接口:
- 列表:一个连接到本地网络的接口
- 列表:一个连接到建立隧道的网络的接口。
- 列表:通用路由封装(GRE)
- 列表:IPv6 上的通用路由封装(IP6GRE)
- 列表:通用路由封装终端接入点(GRETAP)
- 列表:通用路由登录在 IPv6(IP6GRETAP)上
8.1. 配置 IPIP 隧道来封装 IPv4 数据包中的 IPv4 流量
- 要点:IP over IP (IPIP)隧道在 OSI 层 3 上运行,并封装 IPv4 数据包中的 IPv4 流量。
- 要点:请注意,IPIP 隧道只支持单播数据包。如果您需要支持多播的 IPv4 隧道,请参阅 使用 nmcli 配置 GRE 隧道,来封装 IPv4 数据包中的第 3 层流量。
- 列表:每个 RHEL 路由器都有一个网络接口,它连接到其本地子网。
- 列表:每个 RHEL 路由器都有一个网络接口,它连接到互联网。
- 列表:您需要通过隧道发送的流量是 IPv4 单播。
- 列表:在网络 A 的 RHEL 路由器上: 创建名为 tun0 的 IPIP 隧道接口: # nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 198.51.100.5 local 203.0.113.10 remote 和 local 参数设置远程和本地路由器的公共 IP 地址。 将 IPv4 地址设为 tun0 设备: # nmcli connection modify tun0 ipv4.addresses '10.0.1.1/30' 请注意,具有两个可用 IP 地址的 /30 子网足以满足隧道的需要。 …
- 列表:创建名为 tun0 的 IPIP 隧道接口: # nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 198.51.100.5 local 203.0.113.10 remote 和 local 参数设置远程和本地路由器的公共 IP 地址。
- 列表:将 IPv4 地址设为 tun0 设备: # nmcli connection modify tun0 ipv4.addresses '10.0.1.1/30' 请注意,具有两个可用 IP 地址的 /30 子网足以满足隧道的需要。
- 命令/配置摘录:
# nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 198.51.100.5 local 203.0.113.10
# nmcli connection modify tun0 ipv4.addresses '10.0.1.1/30'- 注意:重要 通过 IPIP 隧道发送的数据没有加密。出于安全考虑,只在已经加密的数据中使用隧道,比如 HTTPS。
8.2. 配置 GRE 隧道来封装 IPv4 数据包中的第 3 层流量
- 要点:通用路由封装(GRE)隧道封装 IPv4 数据包中的第 3 层流量。GRE 隧道可以使用有效的以太网类型封装任何第 3 层协议。
- 要点:例如,您可以在两个 RHEL 路由器之间创建一个 GRE 隧道来通过互联网连接两个内部子网,如下图所示:
- 列表:每个 RHEL 路由器都有一个网络接口,它连接到其本地子网。
- 列表:每个 RHEL 路由器都有一个网络接口,它连接到互联网。
- 列表:在网络 A 的 RHEL 路由器上: 创建名为 gre1 的 GRE 隧道接口: # nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10 remote 和 local 参数设置远程和本地路由器的公共 IP 地址。 重要 保留 gre0 设备名称。对该设备使用 gre1 或者不同的名称。 将 IPv4 地址设为 gre1 设备: # nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30' …
- 列表:创建名为 gre1 的 GRE 隧道接口: # nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10 remote 和 local 参数设置远程和本地路由器的公共 IP 地址。 重要 保留 gre0 设备名称。对该设备使用 gre1 或者不同的名称。
- 列表:将 IPv4 地址设为 gre1 设备: # nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30' 请注意,具有两个可用 IP 地址的 /30 子网足以满足隧道的需要。
- 列表:将 gre1 连接配置为使用手动 IPv4 配置: # nmcli connection modify gre1 ipv4.method manual
- 命令/配置摘录:
# nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10
# nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30'- 注意:重要 通过 GRE 隧道发送的数据没有加密。出于安全考虑,只在已经加密的数据中使用隧道,比如 HTTPS。
- 注意:重要 保留 gre0 设备名称。对该设备使用 gre1 或者不同的名称。
8.3. 配置 GRETAP 隧道来通过 IPv4 传输以太网帧
- 要点:通用路由封装终端接入点(GRETAP)隧道在 OSI 级别 2 上运行,并封装 IPv4 数据包中的以太网流量。
- 要点:例如,您可以在两个 RHEL 路由器之间创建一个 GRETAP 隧道,以使用网桥连接两个网络,如下图所示:
- 列表:每个 RHEL 路由器都有一个网络接口,它连接到其本地网络,接口没有分配 IP 配置。
- 列表:每个 RHEL 路由器都有一个网络接口,它连接到互联网。
- 列表:在网络 A 的 RHEL 路由器上: 创建名为 bridge0 的网桥接口: # nmcli connection add type bridge con-name bridge0 ifname bridge0 配置网桥的 IP 设置: # nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' # nmcli connection modify bridge0 ipv4.method manual 为连接到本地网络的接口添加新连接配置集到网桥: # nmcli connection add type ethernet port-type bridge con-n…
- 列表:创建名为 bridge0 的网桥接口: # nmcli connection add type bridge con-name bridge0 ifname bridge0
- 列表:配置网桥的 IP 设置: # nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' # nmcli connection modify bridge0 ipv4.method manual
- 列表:为连接到本地网络的接口添加新连接配置集到网桥: # nmcli connection add type ethernet port-type bridge con-name bridge0-port1 ifname enp1s0 controller bridge0
- 命令/配置摘录:
# nmcli connection add type bridge con-name bridge0 ifname bridge0
# nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' # nmcli connection modify bridge0 ipv4.method manual- 注意:重要 通过 GRETAP 隧道发送的数据没有加密。出于安全考虑,通过 VPN 或不同的加密连接建立隧道。
- 注意:重要 保留 gretap0 设备名称。对该设备使用 gretap1 或者不同的名称。
第 9 章 管理 wifi 连接
- 要点:如果您的主机包含 wifi 适配器,您可以将其连接到 wifi 网络。
- 要点:RHEL 提供多个实用程序和应用程序来配置和连接到 wifi 网络,例如:
- 列表:使用 nmcli 工具,使用命令行配置连接。
- 列表:使用 nmtui 应用程序在基于文本的用户界面中配置连接。
- 列表:使用 GNOME Settings 应用程序,使用 GNOME 应用程序配置连接。
- 列表:使用 network RHEL 系统角色在一个或多个主机上自动化连接的配置。
9.1. 支持的 wifi 安全类型
- 要点:wifi 网络的安全类型决定了可以安全地传输数据。
- 要点:Red Hat Enterprise Linux 支持以下 wifi 安全类型:
- 列表:None:加密被禁用,数据在网络中以纯文本形式传输。
- 列表:增强的 Open :使用 opportunistic 无线加密(OWE)。设备创建唯一的主密钥(PMK)。这会在不进行身份验证的情况下加密连接。
- 列表:LEAP: 轻量级可扩展验证协议。Cisco 开发了此协议。它是专有版本的 EAP。
- 列表:WPA & WPA2 Personal :在个人模式中,WPA)和 Wi-Fi Protected Access 2 (WPA2) 验证方法使用预共享密钥。
- 列表:WPA & WPA2 Enterprise: 在企业模式中,WPA 和 WPA2 使用 EAP 框架。它们向 RADIUS 服务器验证用户。
- 列表:WPA3 Personal: Wi-Fi Protected Access 3 (WPA3) Personal 使用 SAE 而不是预共享密钥(PSK)。这可防止字典攻击。WPA3 使用完美转发保密 (PFS)。
- 注意:警告 不要连接到不使用加密的 wifi 网络,或者只支持不安全的 WPA 标准的网络。
9.2. 使用 nmcli 连接到 wifi 网络
- 要点:当您第一次使用 nmcli 工具连接到 wifi 网络时,它会自动创建 NetworkManager 连接配置文件。然后,您可以修改此配置文件来添加特定的设置,如静态 IP 地址。
- 要点:先决条件
- 列表:在主机上安装了 wifi 设备。
- 列表:wifi 设备已启用。要进行验证,请使用 nmcli radio 命令。
- 列表:如果网络管理器 (NetworkManager) 中禁用了 wifi radio,请启用此功能: # nmcli radio wifi on
- 列表:可选:显示可用的 wifi 网络: # nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 00:53:00:2F:3B:08 Office Infra 44 270 Mbit/s 57 ▂▄▆_ WPA2 WPA3 00:53:00:15:03:BF -- Infra 1 130 Mbit/s 48 ▂▄__ WPA2 WPA3 服务设置标识符 (SSID) 列包含网络的名称。如果列显示 --,则此网络的接入点不会广播 SSID。
- 列表:连接到 wifi 网络: # nmcli device wifi connect Office --ask Password: wifi-password 如果您希望在命令中设置密码而不是以交互方式输入密码,请在命令中使用 password <wifi_password> 选项,而不是--ask : # nmcli device wifi connect Office password <wifi_password> 请注意,如果网络需要静态 IP 地址,NetworkManager 无法在此时激活连接。您可以在后续步骤中配置 IP 地址。
- 列表:如果网络需要静态 IP 地址: 配置 IPv4 地址设置,例如: # nmcli connection modify Office ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com 配置 IPv6 地址设置,例如: # nmcli connection modify Office ipv6.method manual ipv6.addresses 2001:db8:1::1/64 ipv6.gateway 2001:db8:1::fffe i…
- 命令/配置摘录:
# nmcli radio wifi on
# nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 00:53:00:2F:3B:08 Office Infra 44 270 Mbit/s 57 ▂▄▆_ WPA2 WPA3 00:53:00:15:03:BF -- Infra 1 130 Mbit/s 48 ▂▄__ WPA2 WPA39.3. 使用 GNOME Settings 连接到 wifi 网络
- 要点:您可以使用 GNOME Settings 应用程序(也称为 gnome-control-center )连接到 wifi 网络并配置连接。当您第一次连接到网络时,GNOME 会为它创建一个 NetworkManager 连接配置集。
- 要点:在 GNOME Settings 中,您可以为 RHEL 支持的所有 wifi 网络安全类型配置 wifi 连接。
- 列表:在主机上安装了 wifi 设备。
- 列表:wifi 设备已启用。要进行验证,请使用 nmcli radio 命令。
- 列表:按 Super 键,键入 Wi-Fi,然后按 Enter 键。
- 列表:点您要连接的 wifi 网络的名称。
- 列表:输入网络的密码,点 Connect。
- 列表:如果网络需要额外的设置,如静态 IP 地址或 WPA2 个人以外的安全类型: 点网络名称旁边的齿轮图标。 可选:在 Details 标签页中配置网络配置集无法自动连接。 如果停用这个功能,则必须总是手动连接到网络,例如使用 GNOME Settings 或 GNOME 系统菜单。 在 IPv4 选项卡上配置 IPv4 设置,并在 IPv6 选项卡上配置 IPv6 设置。 在 Security 选项卡中,选择网络验证,如 WPA3 Personal,然后输入密码。 根据所选安全性,应用程序会显示其他字段。相应地填充它们。详情请参阅 wifi 网络管理员。 点Apply。
- 命令/配置摘录:
# ping -c 3 example.com9.4. 使用 nmtui 配置 wifi 连接
- 要点:nmtui 应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui 连接到 wifi 网络。
- 要点:流程
- 列表:启动 nmtui : # nmtui
- 列表:选择 Edit a connection,点 Enter。
- 列表:按 Add 按钮。
- 列表:从网络类型列表中选择 Wi-Fi,然后按 Enter 。
- 列表:可选:为要创建的 NetworkManager 配置集输入一个名称。 在有多个配置文件的主机上,有意义的名称可以更容易识别配置文件的用途。
- 列表:在 SSID 字段中输入 Wi-Fi 网络的名称,即服务集标识符(SSID)。
- 命令/配置摘录:
# nmtui
# nmcli connection show --active NAME ID TYPE DEVICE Office 2501eb7e-7b16-4dc6-97ef-7cc460139a58 wifi wlp0s20f3- 注意:注意 在 nmtui 中: 使用光标键导航。 选择一个按钮并按 Enter 键。 使用 空格 选择和清除复选框。 要返回上一个屏幕,请使用 ESC。
9.5. 使用 nmcli 在现有配置文件中配置带有 802.1X 网络身份验证的 wifi 连接
- 要点:您可以使用 nmcli 工具将客户端配置为向网络验证其自身。
- 要点:例如,您可以在现有 NetworkManager wifi 配置文件中使用 Microsoft Challenge-Handshake Authentication Protocol 版本 2 (MSCHAPv2)配置 Protected Extensible Authentication Protocol (PEAP)身份验证。
- 列表:网络必须具有 802.1X 网络身份验证。
- 列表:Wi-Fi 连接配置集存在于 NetworkManager 中,且具有有效的 IP 配置。
- 列表:如果需要客户端验证验证方的证书,则证书颁发机构(CA)证书必须存储在 /etc/pki/ca-trust/source/anchors/ 目录中。
- 列表:wpa_supplicant 软件包已安装。
- 列表:将 Wi-Fi 安全模式设为 wpa-eap、将可扩展验证协议(EAP)设为 peap,将内部验证协议设为 mschapv2,和用户名: # nmcli connection modify wlp1s0 wireless-security.key-mgmt wpa-eap 802-1x.eap peap 802-1x.phase2-auth mschapv2 802-1x.identity <user_name> 请注意,您必须在单个命令中设置 wireless-security.key-mgmt、802-1x.eap、802-1x.phase2-auth 和 802-1x.identity 参数。
- 列表:可选:将密码存储在配置中: # nmcli connection modify wlp1s0 802-1x.password <password> 重要 默认情况下,NetworkManager 在 /etc/sysconfig/network-scripts/keys-connection_name 文件中以纯文本形式存储密码,该文件只对 root 用户可读。但是,配置文件中的纯文本密码可能会造成安全风险。 要提高安全性,请将 802-1x.password-flags 参数设置为 agent-owned。使用这个设置,在具有 GNOME 桌面环境或运行 nm-applet 的服务器上,NetworkManager 会在您首先解…
- 命令/配置摘录:
# nmcli connection modify wlp1s0 wireless-security.key-mgmt wpa-eap 802-1x.eap peap 802-1x.phase2-auth mschapv2 802-1x.identity <user_name>
# nmcli connection modify wlp1s0 802-1x.password <password>- 注意:重要 默认情况下,NetworkManager 在 /etc/sysconfig/network-scripts/keys-connection_name 文件中以纯文本形式存储密码,该文件只对 root 用户可读。但是,配置文件中的纯文本密码可能会造成安全风险。 要提高安全性,请将 802-1x.password-flags 参数设置为 agent-owned。使用这个设置,在具有 GNOME 桌面环境或运行 nm-applet 的服务器上,NetworkManager 会在您首先解锁密钥环后从这些服务检索密码。在其他情况下,NetworkManager 会提示输入密码。
- 注意:注意 验证验证器的证书可以提高安全性。
9.6. 使用 network RHEL 系统角色配置带有 802.1X 网络身份验证的 wifi 连接
- 要点:通过使用 network RHEL 系统角色,您可以在远程主机上自动设置网络访问控制(NAC)。您可以在 playbook 中为客户端定义身份验证详情,以确保只有授权的客户端才能访问网络。
- 要点:您可以使用 Ansible playbook 将私钥、证书和 CA 证书复制到客户端,然后使用 network RHEL 系统角色配置具有 802.1X 网络身份验证的连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:网络支持 802.1X 网络身份验证。
- 列表:您已在受管节点上安装了 wpa_supplicant 软件包。
- 列表:DHCP 位于受管节点的网络中。
- 命令/配置摘录:
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
pwd: <password>9.7. 手动设置无线规范域
- 要点:在 RHEL 上,udev 规则会启动 setregdomain 工具来设置无线规范域。然后,实用程序为内核提供此信息。
- 要点:默认情况下,setregdomain 会尝试自动决定国家代码。如果此操作失败,则无线规范域设置可能会出错。要临时解决这个问题,您可以手动设置国家代码。
- 列表:wifi 设备的驱动程序支持更改规范域。
- 列表:可选:显示当前规范域设置: # iw reg get global country US: DFS-FCC ...
- 列表:使用以下内容创建 /etc/sysconfig/regdomain 文件: COUNTRY=<country_code> 将 COUNTRY 变量设置为一个 ISO 3166-1 alpha2 国家代码,如 DE 代表德国,US 代表美国。
- 列表:设置规范域: # setregdomain
- 列表:显示规范域设置: # iw reg get global country DE: DFS-ETSI ...
- 列表:ISO 3166 国家代码
- 命令/配置摘录:
# iw reg get global country US: DFS-FCC ...
COUNTRY=<country_code>- 注意:重要 手动设置规范域将禁用自动检测。因此,如果您稍后在不同的国家/地区使用计算机,之前配置的设置可能不再正确。在这种情况下,删除 /etc/sysconfig/regdomain 文件以切回到自动检测,或使用此流程再次更新规范域设置。
第 10 章 在 IBM Z 中配置持久性 qeth 设备
- 要点:附加到逻辑分区(LPAR)或 z/VM 客户机时,IBM Z 上的基于频道的网络接口是虚拟化的,且在 RHEL 中无法自动看到。在网络配置中使用该设备前,请将子通道分组到一个逻辑 qeth 设备并将其激活。
- 要点:先决条件
- 列表:您定义了 I/O 子频道,并将其附加到 LPAR 或 z/VM 客户机。
- 列表:已安装 s390utils-base 软件包。
- 列表:取消屏蔽 qeth 设备的设备 ID: 如果您知道设备 ID,请取消屏蔽这些 ID。例如: # cio_ignore --remove 0.0.0600,0.0.0601,0.0.0602 指定用逗号分开的设备 ID,或者指定为范围,如 0.0.0600-0.0.0602。 如果您不知道设备 ID,您可以取消屏蔽所有 ID: # cio_ignore --remove-all
- 列表:如果您知道设备 ID,请取消屏蔽这些 ID。例如: # cio_ignore --remove 0.0.0600,0.0.0601,0.0.0602 指定用逗号分开的设备 ID,或者指定为范围,如 0.0.0600-0.0.0602。
- 列表:如果您不知道设备 ID,您可以取消屏蔽所有 ID: # cio_ignore --remove-all
- 列表:显示可用的 qeth 设备: # lszdev qeth TYPE ID ON PERS NAMES qeth 0.0.0600:0.0.0601:0.0.0602 no no 输出包含以下列: TYPE :显示设备类型。如果您运行 lszdev qeth,命令只返回 qeth 设备。 id :显示硬件的子通道地址。这是三个用于读取、写入和数据传输的三个十六进制地址的三倍。 ON :指示设备的当前状态,没有 意味着驱动程序还没有分组频道并创建了功能网络设备。 PERS :指示 没有确认没有 udev 设备管理器规则的配置的持久性状态,因此重启后不会自动启用该设备。 NAMES :显示您可以在 NetworkManager 中使用的…
- 命令/配置摘录:
# cio_ignore --remove 0.0.0600,0.0.0601,0.0.0602
# cio_ignore --remove-all第 11 章 使用 MACsec 加密同一物理网络中的第 2 层流量
- 要点:配置 MACsec 以加密同一物理网络中的第 2 层流量。这有助于直接连接的设备(如主机或交换机)之间的安全点对点通信。
11.1. MACsec 如何提高安全性
- 要点:使用 Media Access Control Security (MACsec)来加密和验证第 2 层的 LAN 流量。这无需在第 7 层加密单个服务。
- 要点:MACsec 保护设备间的点对点通信。例如,您可以在通过 Metro-Ethernet 连接连接到分支和中心办公室的两个主机上配置 MACsec 来提高安全性。
- 列表:动态主机配置协议(DHCP)
- 列表:地址解析协议(ARP)
- 列表:IPv4 和 IPv6 流量
- 列表:任何通过 IP 的流量,如 TCP 或 UDP
- 列表:host-to-host
- 列表:host-to-switch 和 switch-to-other-hosts
- 注意:重要 您只能在同一物理或虚拟 LAN 中的主机之间使用 MACsec。
11.2. 使用 nmcli 配置 MACsec 连接
- 要点:您可以使用 nmcli 工具将以太网接口配置为使用 MACsec。例如,您可以在通过以太网连接的两个主机之间创建一个 MACsec 连接。
- 要点:流程
- 列表:在第一个主机上,为预共享密钥创建连接关联密钥(CAK)和连接关联密钥名称(CKN): 创建一个 16 字节的十六进制 CAK: # dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a 创建一个 32 字节的十六进制 CKN: # dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e18…
- 列表:创建一个 16 字节的十六进制 CAK: # dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
- 列表:创建一个 32 字节的十六进制 CKN: # dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
- 列表:在两个主机上,使用第 1 步中的 CAK 和 CKN 创建 MACsec 连接。在 MACsec-protected 网络的每个主机上,这些值必须相同: # nmcli connection add type macsec con-name macsec0 ifname macsec0 connection.autoconnect yes macsec.parent enp1s0 macsec.mode psk macsec.mka-cak 50b71a8ef0bd5751ea76de6d6c98c03a macsec.mka-ckn f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df14…
- 列表:配置 MACsec 连接中的 IP 设置。 配置 IPv4 设置。例如,要为 macsec0 连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器,请输入: # nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' 配置 IPv6 设置。例如,要为 macsec0 连接设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器,请输入: # nmcli connection modify macsec0 ip…
- 列表:配置 IPv4 设置。例如,要为 macsec0 连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器,请输入: # nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253'
- 命令/配置摘录:
# dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
# dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c455011.3. 使用 nmstatectl 配置 MACsec 连接
- 要点:您可以使用声明性 Nmstate API 将以太网接口配置为使用 MACsec。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:服务器配置中存在一个物理或虚拟以太网网络接口控制器(NIC)。
- 列表:nmstate 软件包已安装。
- 列表:在第一个主机上,为预共享密钥创建连接关联密钥(CAK)和连接关联密钥名称(CKN): 创建一个 16 字节的十六进制 CAK: # dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a 创建一个 32 字节的十六进制 CKN: # dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e18…
- 列表:创建一个 16 字节的十六进制 CAK: # dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
- 列表:创建一个 32 字节的十六进制 CKN: # dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
- 列表:在您要通过 MACsec 连接连接的两个主机上,完成以下步骤: 使用以下设置创建一个 YAML 文件,如 create-macsec-connection.yml : --- routes: config: - destination: 0.0.0.0/0 next-hop-interface: macsec0 next-hop-address: 192.0.2.2 table-id: 254 - destination: 192.0.2.2/32 next-hop-interface: macsec0 next-hop-address: 0.0.0.0 table-id: 254 dns-resolver: …
- 命令/配置摘录:
# dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
# dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550第 12 章 将 NetworkManager 配置为忽略某些接口
- 要点:要手动处理网络接口,请在 NetworkManager 中将其配置为非受管。默认情况下,NetworkManager 管理所有这些,除了 /usr/lib/udev/rules.d/85-nm-unmanaged.rules 文件中所描述的除外。您可以将其他接口明确配置为非受管,以忽略它们。
- 要点:NetworkManager 会自动激活任何检测到物理载体信号的受管接口。但是,您可以禁用此行为,以防止在电缆连接时自动上线。这可用于保护或隔离未使用的接口。
12.1. 使用 NetworkManager device 部分将接口永久配置为非受管
- 要点:将接口定义为非受管设置会进行管理。如果使用配置文件中的设备部分,则可以根据标准(如 MAC 地址)将接口设置为非托管。NetworkManager 不会管理这些接口,直到您将其包含在连接配置文件中。
- 要点:如果需要灵活的标准(例如通配符匹配所有 wifi 接口),请使用配置文件中的设备部分将接口配置为非托管。
- 列表:可选:显示要识别设备或您要设置为 非受管设备 的接口列表: # ip link show ... 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:74:79:56 brd ff:ff:ff:ff:ff:ff ...
- 列表:在 /etc/NetworkManager/conf.d/ 目录中创建一个 *.conf 文件,例如 /etc/NetworkManager/conf.d/99-unmanaged-devices.conf。
- 列表:对于您要配置为 unmanaged 的每个接口,在文件中添加具有唯一名称的部分。 重要 该部分的名称必须以 device- 开头。 要将特定接口配置为 unmanaged,请添加: [device-enp1s0-unmanaged] match-device=interface-name:enp1s0 managed=0 要将具有特定 MAC 地址的接口配置为 unmanaged,请添加: [device-mac525400747956-unmanaged] match-device=mac:52:54:00:74:79:56 managed=0 要将特定类型的所有接口配置为 unmanaged,请添加: [device-ethe…
- 列表:要将特定接口配置为 unmanaged,请添加: [device-enp1s0-unmanaged] match-device=interface-name:enp1s0 managed=0
- 列表:要将具有特定 MAC 地址的接口配置为 unmanaged,请添加: [device-mac525400747956-unmanaged] match-device=mac:52:54:00:74:79:56 managed=0
- 列表:要将特定类型的所有接口配置为 unmanaged,请添加: [device-ethernet-unmanaged] match-device=type:ethernet managed=0
- 命令/配置摘录:
# ip link show ... 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:74:79:56 brd ff:ff:ff:ff:ff:ff ...
[device-enp1s0-unmanaged] match-device=interface-name:enp1s0 managed=0- 注意:重要 该部分的名称必须以 device- 开头。
12.2. 使用 nmcli将接口临时配置为非受管
- 要点:您可以临时将接口配置为 unmanaged,例如用于测试目的。这个更改在重新加载和重启 NetworkManager systemd 服务后保留不变,但系统重启会改变。
- 要点:流程
- 列表:可选:显示要标识您要设置为 非受管 的接口列表: # nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet disconnected -- ...
- 列表:将接口 设置为非受管状态 : # nmcli device set <interface> managed no
- 列表:可选:取消激活接口: # ip link set <interface> down
- 列表:显示接口列表: # nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unmanaged -- ... enp1s0 接口旁边的 unmanaged 状态表示 NetworkManager 不管理该设备。
- 列表:如果您也取消激活了接口,请验证其状态是否为 down : # ip link show enp1s0 2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
- 命令/配置摘录:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet disconnected -- ...
# nmcli device set <interface> managed no12.3. 确定 NetworkManager 不管理特定网络接口的原因
- 要点:除了每个网络接口的状态外,NetworkManager 还跟踪接口处于当前状态的原因。您可以使用此功能来识别 NetworkManager 不管理某些接口的原因。
- 要点:流程
- 列表:显示所有网络接口的状态及其原因: # nmcli -f GENERAL.DEVICE,GENERAL.STATE,GENERAL.REASON device show 如果将接口名称传递给命令,则只能显示指定接口的输出。 输出示例: GENERAL.DEVICE: enp1s0 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 75 (The device is unmanaged by explicit user decision (e.g. 'nmcli device set $DEV managed no')) GENERAL.DEVICE: enp7s0 GENERAL.STATE…
- 命令/配置摘录:
# nmcli -f GENERAL.DEVICE,GENERAL.STATE,GENERAL.REASON device show
GENERAL.DEVICE: enp1s0 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 75 (The device is unmanaged by explicit user decision (e.g. 'nmcli device set $DEV managed no')) GENERAL.DEVICE: enp7s0 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 74 (The device is unmanaged by user decision in NetworkManager.conf ('unmanaged' in a [device*] section) GENERAL.DEVICE: veth3 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 77 (The device is unmanaged via udev rule)- 注意:注意 请注意,命令会返回所有接口的状态,无论它们是否被管理还是非受管。
第 13 章 管理默认网关
- 要点:默认网关是在没有其他路由与数据包的目的地匹配时转发网络数据包的路由器。在本地网络中,默认网关通常是与距离互联网有一跳的主机。
13.1. 使用 nmcli 对现有连接设置默认网关
- 要点:在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以使用 nmcli 工具对之前创建的连接设置或更新默认网关设置。
- 要点:先决条件
- 列表:至少需要在设置默认网关的连接上配置一个静态 IP 地址。
- 列表:如果用户在物理控制台中登录,用户权限就足够了。否则,该用户必须具有 root 权限。
- 列表:设置默认网关的 IP 地址: 要设置 IPv4 默认网关,请输入: # nmcli connection modify <connection_name> ipv4.gateway "<IPv4_gateway_address>" 要设置 IPv6 默认网关,请输入: # nmcli connection modify <connection_name> ipv6.gateway "<IPv6_gateway_address>"
- 列表:重启网络连接以使更改生效: # nmcli connection up <connection_name> 警告 所有目前使用这个网络连接的连接在重启过程中暂时中断。
- 列表:验证路由是否处于活跃状态: 要显示 IPv4 默认网关,请输入: # ip -4 route default via 192.0.2.1 dev example proto static metric 100 要显示 IPv6 默认网关,请输入: # ip -6 route default via 2001:db8:1::1 dev example proto static metric 100 pref medium
- 列表:要显示 IPv4 默认网关,请输入: # ip -4 route default via 192.0.2.1 dev example proto static metric 100
- 命令/配置摘录:
# nmcli connection modify <connection_name> ipv4.gateway "<IPv4_gateway_address>"
# nmcli connection modify <connection_name> ipv6.gateway "<IPv6_gateway_address>"- 注意:警告 所有目前使用这个网络连接的连接在重启过程中暂时中断。
13.2. 使用 nmstatectl 对现有连接设置默认网关
- 要点:您可以使用声明性 Nmstate API 设置或更新连接中的默认网关。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:至少需要在设置默认网关的连接上配置一个静态 IP 地址。
- 列表:enp1s0 接口已配置,默认网关的 IP 地址在此接口的 IP 配置子网内。
- 列表:nmstate 软件包已安装。
- 列表:创建一个包含以下内容的 YAML 文件,如 ~/set-default-gateway.yml : --- routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.1 next-hop-interface: enp1s0 这些设置将 192.0.2.1 定义为默认网关,可通过 enp1s0 接口访问默认网关。
- 列表:将设置应用到系统: # nmstatectl apply ~/set-default-gateway.yml
- 命令/配置摘录:
--- routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.1 next-hop-interface: enp1s0
# nmstatectl apply ~/set-default-gateway.yml13.3. 使用 network RHEL 系统角色在现有连接上设置默认网关
- 要点:通过使用 network RHEL 系统角色,您可以在 NetworkManager 连接配置文件中自动设置默认网关。使用此方法,您可以在 playbook 中定义的主机上远程配置默认网关。
- 要点:在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以在之前创建的连接上设置或更新默认网关设置。
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 type: ethern…
- 列表:验证 playbook 语法: $ ansible-playbook --syntax-check ~/playbook.yml 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
- 列表:运行 playbook: $ ansible-playbook ~/playbook.yml
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 198.51.100.20/24 - 2001:db8:1::1/64 gateway4: 198.51.100.254 gateway6: 2001:db8:1::fffe dns: - 198.51.100.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
$ ansible-playbook --syntax-check ~/playbook.yml- 注意:警告 您不能使用 network RHEL 系统角色只更新现有连接配置文件中的特定值。角色确保连接配置文件与 playbook 中的设置完全匹配。如果具有相同名称的连接配置文件存在,则角色将应用 playbook 中的设置,并将配置文件中的所有其他设置重置为其默认值。要防止重置值,请始终在 playbook 中指定网络连接配置文件的整个配置,包括您不想更改的设置。
13.4. NetworkManager 如何管理多个默认网关
- 要点:在某些情况下,您可能需要在主机上设置多个默认网关。但是,为了避免异步路由问题,同一协议的每个默认网关都需要单独的指标值。
- 要点:请注意,RHEL 只使用到设置成最低指标的默认网关的连接。
- 列表:配置基于策略的路由以定义其他路由
- 命令/配置摘录:
# nmcli connection modify <connection_name> ipv4.route-metric <value> ipv6.route-metric <value>- 注意:重要 不要为多个连接配置集中的同一协议设置相同的指标值以避免路由问题。
- 表格样本(共 11 行):
- 连接类型 | 默认指标值
- VPN | 50
- Ethernet | 100
- MACsec | 125
13.5. 配置 NetworkManager 以避免使用特定配置集提供默认网关
- 要点:在没有连接到默认网关的连接配置文件中,您可以配置 NetworkManager 永远不使用此配置文件来提供默认网关。
- 要点:先决条件
- 列表:没有连接到默认网关的连接的 NetworkManager 连接配置文件存在。
- 列表:如果连接使用动态 IP 配置,请配置 NetworkManager 不会使用这个连接作为对应 IP 类型的默认连接,这意味着 NetworkManager 不会将默认路由分配给它: # nmcli connection modify <connection_name> ipv4.never-default yes ipv6.never-default yes 请注意,将 ipv4.never-default 和 ipv6.never-default 设为 yes,会自动从连接配置文件中删除相应协议默认网关的 IP 地址。
- 列表:激活连接: # nmcli connection up <connection_name>
- 列表:使用 ip -4 路由和 ip -6 route 命令,来验证 RHEL 是否未对 IPv4 和 IPv6 协议的默认路使用网络接口。
- 命令/配置摘录:
# nmcli connection modify <connection_name> ipv4.never-default yes ipv6.never-default yes
# nmcli connection up <connection_name>13.6. 修复因为多个默认网关导致的意外路由行为
- 要点:对于大多数主机,您只需要单个默认网关来防止意外的路由行为和异步路由问题。通常只在特定情况下需要多个默认网关,比如在使用多路径 TCP 时。
- 要点:先决条件
- 列表:主机使用 NetworkManager 管理网络连接,这是默认设置。
- 列表:主机有多个网络接口。
- 列表:主机配置了多个默认网关。
- 列表:显示路由表: 对于 IPv4,请输入: # ip -4 route default via 192.0.2.1 dev enp1s0 proto dhcp metric 101 default via 198.51.100.1 dev enp7s0 proto dhcp metric 102 ... 对于 IPv6,请输入: # ip -6 route default via 2001:db8:1::1 dev enp1s0 proto ra metric 101 pref medium default via 2001:db8:2::1 dev enp7s0 proto ra metric 102 pref medium ...…
- 列表:对于 IPv4,请输入: # ip -4 route default via 192.0.2.1 dev enp1s0 proto dhcp metric 101 default via 198.51.100.1 dev enp7s0 proto dhcp metric 102 ...
- 列表:对于 IPv6,请输入: # ip -6 route default via 2001:db8:1::1 dev enp1s0 proto ra metric 101 pref medium default via 2001:db8:2::1 dev enp7s0 proto ra metric 102 pref medium ...
- 命令/配置摘录:
# ip -4 route default via 192.0.2.1 dev enp1s0 proto dhcp metric 101 default via 198.51.100.1 dev enp7s0 proto dhcp metric 102 ...
# ip -6 route default via 2001:db8:1::1 dev enp1s0 proto ra metric 101 pref medium default via 2001:db8:2::1 dev enp7s0 proto ra metric 102 pref medium ...- 注意:注意 要将流量路由到不同的互联网提供商,请使用基于策略的路由,而不是多个默认网关。
第 14 章 配置静态路由
- 要点:路由引导相互连接的网络之间的流量。在较大的环境中,管理员配置服务,以便路由器动态地了解彼此。在较小的部分中,管理员通常会配置静态路由,以确保流量可以到达其目的地。
- 要点:如果适用所有这些条件,您需要静态路由以在多个网络间获得正常运行的通信:
- 列表:流量必须通过多个网络。
- 列表:通过默认网关的独占流量流不足。
14.1. 需要静态路由的网络示例
- 要点:您需要在这个示例中的静态路由,因为并非所有 IP 网络都通过一个路由器直接连接。如果没有静态路由,一些网络无法相互通信。此外,某些网络流的流量仅有一个方向。
- 要点:对于本示例中所有网络中的一个正常运行的通信,请将静态路由配置为 Raleigh (198.51.100.0/24),下一个越点(hop)路由器 2 (203.0.113.10)。下一个跃点的 IP 地址是数据中心网络中的一个路由器 2 (203.0.113.0/24)。
- 列表:对于简化的配置,仅在路由器 1 上设置此静态路由。但是,这会增加路由器 1 上的流量,因为来自数据中心(203.0.113.0/24)的主机将流量发送到 Raleigh (198.51.100.0/24),始终通过路由器 1 到路由器 2。
- 列表:对于更复杂的配置,请在数据中心的所有主机上配置此静态路由 (203.0.113.0/24)。然后,此子网中的所有主机直接向路由器 2 (203.0.113.10)发送更接近 Raleigh 的主机 (198.51.100.0/24)。
- 列表:Berlin 网络中的主机 (192.0.2.0/24): 可以与同一子网中的其他主机通信,因为它们是直接连接的。 可以与互联网进行通信,因为路由器 1 位于 Berlin 网络(192.0.2.0/24)中,并且有默认网关,其可以访问互联网。 可以与数据中心网络 (203.0.113.0/24)通信 ,因为路由器 1 在 Berlin (192.0.2.0/24) 和数据中心(203.0.113.0/24) 网络中都有接口。 无法与 Raleigh 网络 (198.51.100.0/24) 通信,因为路由器 1 在此网络中没有接口。因此,路由器 1 将流量发送到自己的默认网关(互联网)。
- 列表:可以与同一子网中的其他主机通信,因为它们是直接连接的。
- 列表:可以与互联网进行通信,因为路由器 1 位于 Berlin 网络(192.0.2.0/24)中,并且有默认网关,其可以访问互联网。
- 列表:可以与数据中心网络 (203.0.113.0/24)通信 ,因为路由器 1 在 Berlin (192.0.2.0/24) 和数据中心(203.0.113.0/24) 网络中都有接口。
- 注意:注意 本例中的网络拓扑是假设的,仅用于解释静态路由的概念。在生产环境中并不推荐使用这个拓扑。
- 注意:注意 除了配置静态路由外,还必须在两个路由器上启用 IP 转发。
14.2. 如何使用 nmcli 工具配置静态路由
- 要点:您可以使用 nmcli 工具在命令行上配置静态路由。
- 要点:使用以下语法:
- 列表:cwnd=n :设置拥塞窗口(CWND)大小,以数据包数定义。
- 列表:lock-cwnd=true|false :定义内核是否可以更新 CWND 值。
- 列表:lock-mtu=true|false :定义内核是否可以将 MTU 更新为路径 MTU 发现。
- 列表:lock-window=true|false :定义内核是否可更新 TCP 数据包的最大窗口大小。
- 列表:mtu=<mtu_value> :设置沿目标路径使用的最大传输单元(MTU)。
- 列表:onlink=true|false :定义下一个跃点是否直接附加到此链接,即使它与任何接口前缀都不匹配。
- 命令/配置摘录:
$ nmcli connection modify connection_name ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."
$ nmcli connection modify connection_name +ipv4.routes "<route>"- 注意:重要 如果您使用 ipv4.routes 选项,而前面没有 + 符号,则 nmcli 会覆盖这个参数的所有当前设置。 要创建额外的路由,请输入: $ nmcli connection modify connection_name +ipv4.routes "<route>" 要删除特定的路由,请输入: $ nmcli connection modify connection_name -ipv4.routes "<route>"
14.3. 使用 nmcli 配置静态路由
- 要点:您可以使用 nmcli connection modify 命令将静态路由添加到现有 NetworkManager 连接配置集。
- 要点:该流程配置以下路由:
- 列表:到远程 198.51.100.0/24 网络的 IPv4 路由。IP 地址为 192.0.2.10 的相应网关可以通过 LAN 连接配置文件访问。
- 列表:到远程 2001:db8:2::/64 网络的 IPv6 路由。IP 地址为 2001:db8:1::10 的相应网关可以通过 LAN 连接配置文件访问。
- 列表:LAN 连接配置文件存在,且其将位于同一个 IP 子网中的此主机配置为网关。
- 列表:将静态 IPv4 路由添加到 LAN 连接配置文件中: # nmcli connection modify LAN +ipv4.routes "198.51.100.0/24 192.0.2.10" 要在一个步骤中设置多个路由,请将用逗号分开的单个路由传给命令: # nmcli connection modify <connection_profile> +ipv4.routes "<remote_network_1>/<subnet_mask_1> <gateway_1>, <remote_network_n>/<subnet_mask_n> <gateway_n>, ..."
- 列表:将静态 IPv6 路由添加到 LAN 连接配置文件中: # nmcli connection modify LAN +ipv6.routes "2001:db8:2::/64 2001:db8:1::10"
- 列表:重新激活连接: # nmcli connection up LAN
- 命令/配置摘录:
# nmcli connection modify LAN +ipv4.routes "198.51.100.0/24 192.0.2.10"
# nmcli connection modify <connection_profile> +ipv4.routes "<remote_network_1>/<subnet_mask_1> <gateway_1>, <remote_network_n>/<subnet_mask_n> <gateway_n>, ..."14.4. 使用 nmtui 配置静态路由
- 要点:nmtui 应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui 在没有图形界面的主机上配置静态路由。
- 要点:例如,流程将路由添加到 192.0.2.0/24 网络,该网络使用运行在 198.51.100.1 上的网关,该网关可通过现有的连接配置文件访问。
- 列表:网络已配置。
- 列表:静态路由的网关必须在接口上直接访问。
- 列表:如果用户在物理控制台中登录,用户权限就足够了。否则,命令需要 root 权限。
- 列表:启动 nmtui : # nmtui
- 列表:选择 Edit a connection,然后按 Enter。
- 列表:选择您可通过其到达目的地网络的下一跳的连接配置文件,然后按 Enter 。
- 命令/配置摘录:
# nmtui
$ ip route ... 192.0.2.0/24 via 198.51.100.1 dev example proto static metric 100- 注意:注意 在 nmtui 中: 使用光标键导航。 选择一个按钮并按 Enter 键。 使用 空格 选择和清除复选框。 要返回上一个屏幕,请使用 ESC。
- 注意:重要 如果您通过使用您要重新激活的连接配置文件的远程连接(如 SSH)来运行 nmtui ,请跳过这一步。在这种情况下,如果您在 nmtui 中停用了它,连接将被终止,因此您无法再次激活它。要避免这个问题,请使用 nmcli connection <connection_profile> up 命令,来在上述场景中重新激活连接。
14.5. 使用 nmstatectl 配置静态路由
- 要点:您可以使用声明性 Nmstate API 配置静态路由。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:enp1s0 网络接口已配置,且与网关位于同一个 IP 子网。
- 列表:nmstate 软件包已安装。
- 列表:创建一个包含以下内容的 YAML 文件,如 ~/add-static-route-to-enp1s0.yml : --- routes: config: - destination: 198.51.100.0/24 next-hop-address: 192.0.2.10 next-hop-interface: enp1s0 - destination: 2001:db8:2::/64 next-hop-address: 2001:db8:1::10 next-hop-interface: enp1s0 这些设置定义以下静态路由: 到远程 198.51.100.0/24 网络的 IPv4 路由。IP 地址为 192.…
- 列表:到远程 198.51.100.0/24 网络的 IPv4 路由。IP 地址为 192.0.2.10 的对应网关可以通过 enp1s0 接口访问。
- 列表:到远程 2001:db8:2::/64 网络的 IPv6 路由。IP 地址为 2001:db8:1::10 的对应网关可以通过 enp1s0 接口访问。
- 列表:将设置应用到系统: # nmstatectl apply ~/add-static-route-to-enp1s0.yml
- 命令/配置摘录:
--- routes: config: - destination: 198.51.100.0/24 next-hop-address: 192.0.2.10 next-hop-interface: enp1s0 - destination: 2001:db8:2::/64 next-hop-address: 2001:db8:1::10 next-hop-interface: enp1s0
# nmstatectl apply ~/add-static-route-to-enp1s0.yml14.6. 使用 network RHEL 系统角色配置静态路由
- 要点:您可以使用 network RHEL 系统角色配置静态路由。
- 要点:先决条件
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP and additional routes ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp7s0 ty…
- 列表:静态 IPv4 地址 - 192.0.2.1 和 /24 子网掩码
- 列表:静态 IPv6 地址 - 2001:db8:1::1 和 /64 子网掩码
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP and additional routes ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp7s0 type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com route: route: - network: 198.51.100.0 prefix: 24 gateway: 192.0.2.10 - network: '2001:db8:2::' prefix: 64 gateway: 2001:db8:1::10 state: up
$ ansible-playbook --syntax-check ~/playbook.yml- 注意:重要 当您运行一个使用 network RHEL 系统角色的 play 时,如果设置值与 play 中指定的值不匹配,则角色会使用相同的名称覆盖现有的连接配置文件。要防止将这些值重置为其默认值,请始终在 play 中指定网络连接配置文件的整个配置,即使配置(如 IP 配置)已存在。
第 15 章 配置基于策略的路由以定义其他路由
- 要点:默认情况下,RHEL 内核使用路由表,根据目标地址转发网络数据包。使用基于策略的路由,您可以配置复杂的场景,来根据各种标准(如源地址)路由数据包。
15.1. 使用 nmcli 将流量从特定子网路由到不同的默认网关
- 要点:您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。
- 要点:例如,您可以将 RHEL 配置为默认路由,使用默认路由将所有流量路由到互联网提供商 A 。但是,从内部工作站子网接收的流量路由到供应商 B。
- 列表:系统使用 NetworkManager 来配置网络,这是默认设置。
- 列表:要在流程中配置的 RHEL 路由器有四个网络接口: enp7s0 接口已连接到提供商 A 的网络。提供商网络中的网关 IP 为 198.51.100.2,网络使用 /30 网络掩码。 enp1s0 接口已连接到提供商 B 的网络。提供商网络中的网关 IP 为 192.0.2.2,网络使用 /30 网络掩码。 enp8s0 接口已与连有内部工作站的 10.0.0.0/24 子网相连。 enp9s0 接口已与连有公司服务器的 203.0.113.0/24 子网相连。
- 列表:enp7s0 接口已连接到提供商 A 的网络。提供商网络中的网关 IP 为 198.51.100.2,网络使用 /30 网络掩码。
- 列表:enp1s0 接口已连接到提供商 B 的网络。提供商网络中的网关 IP 为 192.0.2.2,网络使用 /30 网络掩码。
- 列表:enp8s0 接口已与连有内部工作站的 10.0.0.0/24 子网相连。
- 列表:enp9s0 接口已与连有公司服务器的 203.0.113.0/24 子网相连。
- 命令/配置摘录:
# nmcli connection add type ethernet con-name Provider-A ifname enp7s0 ipv4.method manual ipv4.addresses 198.51.100.1/30 ipv4.gateway 198.51.100.2 ipv4.dns 198.51.100.200 connection.zone external
# nmcli connection add type ethernet con-name Provider-B ifname enp1s0 ipv4.method manual ipv4.addresses 192.0.2.1/30 ipv4.routes "0.0.0.0/0 192.0.2.2 table=5000" connection.zone external15.2. 使用 network RHEL 系统角色,将来自特定子网的流量路由到不同的默认网关
- 要点:您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。通过使用 network RHEL 系统角色,您可以自动化创建连接配置文件,包括路由表和规则。
- 要点:例如,您可以将 RHEL 配置为默认路由,使用默认路由将所有流量路由到互联网提供商 A 。但是,从内部工作站子网接收的流量被路由到供应商 B。通过使用 Ansible 和 network RHEL 系统角色,您可以自动化此过程,并对 playbook 中定义的主机并远程配置连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:受管节点使用 NetworkManager 和 firewalld 服务。
- 列表:您要配置的受管节点有 4 个网络接口: enp7s0 接口已连接到提供商 A 的网络。提供商网络中的网关 IP 为 198.51.100.2,网络使用 /30 网络掩码。 enp1s0 接口已连接到提供商 B 的网络。提供商网络中的网关 IP 为 192.0.2.2,网络使用 /30 网络掩码。 enp8s0 接口已与连有内部工作站的 10.0.0.0/24 子网相连。 enp9s0 接口已与连有公司服务器的 203.0.113.0/24 子网相连。
- 列表:enp7s0 接口已连接到提供商 A 的网络。提供商网络中的网关 IP 为 198.51.100.2,网络使用 /30 网络掩码。
- 命令/配置摘录:
--- - name: Configuring policy-based routing hosts: managed-node-01.example.com tasks: - name: Routing traffic from a specific subnet to a different default gateway ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: Provider-A interface_name: enp7s0 type: ethernet autoconnect: True ip: address: - 198.51.100.1/30 gateway4: 198.51.100.2 dns: - 198.51.100.200 state: up zone: external - name: Provider-B interface_name: enp1s0 type: ethernet autoconnect: True ip: address: - 192.0.2.1/30 route: - network: 0.0.0.0 prefix: 0 gateway: 192.0.2.2 table: 5000 state: up …
$ ansible-playbook --syntax-check ~/playbook.yml第 16 章 使用 hostnamectl 更改主机名
- 要点:您可以使用 hostnamectl 工具更新主机名。
- 要点:默认情况下,hostnamectl 设置以下主机名类型:
- 列表:静态主机名:存储在 /etc/hostname 文件中。通常,服务使用此名称作为主机名。
- 列表:用户友善的主机名:一个描述性名称,如 数据中心 A 中的代理服务器。
- 列表:临时主机名:通常从网络配置接收的回退值。
- 列表:可选:显示当前主机名设置: # hostnamectl status --static old-hostname.example.com
- 列表:设置新主机名: # hostnamectl set-hostname new-hostname.example.com 这个命令将静态和临时主机名设置为新值。要只设置一个特定类型,请将 --static、--pretty 或 --transient 选项传给命令。
- 列表:hostnamectl 工具自动重启 systemd-hostnamed 来激活新主机名。要使更改生效,请重启主机: # reboot 或者,如果您知道哪个服务使用主机名: 重启在服务启动时仅读取主机名的所有服务: # systemctl restart <service_name> 活跃的 shell 用户必须重新登录才能使更改生效。
- 命令/配置摘录:
# hostnamectl status --static old-hostname.example.com
# hostnamectl set-hostname new-hostname.example.com第 17 章 配置 NetworkManager 连接的 DHCP 超时行为
- 要点:在使用 DHCP 的连接配置文件中,NetworkManager 默认等待 45 秒,以便 DHCP 请求完成。您可以自定义与超时相关的设置,以根据您的环境调整连接配置文件。
- 要点:先决条件
- 列表:在主机上配置了使用 DHCP 的连接。
- 列表:可选:设置 ipv4.dhcp-timeout 和 ipv6.dhcp-timeout 属性。例如,要将这两个选项都设为 30 秒,请输入: # nmcli connection modify <connection_name> ipv4.dhcp-timeout 30 ipv6.dhcp-timeout 30 另外,将参数设置为 infinity 以配置网络管理器(NetworkManager)不会停止尝试请求和续订 IP 地址,直到成功为止。
- 列表:可选:配置如果网络管理器(NetworkManager)在超时前没有接收 IPv4 地址时的行为: # nmcli connection modify <connection_name> ipv4.may-fail <value> 如果将 ipv4.may-fail 选项设为: yes,连接的状态取决于 IPv6 配置: 如果启用了 IPv6 配置并成功,NetworkManager 会激活 IPv6 连接,不再尝试激活 IPv4 连接。 如果禁用或未配置 IPv6 配置,连接会失败。 no,连接会被停止。在这种情况下: 如果启用了连接的 autoconnect 属性,NetworkManager 会根据 autoconnect-…
- 列表:yes,连接的状态取决于 IPv6 配置: 如果启用了 IPv6 配置并成功,NetworkManager 会激活 IPv6 连接,不再尝试激活 IPv4 连接。 如果禁用或未配置 IPv6 配置,连接会失败。
- 列表:如果启用了 IPv6 配置并成功,NetworkManager 会激活 IPv6 连接,不再尝试激活 IPv4 连接。
- 列表:如果禁用或未配置 IPv6 配置,连接会失败。
- 命令/配置摘录:
# nmcli connection modify <connection_name> ipv4.dhcp-timeout 30 ipv6.dhcp-timeout 30
# nmcli connection modify <connection_name> ipv4.may-fail <value>- 注意:注意 红帽只支持 NetworkManager 内部 DHCP 客户端。
第 18 章 配置 DNS 服务器顺序
- 要点:glibc 库的 getaddrinfo() 函数将所有 DNS 请求发送到 /etc/resolv.conf 文件中指定的第一个 DNS 服务器。如果这个服务器没有回复,RHEL 会尝试所有其他名称服务器。您可以配置 NetworkManager ,来影响 /etc/resolv.conf 中的 DNS 服务器顺序。
18.1. NetworkManager 如何对 /etc/resolv.conf 中的 DNS 服务器进行排序
- 要点:NetworkManager 通过应用一组特定的规则来对 /etc/resolv.conf 文件中的 DNS 服务器进行排序。
- 要点:顺序取决于以下条件:
- 列表:如果只有一个连接配置集,NetworkManager 将使用那个连接中指定的 IPv4 和 IPv6 DNS 服务器顺序。
- 列表:如果激活多个连接配置集,NetworkManager 会根据 DNS 优先级值对 DNS 服务器进行排序。如果您设置了 DNS 优先级,NetworkManager 的行为取决于 dns 参数中设置的值。您可以在 /etc/NetworkManager/NetworkManager.conf 文件的 [main] 部分中设置此参数: dns=default 或者如果 dns 参数没有设置: NetworkManager 根据每个连接中的 ipv4.dns-priority 和 ipv6.dns-priority 参数对不同连接中的 DNS 服务器进行排序。 如果没有设置值,或者您将 ipv4.dns-priority 和 ipv6…
- 列表:dns=default 或者如果 dns 参数没有设置: NetworkManager 根据每个连接中的 ipv4.dns-priority 和 ipv6.dns-priority 参数对不同连接中的 DNS 服务器进行排序。 如果没有设置值,或者您将 ipv4.dns-priority 和 ipv6.dns-priority 设为 0 ,则 NetworkManager 将使用全局默认值。
- 列表:dns=dnsmasq 或 dns=systemd-resolved : 当您使用这些设置中的一个时,NetworkManager 将 dnsmasq 的 127.0.0.1 或 127.0.0.53 设为 /etc/resolv.conf 文件中的 nameserver 条目。 dnsmasq 和 systemd-resolved 服务将对 NetworkManager 连接中设置的搜索域的查询转发到该连接中指定的 DNS 服务器,并将对其他域的查询转发到具有默认路由的连接。当多个连接有相同的搜索域集时,dnsmasq 和 systemd-resolved 将这个域的查询转发到在具有最低优先级值的连接中设置的 DNS 服务器。
- 列表:50 用于 VPN 连接
- 列表:100 用于其他连接
18.2. 设置 NetworkManager 范围默认 DNS 服务器优先级值
- 要点:您可以覆盖 NetworkManager 的系统范围 DNS 服务器优先级默认值,来为 IPv4 和 IPv6 DNS 服务器设置自定义默认值。
- 要点:默认值如下:
- 列表:50 用于 VPN 连接
- 列表:100 用于其他连接
- 列表:编辑 /etc/NetworkManager/NetworkManager.conf 文件: 添加 [connection] 部分(如果其不存在): [connection] 将自定义默认值添加到 [connection] 部分。例如,要将 IPv4 和 IPv6 的新默认值设为 200,请添加: ipv4.dns-priority=200 ipv6.dns-priority=200 您可以将参数设为 -2147483647 和 2147483647 之间的值。请注意,将参数设置为 0 将启用内置的默认值(对于 VPN 连接为 50 ,对于其他连接为 100 )。
- 列表:添加 [connection] 部分(如果其不存在): [connection]
- 列表:将自定义默认值添加到 [connection] 部分。例如,要将 IPv4 和 IPv6 的新默认值设为 200,请添加: ipv4.dns-priority=200 ipv6.dns-priority=200 您可以将参数设为 -2147483647 和 2147483647 之间的值。请注意,将参数设置为 0 将启用内置的默认值(对于 VPN 连接为 50 ,对于其他连接为 100 )。
- 列表:重新载入 NetworkManager 服务: # systemctl reload NetworkManager
- 命令/配置摘录:
[connection]
ipv4.dns-priority=200 ipv6.dns-priority=20018.3. 设置网络管理器连接的 DNS 优先级
- 要点:如果您需要 DNS 服务器的特定顺序,您可以在连接配置文件中设置优先级值。NetworkManager 使用这些值来在服务创建或更新 /etc/resolv.conf 文件时对服务器进行排序。
- 要点:请注意,只有在您配置了多个与不同 DNS 服务器的连接时,设置 DNS 优先级才有意义。如果您只有一个与多个 DNS 服务器的连接,请在连接配置集中按首选顺序手动设置 DNS 服务器。
- 列表:系统配置了多个网络管理器连接。
- 列表:系统在 /etc/NetworkManager/NetworkManager.conf 文件中未设置 dns 参数,或者该参数被设为了 default。
- 列表:可选:显示可用的连接: # nmcli connection show NAME UUID TYPE DEVICE Example_con_1 d17ee488-4665-4de2-b28a-48befab0cd43 ethernet enp1s0 Example_con_2 916e4f67-7145-3ffa-9f7b-e7cada8f6bf7 ethernet enp7s0 ...
- 列表:设置 ipv4.dns-priority 和 ipv6.dns-priority 参数。例如,要将这两个参数都设置为 10,请输入: # nmcli connection modify <connection_name> ipv4.dns-priority 10 ipv6.dns-priority 10
- 列表:可选:对其他连接重复上一步。
- 列表:重新激活您更新的连接: # nmcli connection up <connection_name>
- 命令/配置摘录:
# nmcli connection show NAME UUID TYPE DEVICE Example_con_1 d17ee488-4665-4de2-b28a-48befab0cd43 ethernet enp1s0 Example_con_2 916e4f67-7145-3ffa-9f7b-e7cada8f6bf7 ethernet enp7s0 ...
# nmcli connection modify <connection_name> ipv4.dns-priority 10 ipv6.dns-priority 1018.4. 通过某个接口路由 DNS 流量
- 要点:NetworkManager 可以配置 systemd-resolved、dnsmasq 和 dnsconf DNS 服务。为了避免多接口系统上的 DNS 解析问题,NetworkManager 可以自动为绑定到特定网络接口的 DNS 服务器创建专用路由。
- 要点:连接配置文件中提到的每个 DNS 服务器都与一个特定的网络接口关联。DNS 服务 systemd-resolved 和 dnsmasq 确保每个 DNS 名称服务器只能通过正确的网络接口访问。但是,其他服务不支持此功能。因此,NetworkManager 具有一个自动添加专用路由的功能,以便每个名称服务器只能通过正确的接口访问。您可以配置 ipv4.routed-dns 和 ipv6.routed-dns 属性来使用此功能。
- 列表:连接配置文件 1:<example-connection-1> 默认网关:192.0.2.254 DNS 服务器:10.0.0.1 搜索域:example-domain.com
- 列表:默认网关:192.0.2.254
- 列表:DNS 服务器:10.0.0.1
- 列表:搜索域:example-domain.com
- 列表:连接配置文件 2:<example-connection-2> 默认网关:198.51.100.254 (此网关无法访问 10.0.0.0/24 网络) DNS 服务器:203.0.113.1
- 列表:默认网关:198.51.100.254 (此网关无法访问 10.0.0.0/24 网络)
- 命令/配置摘录:
# nmcli connection modify <example-connection-1> ipv4.routed-dns yes
# nmcli connection modify <example-connection-2> ipv4.routed-dns yes第 19 章 在不同域中使用不同的 DNS 服务器
- 要点:在一个 DNS 服务器无法解析所有域的环境中,管理员可将 RHEL 配置为将特定域的 DNS 请求发送到所选 DNS 服务器。
- 要点:默认情况下,RHEL 将所有 DNS 请求发送到 /etc/resolv.conf 文件中指定的第一个 DNS 服务器。如果这个服务器没有回复,RHEL 会尝试此文件中的下一个服务器,直到找到一个正常工作的为止。
- 列表:仅将 example.com 的 DNS 请求发送到 VPN 网络中的 DNS 服务器。
- 列表:将所有其他请求发送到使用默认网关在连接配置文件中配置的 DNS 服务器。
19.1. 在 NetworkManager 中使用 dnsmasq 将特定域的 DNS 请求发送到所选的 DNS 服务器
- 要点:在具有多个网络接口的主机上,如果一个 DNS 服务器无法解析所有域,您可以将 RHEL 配置为将特定域的 DNS 请求发送到所选 DNS 服务器。
- 要点:例如,您要将服务器连接到虚拟专用网络(VPN),VPN 中的主机使用 example.com 域。在这种情况下,您可以以下方式配置 RHEL ,以处理 DNS 查询:
- 列表:仅将 example.com 的 DNS 请求发送到 VPN 网络中的 DNS 服务器。
- 列表:将所有其他请求发送到使用默认网关在连接配置文件中配置的 DNS 服务器。
- 列表:系统配置了多个网络管理器连接。
- 列表:为负责解析特定域的连接配置 DNS 服务器和搜索域。 例如:要确保 VPN 连接中指定的 DNS 服务器解析对 example.com 域的查询,必须有以下设置: 可以解析 example.com 的 DNS 服务器。DHCP 服务器可以动态提供此信息,或者您可以在 VPN 连接配置文件中设置 ipv4.dns 和 ipv6.dns 参数。 搜索域设置为 example.com。DHCP 服务器可以动态提供此信息,或者您可以 VPN 连接配置文件中设置 ipv4.dns-search 和 ipv6.dns-search 参数。
- 列表:可以解析 example.com 的 DNS 服务器。DHCP 服务器可以动态提供此信息,或者您可以在 VPN 连接配置文件中设置 ipv4.dns 和 ipv6.dns 参数。
- 列表:搜索域设置为 example.com。DHCP 服务器可以动态提供此信息,或者您可以 VPN 连接配置文件中设置 ipv4.dns-search 和 ipv6.dns-search 参数。
- 命令/配置摘录:
# dnf install dnsmasq
dns=dnsmasq19.2. 使用 NetworkManager 中的 systemd-resolved 将对特定域的 DNS 请求发送到所选的 DNS 服务器
- 要点:在具有多个网络接口的主机上,如果一个 DNS 服务器无法解析所有域,您可以将 RHEL 配置为将特定域的 DNS 请求发送到所选 DNS 服务器。
- 要点:您可以将 NetworkManager 配置为启动 systemd-resolved 的实例。然后,这个 DNS stub 解析器监听 IP 地址 127.0.0.53 上的端口 53。因此,这个 stub 解析器只能从本地系统访问,而不可从网络访问。
- 列表:系统配置了多个网络管理器连接。
- 列表:为负责解析特定域的连接配置 DNS 服务器和搜索域。 例如:要确保 VPN 连接中指定的 DNS 服务器解析对 example.com 域的查询,必须有以下设置: 可以解析 example.com 的 DNS 服务器。DHCP 服务器可以动态提供此信息,或者您可以在 VPN 连接配置文件中设置 ipv4.dns 和 ipv6.dns 参数。 搜索域设置为 example.com。DHCP 服务器可以动态提供此信息,或者您可以 VPN 连接配置文件中设置 ipv4.dns-search 和 ipv6.dns-search 参数。
- 列表:可以解析 example.com 的 DNS 服务器。DHCP 服务器可以动态提供此信息,或者您可以在 VPN 连接配置文件中设置 ipv4.dns 和 ipv6.dns 参数。
- 列表:搜索域设置为 example.com。DHCP 服务器可以动态提供此信息,或者您可以 VPN 连接配置文件中设置 ipv4.dns-search 和 ipv6.dns-search 参数。
- 列表:安装 systemd-resolved 软件包: # dnf install systemd-resolved
- 列表:启用并启动 systemd-resolved 服务: # systemctl --now enable systemd-resolved
- 命令/配置摘录:
# dnf install systemd-resolved
# systemctl --now enable systemd-resolved第 20 章 使用 802.1X 标准和存储在文件系统上的证书对 RHEL 客户端进行网络验证
- 要点:基于端口的网络访问控制(NAC),基于 IEEE 802.1X 标准,保护网络免受未授权客户端访问。如果网络使用可扩展身份验证协议传输层安全(EAP-TLS),则需要一个证书来验证客户端。
20.1. 使用 nmcli 在现有以太网连接上配置 802.1X 网络身份验证
- 要点:您可以使用 nmcli 工具在命令行上配置带有 802.1X 网络身份验证的以太网连接。
- 要点:先决条件
- 列表:网络支持 802.1X 网络身份验证。
- 列表:以太网连接配置集存在于 NetworkManager 中,且具有有效的 IP 配置。
- 列表:客户端上存在 TLS 身份验证所需的以下文件: 存储的客户端密钥位于 /etc/pki/tls/private/client.key 文件中,该文件归 root 用户所有,且只对 root 可读。 客户端证书存储在 /etc/pki/tls/certs/client.crt 文件中。 证书颁发机构(CA)证书存储在 /etc/pki/tls/certs/ca.crt 文件中。
- 列表:存储的客户端密钥位于 /etc/pki/tls/private/client.key 文件中,该文件归 root 用户所有,且只对 root 可读。
- 列表:客户端证书存储在 /etc/pki/tls/certs/client.crt 文件中。
- 列表:证书颁发机构(CA)证书存储在 /etc/pki/tls/certs/ca.crt 文件中。
- 命令/配置摘录:
# nmcli connection modify enp1s0 802-1x.eap tls 802-1x.client-cert /etc/pki/tls/certs/client.crt 802-1x.private-key /etc/pki/tls/private/client.key
# nmcli connection modify enp1s0 802-1x.ca-cert /etc/pki/tls/certs/ca.crt- 注意:重要 默认情况下,NetworkManager 将密码以明文形式存储在磁盘上的连接配置文件中,但该文件只对 root 用户可读。但是,在配置文件中清除文本密码会有安全隐患。 要提高安全性,请将 802-1x.password-flags 参数设置为 agent-owned。使用这个设置,在具有 GNOME 桌面环境或运行 nm-applet 的服务器上,NetworkManager 在解锁密钥环后从这些服务检索密码。在其他情况下,NetworkManager 会提示输入密码。
20.2. 使用 nmstatectl 配置带有 802.1X 网络身份验证的静态以太网连接
- 要点:您可以使用声明性 Nmstate API 配置具有 802.1X 网络身份验证的以太网连接。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:网络支持 802.1X 网络身份验证。
- 列表:受管节点使用 NetworkManager。
- 列表:客户端上存在 TLS 身份验证所需的以下文件: 存储的客户端密钥位于 /etc/pki/tls/private/client.key 文件中,该文件归 root 用户所有,且只对 root 可读。 客户端证书存储在 /etc/pki/tls/certs/client.crt 文件中。 证书颁发机构(CA)证书存储在 /etc/pki/tls/certs/ca.crt 文件中。
- 列表:存储的客户端密钥位于 /etc/pki/tls/private/client.key 文件中,该文件归 root 用户所有,且只对 root 可读。
- 列表:客户端证书存储在 /etc/pki/tls/certs/client.crt 文件中。
- 列表:证书颁发机构(CA)证书存储在 /etc/pki/tls/certs/ca.crt 文件中。
- 命令/配置摘录:
--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false 802.1x: ca-cert: /etc/pki/tls/certs/ca.crt client-cert: /etc/pki/tls/certs/client.crt eap-methods: - tls identity: client.example.org private-key: /etc/pki/tls/private/client.key private-key-password: password routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: enp1s0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: enp1s0 dns…
# nmstatectl apply ~/create-ethernet-profile.yml- 注意:注意 nmstate 库只支持 TLS 可扩展身份验证协议(EAP)方法。
20.3. 使用 network RHEL 系统角色,配置带有 802.1X 网络身份验证的静态以太网连接
- 要点:通过使用 network RHEL 系统角色,您可以在远程主机上自动设置网络访问控制(NAC)。您可以在 playbook 中为客户端定义身份验证详情,以确保只有授权的客户端才能访问网络。
- 要点:您可以使用 Ansible playbook 将私钥、证书和 CA 证书复制到客户端,然后使用 network RHEL 系统角色配置具有 802.1X 网络身份验证的连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:网络支持 802.1X 网络身份验证。
- 列表:受管节点使用 NetworkManager。
- 列表:以下 TLS 身份验证所需的文件在控制节点上存在: 客户端密钥存储在 /srv/data/client.key 文件中。 客户端证书存储在 /srv/data/client.crt 文件中。 证书颁发机构(CA)证书存储在 /srv/data/ca.crt 文件中。
- 命令/配置摘录:
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
pwd: <password>20.4. 使用 network RHEL 系统角色配置带有 802.1X 网络身份验证的 wifi 连接
- 要点:通过使用 network RHEL 系统角色,您可以在远程主机上自动设置网络访问控制(NAC)。您可以在 playbook 中为客户端定义身份验证详情,以确保只有授权的客户端才能访问网络。
- 要点:您可以使用 Ansible playbook 将私钥、证书和 CA 证书复制到客户端,然后使用 network RHEL 系统角色配置具有 802.1X 网络身份验证的连接配置文件。
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:网络支持 802.1X 网络身份验证。
- 列表:您已在受管节点上安装了 wpa_supplicant 软件包。
- 列表:DHCP 位于受管节点的网络中。
- 命令/配置摘录:
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
pwd: <password>第 21 章 使用带有 FreeRADIUS 集成的 hostapd 为 LAN 客户端设置 802.1x 网络身份验证服务
- 要点:IEEE 802.1X 标准定义了安全身份验证和授权方法,以保护网络不接受未授权的客户端。通过使用 hostapd 服务和 FreeRADIUS,您可以在您的网络中提供网络访问控制(NAC)。
- 要点:在本文档中,RHEL 主机充当一个网桥,以使用现有的网络连接不同的客户端。但是,RHEL 主机只授权认证的客户端可以访问网络。
- 注意:注意 红帽只支持带有 Red Hat Identity Management (IdM)作为身份验证源的 FreeRADIUS。
21.1. 先决条件
- 要点:全新安装 freeradius 和 freeradius-ldap 软件包。
- 要点:如果软件包已安装,请删除 /etc/raddb/ 目录,卸载,然后再次安装软件包。不要使用 dnf reinstall 命令重新安装软件包,因为 /etc/raddb/ 目录中的权限和符号链接是不同的。
- 列表:全新安装 freeradius 和 freeradius-ldap 软件包。 如果软件包已安装,请删除 /etc/raddb/ 目录,卸载,然后再次安装软件包。不要使用 dnf reinstall 命令重新安装软件包,因为 /etc/raddb/ 目录中的权限和符号链接是不同的。
- 列表:配置 FreeRADIUS 的主机是 IdM 域中的客户端。
21.2. 在验证器中设置网桥
- 要点:网桥是一个链路层设备,它根据 MAC 地址表在主机和网络之间转发流量。如果您将 RHEL 配置为 802.1X 验证器,请将要在其上执行身份验证的接口和 LAN 接口添加到网桥。
- 要点:先决条件
- 列表:服务器有多个以太网接口。
- 列表:如果网桥接口不存在,请创建它: # nmcli connection add type bridge con-name br0 ifname br0
- 列表:将太网接口分配给网桥: # nmcli connection add type ethernet port-type bridge con-name br0-port1 ifname enp1s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port2 ifname enp7s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port3 ifname enp8s0 controller br0 #…
- 列表:启用网桥以转发 LAN(EAPOL)数据包上的可扩展验证协议: # nmcli connection modify br0 group-forward-mask 8
- 列表:在网桥设备上禁用生成树协议(STP): # *nmcli connection modify br0 stp off"
- 列表:配置连接以自动激活端口: # nmcli connection modify br0 connection.autoconnect-ports 1
- 命令/配置摘录:
# nmcli connection add type bridge con-name br0 ifname br0
# nmcli connection add type ethernet port-type bridge con-name br0-port1 ifname enp1s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port2 ifname enp7s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port3 ifname enp8s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port4 ifname enp9s0 controller br021.3. 配置 FreeRADIUS ,以使用 EAP 安全地验证网络客户端
- 要点:FreeRADIUS 支持通过不同的扩展验证协议(EAP)的方法。但是,对于受支持的安全场景,请使用 EAP-TTLS (隧道传输层安全)。
- 要点:使用 EAP-TTLS 时,客户端使用安全 TLS 连接作为外部身份验证协议来配置隧道。然后,内部身份验证使用 LDAP 向身份管理进行身份验证。要使用 EAP-TTLS,您需要一个 TLS 服务器证书。
- 列表:您已安装了 freeradius 和 freeradius-ldap 软件包。
- 列表:/etc/raddb/ 目录中的配置文件保持不变,并由 freeradius 软件包提供。
- 列表:主机已在 Red Hat Identity Management (IdM)域中注册。
- 列表:创建一个私钥并从 IdM 请求一个证书: # ipa-getcert request -w -k /etc/pki/tls/private/radius.key -f /etc/pki/tls/certs/radius.pem -G EC -g prime256v1 -o "root:radiusd" -m 640 -O "root:radiusd" -M 640 -T caIPAserviceCert -C 'systemctl restart radiusd.service' -N freeradius.idm.example.com -D freeradius.idm.example.com -K radius/freera…
- 列表:验证 CA 是否已成功发布证书: # ipa-getcert list -f /etc/pki/tls/certs/radius.pem ... Number of certificates and requests being tracked: 1. Request ID '20240918142211': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/radius.key' certificate: type=FILE,location='/etc/pki/tls/certs/radius.…
- 列表:编辑 /etc/raddb/mods-available/eap 文件: 在 tls-config tls-common 指令中配置与 TLS 相关的设置: eap { ... tls-config tls-common { ... private_key_file = /etc/pki/tls/private/radius.key certificate_file = /etc/pki/tls/certs/radius.pem ca_file = /etc/ipa/ca.crt ecdh_curve = "prime256v1" ... } } 将 eap 指令中的 default_eap_type 参数设为 …
- 命令/配置摘录:
# ipa-getcert request -w -k /etc/pki/tls/private/radius.key -f /etc/pki/tls/certs/radius.pem -G EC -g prime256v1 -o "root:radiusd" -m 640 -O "root:radiusd" -M 640 -T caIPAserviceCert -C 'systemctl restart radiusd.service' -N freeradius.idm.example.com -D freeradius.idm.example.com -K radius/freeradius.idm.example.com
# ipa-getcert list -f /etc/pki/tls/certs/radius.pem ... Number of certificates and requests being tracked: 1. Request ID '20240918142211': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/radius.key' certificate: type=FILE,location='/etc/pki/tls/certs/radius.crt' ...- 注意:注意 默认的 FreeRADIUS 配置文件充当文档,并描述了所有参数和指令。如果要禁用某些特性,请注释掉它们,而不是删除配置文件中的相应部分。这可让您保留配置文件和包含的文档的结构。
21.4. 在有线网络中将 hostapd 配置为验证器
- 要点:主机访问点守护进程(hostapd)服务可在有线网络中充当验证器,来提供 802.1X 身份验证。为此,hostapd 服务需要一个用来验证客户端的 RADIUS 服务器。
- 要点:hostapd 服务提供集成的 RADIUS 服务器。但是,使用集成的 RADIUS 服务器只用于测试目的。对于生产环境,请使用 FreeRADIUS 服务器,它支持其他特性,如不同的身份验证方法和访问控制。
- 列表:hostapd 软件包已安装。
- 列表:FreeRADIUS 服务器已配置,它已准备好对客户端进行身份验证。
- 列表:使用以下内容创建 /etc/hostapd/hostapd.conf 文件: # General settings of hostapd # =========================== # Control interface settings ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel # Enable logging for all modules logger_syslog=-1 logger_stdout=-1 # Log level logger_syslog_level=2 logger_stdout_level=2 # Wired 8…
- 列表:启用并启动 hostapd 服务: # systemctl enable --now hostapd
- 列表:针对 FreeRADIUS 服务器或验证器测试 EAP-TTLS 身份验证
- 列表:如果 hostapd 服务无法启动,请验证您在 /etc/hostapd/hostapd.conf 文件中使用的网桥接口是否在系统上存在: # ip link show br0
- 命令/配置摘录:
# General settings of hostapd # =========================== # Control interface settings ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel # Enable logging for all modules logger_syslog=-1 logger_stdout=-1 # Log level logger_syslog_level=2 logger_stdout_level=2 # Wired 802.1X authentication # =========================== # Driver interface type driver=wired # Enable IEEE 802.1X authorization ieee8021x=1 # Use port access entry (PAE) group address # (01:80:c2:00:00:03) when sending EAPOL frames use_pae_group_addr=1 # Network interface for authentication requests interface=br0 # RADIUS client configuration # ===========================…
# systemctl enable --now hostapd- 注意:重要 hostapd 服务不与流量平面交互。该服务仅充当身份验证器。例如,使用脚本或服务,该脚本或服务使用 hostapd 控制接口、根据身份验证事件的结果来允许或拒绝流量。
21.5. 针对 FreeRADIUS 服务器或验证器测试 EAP-TTLS 身份验证
- 要点:配置 FreeRADIUS 服务器和 hostapd 服务后,通过利用隧道传输层安全(EAP-TTLS)上的可扩展身份验证协议(EAP-TTLS)来测试身份验证是否按预期工作。
- 要点:此流程中使用的测试工具的输出提供有关 EAP 通信的其他信息,并帮助您调试问题。
- 列表:您已配置了 FreeRADIUS 服务器。
- 列表:您已将 hostapd 服务配置为 802.1X 网络身份验证的验证器。
- 列表:当您要验证: FreeRADIUS 服务器: hostapd 软件包提供的 eapol_test 工具已安装。 您在其上运行此流程的客户端已在 FreeRADIUS 服务器的客户端数据库中被授权。 由同命软件包提供的验证器 wpa_supplicant 工具已安装。
- 列表:FreeRADIUS 服务器: hostapd 软件包提供的 eapol_test 工具已安装。 您在其上运行此流程的客户端已在 FreeRADIUS 服务器的客户端数据库中被授权。
- 列表:hostapd 软件包提供的 eapol_test 工具已安装。
- 列表:您在其上运行此流程的客户端已在 FreeRADIUS 服务器的客户端数据库中被授权。
- 命令/配置摘录:
# ipa user-add --first "Test" --last "User" idm_user --password
ap_scan=0 network={ eap=TTLS eapol_flags=0 key_mgmt=IEEE8021X # Anonymous identity (sent in unencrypted phase 1) # Can be any string anonymous_identity="anonymous" # Inner authentication (sent in TLS-encrypted phase 2) phase2="auth=PAP" identity="idm_user" password="idm_user_password" # CA certificate to validate the RADIUS server's identity ca_cert="/etc/ipa/ca.crt" }21.6. 根据 hostapd 身份验证事件阻止和允许流量
- 要点:hostapd 服务不与流量平面交互。该服务仅充当身份验证器。但是,您可以编写一个脚本,根据身份验证事件的结果来允许或拒绝流量。
- 要点:当 802-1x-tr-mgmt systemd 服务启动时,RHEL 会阻止 hostapd 监听端口上的所有流量,但 LAN(EAPOL)数据包上可扩展验证协议除外,并使用 hostapd_cli 工具连接到 hostapd 控制接口。/usr/local/bin/802-1x-tr-mgmt 脚本随后评估事件。根据 hostapd_cli 收到的不同事件,该脚本允许或阻止 MAC 地址的流量。请注意,当 802-1x-tr-mgmt 服务停止时,所有流量会自动允许。
- 列表:hostapd 服务已配置,服务已准备好对客户端进行身份验证。
- 列表:使用以下内容创建 /usr/local/bin/802-1x-tr-mgmt 文件: #!/bin/sh TABLE="tr-mgmt-${1}" read -r -d '' TABLE_DEF << EOF table bridge ${TABLE} { set allowed_macs { type ether_addr } chain accesscontrol { ether saddr @allowed_macs accept ether daddr @allowed_macs accept drop } chain forward { type filter hook forward priorit…
- 列表:使用以下内容创建 /etc/systemd/system/802-1x-tr-mgmt@.service systemd 服务文件: [Unit] Description=Example 802.1x traffic management for hostapd After=hostapd.service After=sys-devices-virtual-net-%i.device [Service] Type=simple ExecStartPre=bash -c '/usr/sbin/hostapd_cli ping | grep PONG' ExecStartPre=/usr/local/bin/802-1x-tr-mgm…
- 列表:重新载入 systemd: # systemctl daemon-reload
- 列表:启用并启动接口名称 hostapd 正在侦听的 802-1x-tr-mgmt 服务: # systemctl enable --now 802-1x-tr-mgmt@br0.service
- 列表:通过客户端向网络进行身份验证。请参阅 针对 FreeRADIUS 服务器或验证器测试 EAP-TTLS 身份验证。
- 命令/配置摘录:
#!/bin/sh TABLE="tr-mgmt-${1}" read -r -d '' TABLE_DEF << EOF table bridge ${TABLE} { set allowed_macs { type ether_addr } chain accesscontrol { ether saddr @allowed_macs accept ether daddr @allowed_macs accept drop } chain forward { type filter hook forward priority 0; policy accept; meta ibrname "$0" jump accesscontrol } } EOF case ${2:-NOTANEVENT} in block_all) nft destroy table bridge "$TABLE" printf "$TABLE_DEF" | nft -f - echo "$1: All the bridge traffic blocked. Traffic for a client with a given MAC will be allowed after 802.1x authentication" ;; AP-STA-CONNECTED | CTRL-EVENT-EAP-SUCCESS | CTRL-EVENT-EAP-SUCCESS2) n…
[Unit] Description=Example 802.1x traffic management for hostapd After=hostapd.service After=sys-devices-virtual-net-%i.device [Service] Type=simple ExecStartPre=bash -c '/usr/sbin/hostapd_cli ping | grep PONG' ExecStartPre=/usr/local/bin/802-1x-tr-mgmt %i block_all ExecStart=/usr/sbin/hostapd_cli -i %i -a /usr/local/bin/802-1x-tr-mgmt ExecStopPost=/usr/local/bin/802-1x-tr-mgmt %i allow_all [Install] WantedBy=multi-user.target- 注意:重要 此流程不受支持,没有企业级的解决方案。它只演示如何通过评估由 hostapd_cli 检索的事件来阻止或允许流量。
第 22 章 keyfile 格式的 NetworkManager 连接配置文件
- 要点:NetworkManager 以密钥文件格式存储连接配置集。这个格式支持 NetworkManager 提供的所有连接设置。
- 注意:注意 在 RHEL 10 上不支持 ifcfg 格式的连接配置文件。NetworkManager 忽略这种格式的文件,也不能在 RHEL 10 上将它们转换为 keyfile 格式的文件。
22.1. NetworkManager 配置文件的密钥文件格式
- 要点:keyfile 格式是一种类似 INI 的网络连接配置。
- 要点:例如,以下是keyfile 格式的以太网连接配置文件:
- 列表:在离线模式下 nmcli 工具
- 命令/配置摘录:
[connection] id=example_connection uuid=82c6272d-1ff7-4d56-9c7c-0eb27c300029 type=ethernet autoconnect=true [ipv4] method=auto [ipv6] method=auto [ethernet] mac-address=00:53:00:8f:fa:66- 注意:警告 参数的拼写错误或不正确的放置可能会导致意外行为。因此,请不要手动编辑或创建 NetworkManager 配置文件。 使用 nmcli 工具、network RHEL 系统角色或 nmstate API 来管理 NetworkManager 连接。例如,您可以在离线模式中使用 nmcli 工具来创建连接配置集。
- 注意:重要 为安全起见,因为连接配置文件可以包含敏感信息,如私钥和密码短语,所以 NetworkManager 仅使用 root 用户所拥有的配置文件,并且仅可由 root 读写。
22.2. 使用 nmcli 在离线模式下创建 keyfile 连接配置文件
- 要点:您可以在离线模式下使用 nmcli 工具来创建和管理 NetworkManager 连接配置文件。在此模式下,nmcli 在没有 NetworkManager 服务的情况下运行,以通过标准输出生成 keyfile 连接配置文件。
- 要点:在以下情况下,创建连接配置集离线非常有用:
- 列表:您需要创建需要预先部署的连接配置集。例如,在容器镜像或 RPM 软件包中。
- 列表:您希望在 NetworkManager 服务不可用的环境中创建连接配置文件,例如当您要使用 chroot 工具时。或者,当您想通过 Kickstart %post 脚本创建或修改 RHEL 系统的网络配置时。
- 列表:以 keyfile 格式创建新连接配置集。例如,对于不使用 DHCP 的以太网设备的连接配置文件,请运行类似的 nmcli 命令: # nmcli --offline connection add type ethernet con-name Internal-LAN ipv4.addresses 192.0.2.1/24 ipv4.dns 192.0.2.200 ipv4.method manual > /etc/NetworkManager/system-connections/int-lan.nmconnection 注意 使用 con-name 键指定的连接名称被保存到生成的配置集的 id 变量中。当您使用 nmcli 命…
- 列表:对配置文件设置权限,以便只有 root 用户可以读和更新它: # chmod 600 /etc/NetworkManager/system-connections/int-lan.nmconnection # chown root:root /etc/NetworkManager/system-connections/int-lan.nmconnection
- 列表:重新载入 NetworkManager 连接: # nmcli connection reload
- 列表:如果将配置文件中的 autoconnect 变量设置为 false,则激活连接: # nmcli connection up Internal-LAN
- 命令/配置摘录:
# nmcli --offline connection add type ethernet con-name Internal-LAN ipv4.addresses 192.0.2.1/24 ipv4.dns 192.0.2.200 ipv4.method manual > /etc/NetworkManager/system-connections/int-lan.nmconnection
# chmod 600 /etc/NetworkManager/system-connections/int-lan.nmconnection # chown root:root /etc/NetworkManager/system-connections/int-lan.nmconnection- 注意:注意 使用 con-name 键指定的连接名称被保存到生成的配置集的 id 变量中。当您使用 nmcli 命令稍后管理这个连接时,请按如下所示指定连接: 如果没有省略 id 变量,请使用连接名称,如 Internal-LAN。 当 id 变量省略时,请使用不带 .nmconnection 后缀的文件名,如 int-lan。
第 23 章 systemd 网络目标和服务
- 要点:在应用网络设置时,RHEL 使用 network 和 network-online 目标以及 NetworkManager-wait-online 服务。如果这些服务无法动态响应网络状态的变化,请将 systemd 服务配置为在网络完全可用后启动。
23.1. network 和 network-online systemd 目标之间的区别
- 要点:network 目标表示网络管理堆栈已启动,并且 network-online 目标要一直等待,直到网络启动且可用的网络连接可用。
- 要点:systemd 维护 network 和 network-online 目标单元。特殊单元,如 NetworkManager-wait-online.service,具有 WantedBy=network-online.target 和 Before=network-online.target 参数。如果启用了,这些单元将启动 network-online.target ,并延迟要达到的目标,直到建立了某种形式的网络连接。它们会延迟 network-online 目标,直到网络连接了。
- 注意:注意 network-online 目标单元仅在系统启动期间有用。系统完成引导后,这个目标不会跟踪网络的在线状态。因此,您无法使用 network-online 来监控网络连接。这个目标提供一个一次性系统启动概念。
23.2. NetworkManager-wait-online 概述
- 要点:NetworkManager-wait-online 服务延迟到达 network-online 目标,直到 NetworkManager 报告启动已完成。
- 要点:在启动过程中,NetworkManager 会通过将 connection.autoconnect 参数设置为 yes 来激活所有配置文件。但是,只要 NetworkManager 配置集处于激活状态,配置文件的激活就没有完成。如果激活失败,NetworkManager 会根据 connection.autoconnect-retries 的值来重试激活。
- 列表:connection.wait-device-timeout :设置驱动程序检测设备的超时时间。
- 列表:ipv4.may-fail 和 ipv6.may-fail :使用一个就绪的 IP 地址系列设置激活,或者一个特定的地址系列是否已完成配置。
- 列表:ipv4.gateway-ping-timeout: 延迟网络激活,直到 NetworkManager 收到来自 IPv4 网关的 ping 响应。在继续操作前,系统最多等待指定的秒数。
- 列表:ip-ping-timeout 和 ip-ping-addresses: 延迟网络激活,直到 NetworkManager 收到来自 ip-ping-addresses 中定义的主机的 ping 响应。在继续操作前,系统最多等待指定的秒数。
23.3. 将 systemd 服务配置为在网络已启动后再启动
- 要点:RHEL 在 /usr/lib/systemd/system/ 目录中安装 systemd 服务文件。您可以在 /etc/systemd/system/<service_name>.service.d/ 中创建一个置入片断,以便在网络在线后启动服务。
- 要点:此片段的设置覆盖原始服务文件中的任何冲突设置。
- 列表:在编辑器中打开服务文件: # systemctl edit <service_name>
- 列表:输入以下内容并保存更改: [Unit] After=network-online.target
- 列表:重新加载 systemd 服务。 # systemctl daemon-reload
- 命令/配置摘录:
# systemctl edit <service_name>
[Unit] After=network-online.target23.4. 配置 IP 地址 ping 目标,以确保活跃的网络连接
- 要点:配置 connection.ip-ping-addresses 和 connection.ip-ping-timeout 设置,来验证到特定目标的连接。
- 要点:NetworkManager 服务在系统引导后启动。某些服务(如网络文件系统(NFS))依赖于网络连接性。如果网关 IP 或目标 IP 地址未返回响应,NFS 无法挂载,因为它无法连接到其目的地,因为网络没有完全启动并运行。因此,您可以配置 connection.ip-ping-addresses 和 connection.ip-ping-timeout 设置,以验证到特定目标的连接性,以避免这样的问题。connection.ip-ping-addresses 设置支持配置 IPv4 和 IPv6 地址。
- 列表:如果不存在,请创建连接配置文件。例如,要为分配了动态 IP 地址的 enp1s0 接口创建配置文件,请输入: # nmcli connection add con-name enp1s0 ifname enp1s0 type ethernet 注意 配置 connection.ip-ping-addresses 可能导致 systemd 的 network-online 目标服务的响应延迟,因为要等待 ping 操作完成或超时。
- 列表:配置连接,以 ping 定义了超时的指定的 IP 地址: # nmcli connection modify enp1s0 connection.ip-ping-addresses "192.0.2.56, 192.0.2.60" connection.ip-ping-timeout 10 ipv4.may-fail no 将 ipv4.may-fail 属性设置为 no,确保 IPv4 配置必须成功完成。
- 列表:重新激活连接: # nmcli connection up enp1s0
- 命令/配置摘录:
# nmcli connection add con-name enp1s0 ifname enp1s0 type ethernet
# nmcli connection modify enp1s0 connection.ip-ping-addresses "192.0.2.56, 192.0.2.60" connection.ip-ping-timeout 10 ipv4.may-fail no- 注意:注意 配置 connection.ip-ping-addresses 可能导致 systemd 的 network-online 目标服务的响应延迟,因为要等待 ping 操作完成或超时。
第 24 章 Nmstate 简介
- 要点:nmstate 是一个声明性网络管理器 API。使用 Nmstate 时,您可以使用 YAML 或 JSON 格式的指令描述预期的网络状态。
- 要点:nmstate 有很多优点。例如,它:
- 列表:提供稳定且可扩展的接口来管理 RHEL 网络功能
- 列表:支持主机和集群级别的原子和事务操作
- 列表:支持对大多数属性进行部分编辑,并保留在说明中没有指定的现有设置
- 表格样本(共 5 行):
- 软件包 | 内容
- nmstate | nmstatectl 命令行工具
- python3-libnmstate | libnmstate Python 库
- nmstate-libs | Nmstate C 库
24.1. 在 Python 应用程序中使用 libnmstate 库
- 要点:libnmstate Python 库可让开发人员在自己的应用程序中使用 Nmstate。
- 要点:要使用库,请在源代码中导入它:
- 命令/配置摘录:
import libnmstate
import libnmstate from libnmstate.schema import Interface net_state = libnmstate.show() for iface_state in net_state[Interface.KEY]: print(iface_state[Interface.NAME] + ": " + iface_state[Interface.STATE])24.2. 使用 nmstatectl 更新当前网络配置
- 要点:您可以使用 nmstatectl 工具将一个或多个接口的当前网络配置存储在一个文件中。
- 要点:然后您可以使用此文件:
- 列表:修改配置并将其应用到同一系统。
- 列表:将文件复制到其他主机上,并使用相同的或经过修改的设置配置主机。
- 列表:nmstate 软件包已安装。
- 列表:将 enp1s0 接口的设置导出到 ~/network-config.yml 文件: # nmstatectl show enp1s0 > ~/network-config.yml 此命令会以 YAML 格式存储 enp1s0 的配置。要以 JSON 格式存储输出,请将 --json 选项传给命令。 如果没有指定接口名称,nmstatectl 将导出所有接口的配置。
- 列表:使用文本编辑器修改 ~/network-config.yml 文件,以更新配置。
- 列表:应用 ~/network-config.yml 文件中的设置: # nmstatectl apply ~/network-config.yml 如果您以 JSON 格式导出设置,请将 --json 选项传给命令。
- 命令/配置摘录:
# nmstatectl show enp1s0 > ~/network-config.yml
# nmstatectl apply ~/network-config.yml24.3. nmstate systemd 服务
- 要点:安装 nmstate 软件包后,您可以通过配置 nmstate systemd 服务,在系统引导时自动应用新的网络设置。
- 要点:nmstate 服务是一个 oneshot systemd 服务。因此,systemd 仅在系统引导以及手动重启服务时执行它。
- 命令/配置摘录:
[service] keep_state_file_after_apply = false- 注意:注意 默认情况下禁用 nmstate 服务。使用 systemctl enable nmstate 命令启用它。之后,systemd 在每次系统启动时都执行此服务。
24.4. network RHEL 系统角色的网络状态
- 要点:network RHEL 系统角色支持 playbook 中的状态配置来配置设备。为此,请使用 network_state 变量,后面跟上状态配置。
- 要点:在 playbook 中使用 network_state 变量的好处:
- 列表:通过与状态配置结合使用声明方法,您可以配置接口,NetworkManager 会在后台为这些接口创建一个配置集。
- 列表:使用 network_state 变量,您可以指定您需要更改的选项,所有其他选项则保持不变。但是,使用 network_connections 变量,您必须指定所有设置来更改网络连接配置集。
- 注意:重要 您只能在 network_state 中设置 Nmstate YAML 指令。这些指令与您可以在 network_connections 中设置的变量有所不同。
- 表格样本(共 2 行):
- 带有状态配置的 playbook | 常规 playbook
- vars: network_state: interfaces: - name: enp7s0 type: ethernet state: up ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true | vars: network_connections: - name: enp7s0 interface_name: enp7s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
第 25 章 多路径 TCP 入门
- 要点:多路径 TCP (MPTCP) 是原始 TCP 协议 (single-path) 的扩展。MPTCP 支持传输连接同时在多个路径中运行,并为用户端点设备带来网络连接冗余。
25.1. 了解 MPTCP
- 要点:多路径 TCP (MPTCP)协议提供在连接端点间同时使用多个路径。协议设计提高了连接稳定性,与单一路径 TCP 相比也带来了其他好处。
- 要点:以下是使用 MPTCP 的一些优点:
- 列表:它允许一个连接同时使用多个网络接口。
- 列表:如果连接绑定到链路速度,则使用多个链接可能会增加连接的吞吐量。请注意,如果连接绑定到 CPU,则使用多个链路会导致连接性能下降。
- 列表:它提高对链接故障的恢复能力。
- 列表:了解多路径 TCP:端点和高可用性以及未来的网络
- 注意:注意 在 MPTCP 术语中,链接被视为路径。
25.2. 为 MPTCP 应用程序永久配置多路径
- 要点:您可以使用 nmcli 命令配置配置 MultiPath TCP (MPTCP),来在源和目标系统之间永久建立多个子流。
- 要点:子流可以使用不同的资源,不同的路由到目的地,甚至不同网络。例如以太网、单元格、wifi 等。因此,您可以实现组合连接,这提高了网络弹性和吞吐量。
- 列表:enp4s0: 192.0.2.1/24
- 列表:enp1s0: 198.51.100.1/24
- 列表:enp7s0: 192.0.2.3/24
- 列表:enp4s0f0: 192.0.2.2/24
- 列表:enp4s0f1: 198.51.100.2/24
- 列表:enp6s0: 192.0.2.5/24
- 命令/配置摘录:
# echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
[Unit] Description=Set MPTCP subflow limit to 3 After=network.target [Service] ExecStart=ip mptcp limits set subflows 3 Type=oneshot [Install] WantedBy=multi-user.target25.3. 配置 mptcpd
- 要点:mptcpd 服务是配置多路径 TCP (MPTCP)端点的组件。它为主机上的每个 IP 地址自动创建并动态更新子流端点列表,为启用多个路径提供了 ip 工具的替代选择。
- 要点:先决条件
- 列表:已安装 mptcpd 软件包
- 列表:使用以下命令在内核中启用 mptcp.enabled 选项: # echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
- 列表:启用并启动 mptcpd 服务: # systemctl enable --now mptcp.service
- 列表:要手动配置 mptcpd 服务,修改 /etc/mptcpd/mptcpd.conf 配置文件。 请注意,端点 mptcpd 服务创建,最后一个主机关闭。
- 列表:验证端点创建: # ip mptcp endpoint
- 命令/配置摘录:
# echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
# systemctl enable --now mptcp.service第 26 章 Linux 流量控制
- 要点:Linux 流量控制(TC)帮助策略、分类、控制和调度网络流量。它使用排队规则(qdisc)和过滤器来管理和操作数据包传输,包括篡改数据包内容。
- 要点:调度机制在进入或退出不同的队列前确定或者重新安排数据包。最常见的调度程序是先入先出(FIFO)调度程序。您可以使用 tc 工具临时执行 qdiscs 操作,也可以使用 NetworkManager 永久执行操作。
26.1. 排队规则概述
- 要点:排队规则(qdiscs)帮助排队,之后通过网络接口调度流量传输。
- 要点:qdisc 有两个操作:
- 列表:排队请求,以便在以后传输时对数据包进行排队
- 列表:出队请求,以便可以选择其中一个排队的数据包进行即时传输。
26.2. 使用 tc 工具检查网络接口的 qdiscs
- 要点:默认情况下,Red Hat Enterprise Linux 系统使用 fq_codel qdisc。您可以使用 tc 工具检查 qdisc 计数器。
- 要点:流程
- 列表:可选:查看您当前的 qdisc : # tc qdisc show dev enp0s1
- 列表:检查当前的 qdisc 计数器: # tc -s qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 1008193 bytes 5559 pkt (dropped 233, overlimits 55 requeues 77) backlog 0b 0p requeues 0 dropped - 由于所有队列已满而丢弃数据包的次数 overlimits - 配置的链路容量已满的次数 sen…
- 列表:dropped - 由于所有队列已满而丢弃数据包的次数
- 列表:overlimits - 配置的链路容量已满的次数
- 列表:sent - 出队的数量
- 命令/配置摘录:
# tc qdisc show dev enp0s1
# tc -s qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 1008193 bytes 5559 pkt (dropped 233, overlimits 55 requeues 77) backlog 0b 0p requeues 026.3. 更新默认的 qdisc
- 要点:如果使用当前的 qdisc 观察网络数据包丢失情况,您可以根据您的网络要求更改 qdisc。
- 要点:流程
- 列表:查看当前的默认的 qdisc : # sysctl -a | grep qdisc net.core.default_qdisc = fq_codel
- 列表:查看当前以太网连接的 qdisc : # tc -s qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0 new_flows_l…
- 列表:更新现有的 qdisc : # sysctl -w net.core.default_qdisc=pfifo_fast
- 列表:要应用更改,请重新加载网络驱动程序: # modprobe -r NETWORKDRIVERNAME # modprobe NETWORKDRIVERNAME
- 列表:启动网络接口: # ip link set enp0s1 up
- 列表:查看以太网连接的 qdisc : # tc -s qdisc show dev enp0s1 qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 373186 bytes 5333 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 ...
- 命令/配置摘录:
# sysctl -a | grep qdisc net.core.default_qdisc = fq_codel
# tc -s qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0 new_flows_len 0 old_flows_len 026.4. 使用 tc 工具临时设置网络接口的当前 qdisc
- 要点:更改当前的 qdisc 可优化内核如何在数据包通过网络接口时处理它们。对于测试和基准测试目的,您可以临时更改 qdisc。
- 要点:流程
- 列表:可选:查看当前的 qdisc : # tc -s qdisc show dev enp0s1
- 列表:更新当前的 qdisc : # tc qdisc replace dev enp0s1 root htb
- 列表:查看更新后的当前 qdisc : # tc -s qdisc show dev enp0s1 qdisc htb 8001: root refcnt 2 r2q 10 default 0 direct_packets_stat 0 direct_qlen 1000 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
- 命令/配置摘录:
# tc -s qdisc show dev enp0s1
# tc qdisc replace dev enp0s1 root htb26.5. 使用 NetworkManager 永久设置网络接口的当前 qdisc
- 要点:更改当前的 qdisc 可优化内核如何在数据包通过网络接口时处理它们。如果您为场景确定了最佳 qdisc,请在 NetworkManager 连接配置文件中永久设置它。
- 要点:流程
- 列表:可选:查看当前的 qdisc : # tc qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2
- 列表:更新当前的 qdisc : # nmcli connection modify enp0s1 tc.qdiscs 'root pfifo_fast'
- 列表:可选:要在现有的 qdisc 上添加另一个 qdisc,请使用 +tc.qdisc 选项: # nmcli connection modify enp0s1 +tc.qdisc 'ingress handle ffff:'
- 列表:激活更改: # nmcli connection up enp0s1
- 列表:查看网络接口当前的 qdisc : # tc qdisc show dev enp0s1 qdisc pfifo_fast 8001: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc ingress ffff: parent ffff:fff1 ................
- 命令/配置摘录:
# tc qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2
# nmcli connection modify enp0s1 tc.qdiscs 'root pfifo_fast'26.6. 使用 tc-ctinfo 工具配置数据包的速率限制
- 要点:通过速率限制,您可以限制网络流量,防止网络中的资源耗尽,并通过限制特定时间段内重复的数据包请求来减少服务器上的负载。
- 要点:连接跟踪条目存储 Netfilter 标记和连接信息。当路由器转发来自防火墙的数据包时,路由器会删除或修改数据包的连接跟踪条目。连接跟踪信息(ctinfo)模块将数据从连接跟踪标记检索到各个字段。此内核模块通过将 Netfilter 标记复制到套接字缓冲区(skb)标记元数据字段来保留 Netfilter 标记。
- 列表:iperf3 工具安装在服务器和客户端上。
- 列表:在服务器上执行以下步骤: 在网络接口中添加一个虚拟链接: # ip link add name ifb4eth0 numtxqueues 48 numrxqueues 48 type ifb 这个命令有以下参数: name ifb4eth0 设置新的虚拟设备接口。 numtxqueues 48 设置传输队列的数量。 numrxqueues 48 设置接收队列的数量。 type ifb 设置新设备的类型。 更改接口的状态: # ip link set dev ifb4eth0 up 在物理网络接口上添加 qdisc 属性,并将其应用到传入流量: # tc qdisc add dev enp1s0 handle ffff: ingre…
- 列表:在网络接口中添加一个虚拟链接: # ip link add name ifb4eth0 numtxqueues 48 numrxqueues 48 type ifb 这个命令有以下参数: name ifb4eth0 设置新的虚拟设备接口。 numtxqueues 48 设置传输队列的数量。 numrxqueues 48 设置接收队列的数量。 type ifb 设置新设备的类型。
- 列表:更改接口的状态: # ip link set dev ifb4eth0 up
- 列表:在物理网络接口上添加 qdisc 属性,并将其应用到传入流量: # tc qdisc add dev enp1s0 handle ffff: ingress 在 handle ffff: 选项中,handle 参数将主号 ffff: 作为默认值分配给 enp1s0 物理网络接口上的类 qdisc,其中 qdisc 是一个分析流量控制的排队规则参数。
- 列表:在 ip 协议的物理接口上添加一个过滤器,以对数据包进行分类: # tc filter add dev enp1s0 parent ffff: protocol ip u32 match u32 0 0 action ctinfo cpmark 100 action mirred egress redirect dev ifb4eth0 这个命令有以下属性: parent ffff: 为父 qdisc 设置主号 ffff:。 u32 match u32 0 0 设置 u32 过滤器,以 匹配 u32 模式的 IP 头。第一个 0 表示 IP 标头的第二个字节,另一个 0 用于掩码匹配,告知过滤器要匹配哪个位。 action cti…
- 命令/配置摘录:
# ip link add name ifb4eth0 numtxqueues 48 numrxqueues 48 type ifb
# ip link set dev ifb4eth0 up26.7. RHEL 中提供的 qdiscs
- 要点:每个 qdisc 解决唯一的与网络相关的问题。您可以根据您的网络要求使用其中任何一个来塑造网络流量。
- 要点:RHEL 中提供了这些 qdiscs :
- 注意:重要 qdisc 卸载需要对 NIC 的硬件和驱动程序的支持。
- 表格样本(共 17 行):
- qdisc 名称 | 包含在 | 卸载支持
- Credit-Based Shaper | kernel-modules-core | 是
- Enhanced Transmission Selection (ETS) | kernel-modules-core | 是
- Earliest TxTime First (ETF) | kernel-modules-extra
第 27 章 配置 InfiniBand 和 RDMA 网络
- 要点:您可以使用各种协议在企业级配置和管理Remote Direct Memory Access (RDMA)网络和 InfiniBand 硬件。
- 要点:这些协议包括 InfiniBand (IB)、RDMA over Converged Ethernet (RoCE)、IP 网络协议,如 iWARP、Omni-Path Architecture (OPA)协议作为 RDMA 支持的硬件的原生支持。对于低延迟和高吞吐量连接,您可以配置通过 InfiniBand (IPoIB)的 IP。
27.1. InfiniBand 和 RDMA 简介
- 要点:InfiniBand 指的是两个不同的组件:Infiniband 网络的物理链路层协议和 InfiniBand Verbs API,这是远程直接内存访问(RDMA)技术的一个实现。
- 要点:RDMA 提供了跨两个计算机的主要内存访问,而无需涉及操作系统、缓存或存储。通过使用 RDMA,数据传输具有高吞吐量、低延迟和低 CPU 使用率。
- 列表:内核必须接收数据。
- 列表:内核必须确定该数据是否属于该应用程序。
- 列表:内核唤醒应用程序。
- 列表:内核会等待应用程序执行系统调用到内核。
- 列表:应用程序将内核本身的内部内存空间数据复制到应用程序提供的缓冲中。
- 列表:iWARP :一种通过 IP 网络实现 RDMA 的网络协议
27.2. 配置核心 RDMA 子系统
- 要点:rdma 服务配置管理网络协议和通信标准,如 InfiniBand、iWARP 和 RoCE。
- 要点:流程
- 列表:安装 rdma-core 软件包: # dnf install rdma-core
- 列表:安装 libibverbs-utils 和 infiniband-diags 软件包: # dnf install libibverbs-utils infiniband-diags
- 列表:列出可用的 InfiniBand 设备: # ibv_devices mlx5_0 946dae0300418002 mlx5_1 946dae0300418003
- 列表:显示 mlx5_0 设备的信息: # ibv_devinfo -d mlx5_0 hca_id: mlx5_0 transport: InfiniBand (0) fw_ver: 28.42.1000 node_guid: 946d:ae03:0041:8002 sys_image_guid: 946d:ae03:0041:8002 vendor_id: 0x02c9 vendor_part_id: 4129 hw_ver: 0x0 board_id: MT_0000000834 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5…
- 列表:显示 mlx5_0 设备的状态: # ibstat mlx5_0 CA 'mlx5_0' CA type: MT4129 Number of ports: 1 Firmware version: 28.42.1000 Hardware version: 0 Node GUID: 0x946dae0300418002 System image GUID: 0x946dae0300418002 Port 1: State: Active Physical state: LinkUp Rate: 100 Base lid: 66 LMC: 0 SM lid: 3 Capability mask: 0xa759…
- 列表:ibping 程序通过配置参数来 ping InfiniBand 地址并以客户端/服务器运行。 使用 -C InfiniBand 渠道适配器(CA)名称,在主机的端口号 -P 上启动服务器模式 -S : # ibping -S -C mlx5_0 -P 1 启动客户端模式,在主机上使用 -L 本地识别器 (LID)和 -C InfiniBand 渠道适配器,在端口号 -P 上发送一些数据包 -c : # ibping -c 50 -C mlx5_0 -P 1 -L 2
- 命令/配置摘录:
# dnf install rdma-core
# dnf install libibverbs-utils infiniband-diags27.3. 配置 IPoIB
- 要点:IP over InfiniBand (IPoIB)在 InfiniBand 远程直接访问(RDMA)网络之上提供 IP 网络模拟层。未经修改的应用程序可以使用 IPoIB 通过 InfiniBand 网络传输数据。
- 要点:请注意,IPoIB 性能比应用程序原生使用 RDMA 时低。
- 注意:注意 在 RHEL 8 和更新的版本中,从 ConnectX-4 开始的 Mellanox 设备默认使用增强 IPoIB 模式(仅数据报)。在这些设备中不支持连接模式。
27.3.1. IPoIB 通讯模式
- 要点:IPoIB 设备可在 Datagram 或 Connected 模式中配置。
- 要点:区别在于 IPoIB 层试图在通信的另一端机器打开的队列对的类型:
- 列表:在 Datagram 模式中,系统会打开一个不可靠、断开连接的队列对。 这个模式不支持大于 InfiniBand 链路层的最大传输单元(MTU)的软件包。在传输数据时,IPoIB 层在 IP 数据包之上添加了一个 4 字节 IPoIB 标头。因此,IPoIB MTU 比 InfiniBand link-layer MTU 小 4 个字节。因为 2048 是一个常见的 InfiniBand 链路层 MTU,Datagram 模式中的通用 IPoIB 设备 MTU 为 2044。
- 列表:在 Connected 模式中,系统会打开一个可靠、连接的队列对。 这个模式允许消息大于 InfiniBand link-layer MTU。主机适配器处理数据包分段和重新装配。因此,在 Connected 模式中,从 Infiniband 适配器发送的消息没有大小限制。但是,由于 data 字段和 TCP/IP header 字段,存在一个 IP 数据包限制。因此,Connected 模式中的 IPoIB MTU 是 65520 字节。 Connected 模式性能更高,但是消耗更多内核内存。
27.3.2. 了解 IPoIB 硬件地址
- 要点:InfiniBand 硬件地址通常称为全局唯一标识符(GUID),是分配给每个 InfiniBand 设备的唯一标识符,如主机频道适配器(HCA)。这些地址对于路由、设备识别和网络管理至关重要。
- 要点:ipoib 设备有 20 个字节硬件地址,它由以下部分组成:
- 列表:前 4 个字节是标志和队列对号。
- 列表:接下来的 8 个字节是子网前缀 默认子网前缀为 0xfe:80:00:00:00:00:00:00。设备连接到子网管理器后,设备会更改此前缀以匹配配置的子网管理器。
- 列表:最后 8 个字节是 IPoIB 设备附加到的 InfiniBand 端口的全局唯一标识符(GUID)。
- 注意:注意 因为前 12 个字节可以更改,因此请不要在 udev 设备管理器规则中使用它们。
27.3.3. 使用 systemd 链接文件重命名 IPoIB 设备
- 要点:默认情况下,内核会命名 IP over InfiniBand (IPoIB) 设备,例如 ib0、ib1 等等。为避免冲突,请创建一个 systemd 链接文件,来创建持久且有意义的名称,如 mlx5_ib0。
- 要点:先决条件
- 列表:您已安装了一个 InfiniBand 设备。
- 列表:显示设备 ib0 的硬件地址: # ip addr show ib0 7: ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256 link/infiniband 00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp7s0 altname ibs2 inet 172.31.0…
- 列表:要将 MAC 地址为 00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 的接口命名为 mlx5_ib0,请创建具有以下内容的 /etc/systemd/network/70-custom-ifnames.link 文件: [Match] MACAddress=00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 [Link] Name=_mlx5_ib0 此链接文件与 MAC 地址相匹配,并将网络接口重命名为 Name 参数中设置的名称。
- 列表:重启主机: # reboot
- 列表:验证具有链接文件中指定的 MAC 地址的设备是否已分配给 mlx5_ib0 : # ip addr show mlx5_ib0 3: mlx5_ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP group default qlen 1000 link/infiniband 00:00:00:8c:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp196s…
- 命令/配置摘录:
# ip addr show ib0 7: ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256 link/infiniband 00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp7s0 altname ibs2 inet 172.31.0.181/24 brd 172.31.0.255 scope global dynamic noprefixroute ib0 valid_lft 2899sec preferred_lft 2899sec inet6 fe80::f652:1403:7b:e1b1/64 scope link noprefixroute valid_lft forever preferred_lft forever
[Match] MACAddress=00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 [Link] Name=_mlx5_ib027.3.4. 使用 nmcli 配置 IPoIB 连接
- 要点:您可以在命令行上使用 nmcli 工具创建一个 IP over InfiniBand 连接。
- 要点:先决条件
- 列表:InfiniBand 设备已安装在服务器上
- 列表:加载对应的内核模块
- 列表:创建 InfiniBand 连接,来在 Connected 传输模式下使用 mlx5_ib0 接口,以及最大 65520 字节的 MTU : # nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
- 列表:设置 P_Key,例如: # nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
- 列表:配置 IPv4 设置: 要使用 DHCP,请输入: # nmcli connection modify mlx5_ib0 ipv4.method auto 如果 ipv4.method 已设置为 auto(默认),请跳过这一步。 要设置静态 IPv4 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入: # nmcli connection modify mlx5_ib0 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
- 列表:要使用 DHCP,请输入: # nmcli connection modify mlx5_ib0 ipv4.method auto 如果 ipv4.method 已设置为 auto(默认),请跳过这一步。
- 命令/配置摘录:
# nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
# nmcli connection modify mlx5_ib0 infiniband.p-key 0x800227.3.5. 使用 network RHEL 系统角色配置 IPoIB 连接
- 要点:要配置 IP over InfiniBand (IPoIB),请创建一个 NetworkManager 连接配置文件。您可以使用 network RHEL 系统角色自动化这个过程,并在 playbook 中定义的主机上远程配置连接配置集。
- 要点:您可以使用 network RHEL 系统角色配置 IPoIB,如果 InfiniBand 的父设备的连接配置文件不存在,角色也可以创建它。
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:一个名为 mlx5_ib0 的 InfiniBand 设备已安装在受管节点上。
- 列表:受管节点使用 NetworkManager 配置网络。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: IPoIB connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # InfiniBand connection mlx5_ib…
- 命令/配置摘录:
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: IPoIB connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # InfiniBand connection mlx5_ib0 - name: mlx5_ib0 interface_name: mlx5_ib0 type: infiniband # IPoIB device mlx5_ib0.8002 on top of mlx5_ib0 - name: mlx5_ib0.8002 type: infiniband autoconnect: yes infiniband: p_key: 0x8002 transport_mode: datagram parent: mlx5_ib0 ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 state: up
$ ansible-playbook --syntax-check ~/playbook.yml27.3.6. 使用 nmstatectl 配置 IPoIB 连接
- 要点:您可以使用声明性 Nmstate API 来配置 IP over InfiniBand (IPoIB)。nmstate 确保结果与配置文件匹配或回滚更改。
- 要点:先决条件
- 列表:InfiniBand 设备已安装在服务器上。
- 列表:用于 InfiniBand 设备的内核模块已加载。
- 列表:创建一个包含以下内容的 YAML 文件,如 ~/create-IPoIB-profile.yml : interfaces: - name: mlx5_ib0.8002 type: infiniband state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false infiniband: base-ifa…
- 列表:IPOIB 设备名称:mlx5_ib0.8002
- 列表:基本接口(父):mlx5_ib0
- 列表:InfiniBand 分区密钥: 0x8002
- 命令/配置摘录:
interfaces: - name: mlx5_ib0.8002 type: infiniband state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false infiniband: base-iface: "mlx5_ib0" mode: datagram pkey: "0x8002" routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: mlx5_ib0.8002 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: mlx5_ib0.8002
# nmstatectl apply ~/create-IPoIB-profile.yml27.3.7. 配置 IPoIB 后使用 iperf3 测试 RDMA 网络
- 要点:iperf3 工具测量两个节点之间的 RDMA 和 IP 性能。
- 要点:在以下示例中,大型缓冲区大小用于执行 60 秒测试,以测量最大吞吐量,并使用 iperf3 工具充分利用两台主机之间的带宽和延迟。
- 列表:您已在两个主机上配置了 IPoIB。
- 列表:要在系统中运行 iperf3 作为服务器,定义一个时间间隔,以提供定期带宽更新 -i 以侦听,作为一个服务器 -s,等待客户端连接的响应: # iperf3 -i 5 -s
- 列表:要作为客户端在另一个系统上运行 iperf3,请定义一个间隔,提供定期带宽更新 -i 连接到侦听的服务器 -c 连接到 IP 地址 192.168.2.2 和 -t 秒(以秒为单位): # iperf3 -i 5 -t 60 -c 192.168.2.2
- 列表:使用以下命令: 在作为服务器的系统中显示测试结果: # iperf3 -i 10 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.2.3, port 22216 [5] local 192.168.2.2 port 5201 connected to 192.168.2.3 port 22218 [ID] Interval…
- 列表:在作为服务器的系统中显示测试结果: # iperf3 -i 10 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.2.3, port 22216 [5] local 192.168.2.2 port 5201 connected to 192.168.2.3 port 22218 [ID] Interval Transfe…
- 列表:在作为客户端的系统中显示测试结果: # iperf3 -i 1 -t 60 -c 192.168.2.2 Connecting to host 192.168.2.2, port 5201 [4] local 192.168.2.3 port 22218 connected to 192.168.2.2 port 5201 [ID] Interval Transfer Bandwidth Retr Cwnd [4] 0.00-10.00 sec 17.6 GBytes 15.1 Gbits/sec 0 6.01 MBytes [4] 10.00-20.00 sec 17.6 GBytes 15.1 Gbits/sec 0 6.01…
- 命令/配置摘录:
# iperf3 -i 5 -s
# iperf3 -i 5 -t 60 -c 192.168.2.227.4. 配置 RoCE
- 要点:通过融合以太网的远程直接内存访问(RDMA)是一个通过以太网使用 RDMA 的网络协议。对于配置,RoCE 需要特定的硬件,并且一些硬件供应商是 Mellanox、Broadcom 和 QLogic。
27.4.1. RoCE 协议版本概述
- 要点:了解不同 RoCE 版本之间的区别对于设计高效且可扩展的网络基础架构至关重要。
- 要点:以下是不同的 RoCE 版本:
- 注意:重要 使用不同的版本,如客户端上的 RoCE v2 和服务器上的 RoCE v1 不被支持。在这种情况下,将服务器和客户端都配置为通过 RoCE v1 进行通信。
27.4.2. 临时更改默认 RoCE 版本
- 要点:在客户端中使用 RoCE v2 协议,并不支持服务器上的 RoCE v1。如果您的服务器中的硬件只支持 RoCE v1,请为 RoCE v1 配置客户端,来与服务器进行通信。
- 要点:例如,您可以为只支持 RoCE v1 的 Mellanox ConnectX-5 InfiniBand 设备配置使用 mlx5_0 驱动程序的客户端。
- 列表:客户端使用带有 RoCE v2 协议的 InfiniBand 设备。
- 列表:服务器使用只支持 RoCE v1 的 InfiniBand 设备。
- 列表:创建 /sys/kernel/config/rdma_cm/mlx5_0/ 目录: # mkdir /sys/kernel/config/rdma_cm/mlx5_0/
- 列表:显示默认 RoCE 模式: # cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode RoCE v2
- 列表:将默认 RoCE 模式改为版本 1: # echo "IB/RoCE v1" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
- 命令/配置摘录:
# mkdir /sys/kernel/config/rdma_cm/mlx5_0/
# cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode RoCE v2- 注意:注意 此处描述的更改将保持有效,直到您重启主机。
27.5. 增加用户可以在系统中固定的内存量
- 要点:远程直接内存访问(RDMA)操作需要固定物理内存。因此,内核不允许将内存写入交换空间。如果用户固定太多内存,系统会耗尽内存,并且内核会终止进程来释放更多内存。
- 要点:内存固定是一个特权操作。如果非 root 用户需要运行大型 RDMA 应用程序,则需要增加内存量,以便在主内存中一直保持页面固定。
- 列表:以 root 用户身份,创建具有以下内容的文件 /etc/security/limits.conf : @rdma soft memlock unlimited @rdma hard memlock unlimited 详情请查看您系统上的 limits.conf (5) 手册页。
- 列表:在编辑 /etc/security/limits.conf 文件后,以 rdma 组的成员登录。 请注意,当用户登录时,Red Hat Enterprise Linux 会应用更新的 ulimit 设置。
- 列表:使用 ulimit -l 命令显示限制: $ ulimit -l unlimited 如果命令返回 unlimited,用户可以获得无限数量的内存。
- 命令/配置摘录:
@rdma soft memlock unlimited @rdma hard memlock unlimited
$ ulimit -l unlimited27.6. 在 NFS 服务器上启用 NFS over RDMA
- 要点:远程直接内存访问(RDMA)启用系统间的直接数据传输。它提高了吞吐量,缩短延迟,并降低服务器和客户端上的 CPU 用量。通过 RDMA 连接时,NFS 客户端可以使用 NFSoRDMA 挂载导出的目录。
- 要点:先决条件
- 列表:NFS 服务正在运行且已配置
- 列表:服务器上安装了 InfiniBand 或 RDMA over Converged Ethernet (RoCE)设备。
- 列表:IP over InfiniBand (IPoIB)已在服务器上配置,InfiniBand 设备已分配了一个 IP 地址。
- 列表:安装 rdma-core 软件包: # dnf install rdma-core
- 列表:如果软件包已安装,请验证 /etc/rdma/modules/rdma.conf 文件中的 xprtrdma 和 svcrdma 模块是否已取消注释: # NFS over RDMA client support xprtrdma # NFS over RDMA server support svcrdma
- 列表:可选:默认情况下,RDMA 上的 NFS 使用端口 20049。如果要使用不同的端口,请在 /etc/nfs.conf 文件的 [nfsd] 部分中设置 rdma-port 设置: rdma-port=<port>
- 命令/配置摘录:
# dnf install rdma-core
# NFS over RDMA client support xprtrdma # NFS over RDMA server support svcrdma27.7. InfiniBand 子网管理器
- 要点:所有 InfiniBand 网络都必须运行子网管理器才能正常工作。即使两台机器没有使用交换机直接进行连接,也是如此。
- 要点:有可能有一个以上的子网管理器。在这种情况下,一个充当控制器,另一个子网管理器充当在主子网管理器失败时接管的端口。
完整目录
- 管理网络接口和高级网络功能
- 对红帽文档提供反馈
- 第 1 章 实现一致的网络接口命名
- 1.1. udev 设备管理器如何重命名网络接口
- 1.2. 网络接口命名策略
- 1.3. 网络接口命名方案
- 1.4. 切换到不同的网络接口命名方案
- 1.5. 在安装过程中为以太网接口自定义前缀
- 1.6. 使用 udev 规则配置用户定义的网络接口名称
- 1.7. 使用 systemd 链接文件配置用户定义的网络接口名称
- 1.8. 使用 systemd 链接文件将替代名称分配给网络接口
- 第 2 章 配置以太网连接
- 2.1. 使用 nmcli 配置以太网连接
- 2.2. 使用 nmtui 配置以太网连接
- 2.3. 使用控制中心配置以太网连接
- 2.4. 使用nmstatectl 和接口名称配置具有静态 IP 地址的以太网连接
- 2.5. 使用 nmstatectl 和 PCI 地址配置具有静态 IP 地址的以太网连接
- 2.6. 使用 network RHEL 系统角色和接口名称,配置具有静态 IP 地址的以太网连接
- 2.7. 使用 network RHEL 系统角色和设备路径,配置具有静态 IP 地址的以太网连接
- 2.8. 使用 nmstatectl 和接口名称配置具有动态 IP 地址的以太网连接
- 2.9. 使用 nmstatectl 和 PCI 地址配置具有动态 IP 地址的以太网连接
- 2.10. 使用 network RHEL 系统角色和接口名称配置具有动态 IP 地址的以太网连接
- 2.11. 使用 network RHEL 系统角色和设备路径,配置具有动态 IP 地址的以太网连接
- 2.12. 按接口名称,使用单个连接配置文件配置多个以太网接口
- 2.13. 使用 PCI ID 为多个以太网接口配置一个连接配置文件
- 第 3 章 配置网络绑定
- 3.1. 了解控制器和端口接口的默认行为
- 3.2. 上游交换机配置依赖绑定模式
- 3.3. 使用 nmcli 配置网络绑定
- 3.4. 使用 RHEL web 控制台配置网络绑定
- 3.5. 使用 nmtui 配置网络绑定
- 3.6. 使用 nmstatectl 配置网络绑定
- 3.7. 使用 network RHEL 系统角色配置网络绑定
- 3.8. 不同的网络绑定模式
- 3.9. xmit_hash_policy bonding 参数
- 第 4 章 配置 VLAN 标记
- 4.1. 使用 nmcli 配置 VLAN 标记
- 4.2. 使用 nmcli 配置嵌套 VLAN
- 4.3. 使用 RHEL web 控制台配置 VLAN 标记
- 4.4. 使用 nmtui 配置 VLAN 标记
- 4.5. 使用 nmstatectl 配置 VLAN 标记
- 4.6. 使用 network RHEL 系统角色配置 VLAN 标记
- 4.7. 使用网桥上的 VLAN 过滤,使用单个 uplink 将虚拟机映射到外部 VLAN
- 4.7.1. 使用 nmcli在网桥上配置 VLAN 过滤
- 4.7.2. 使用 nmstatectl配置带有 VLAN 过滤的桥接
- 4.7.3. 在带有现有网桥的 libvirt 中创建一个虚拟网络
- 4.7.4. 配置虚拟机以使用 VLAN 定义的虚拟网络
- 第 5 章 配置网络桥接
- 5.1. 使用 nmcli 配置网桥
- 5.2. 使用 RHEL web 控制台配置网桥
- 5.3. 使用 nmtui 配置网桥
- 5.4. 使用 nmstatectl 配置网桥
- 5.5. 使用 network RHEL 系统角色配置网桥
- 第 6 章 设置 IPsec VPN
- 6.1. IPsec VPN 中的组件
- 6.2. Libreswan 身份验证方法
- 6.3. 手动配置具有原始 RSA 密钥身份验证的 IPsec 主机到主机的 VPN
- 6.4. 手动配置具有原始 RSA 密钥身份验证的 IPsec 站点到站点 VPN
- 6.5. 手动配置具有基于证书身份验证的 IPsec 主机到站点 VPN
- 6.5.1. 手动设置 IPsec 网关
- 6.5.2. 使用 GNOME 设置将客户端配置为连接到 IPsec VPN 网关
- 6.6. 手动配置具有基于证书的身份验证的 IPsec 网格 VPN
- 6.7. 使用密码保护 IPsec NSS 数据库
- 6.8. 在启用了 FIPS 模式的系统上使用 IPsec
- 6.9. 为 IPsec VPN 连接配置 TCP 回退
- 6.10. 在 Libreswan 中启用旧的密码和算法
- 6.11. 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道
- 6.12. 使用 RHEL 系统角色配置 IPsec VPN 连接
- 6.12.1. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 主机到主机的 VPN
- 6.12.2. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 主机到主机的 VPN ,并将数据和控制平面分开
- 6.12.3. 使用 vpn RHEL 系统角色配置具有 PSK 身份验证的 IPsec 站点到站点 VPN
- 6.12.4. 使用 vpn RHEL 系统角色配置带有基于证书身份验证的 IPsec 网格 VPN
- 6.13. 使用 nmstatectl 配置 IPsec VPN 连接
- 6.13.1. 使用 nmstatectl,配置具有原始 RSA 密钥身份验证的 IPsec 主机到主机的 VPN
- 6.13.2. 使用 nmstatectl 配置具有原始 RSA 密钥身份验证的 IPsec 站点到站点 VPN
- 6.13.3. 使用 nmstatectl 将客户端配置为连接到 IPsec VPN 网关
- 6.14. IPsec 配置故障排除
- 6.14.1. 基本连接问题
- 6.14.2. 与防火墙相关的问题
- 6.14.3. 不匹配的配置
- 6.14.4. MTU 问题
- 6.14.5. NAT 冲突
- 6.14.6. 内核级 IPsec 问题
- 6.14.7. 内核 IPsec 子系统错误
- 6.14.8. 显示 Libreswan 日志
- 第 7 章 设置 WireGuard VPN
- 7.1. WireGuard 使用的协议和原语
- 7.2. WireGuard 如何使用隧道 IP 地址、公钥和远程端点
- 7.3. 使用 NAT 和防火墙后面的 WireGuard 客户端
- 7.4. 创建在 WireGuard 连接中使用的私钥和公钥
- 7.5. 使用 nmcli 配置 WireGuard 服务器
- 7.6. 使用 nmtui 配置 WireGuard 服务器
- 7.7. 使用 RHEL web 控制台配置 WireGuard 服务器
- 7.8. 使用命令行在 WireGuard 服务器上配置 firewalld
- 7.9. 使用 RHEL web 控制台在 WireGuard 服务器上配置 firewalld
- 7.10. 使用 nmcli 配置 WireGuard 客户端
- 7.11. 使用 nmtui 配置 WireGuard 客户端
- 7.12. 使用 RHEL web 控制台配置 WireGuard 客户端
- 7.13. 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道
- 7.14. 其他资源
- 第 8 章 配置 IP 隧道
- 8.1. 配置 IPIP 隧道来封装 IPv4 数据包中的 IPv4 流量
- 8.2. 配置 GRE 隧道来封装 IPv4 数据包中的第 3 层流量
- 8.3. 配置 GRETAP 隧道来通过 IPv4 传输以太网帧
- 第 9 章 管理 wifi 连接
- 9.1. 支持的 wifi 安全类型
- 9.2. 使用 nmcli 连接到 wifi 网络
- 9.3. 使用 GNOME Settings 连接到 wifi 网络
- 9.4. 使用 nmtui 配置 wifi 连接
- 9.5. 使用 nmcli 在现有配置文件中配置带有 802.1X 网络身份验证的 wifi 连接
- 9.6. 使用 network RHEL 系统角色配置带有 802.1X 网络身份验证的 wifi 连接
- 9.7. 手动设置无线规范域
- 第 10 章 在 IBM Z 中配置持久性 qeth 设备
- 第 11 章 使用 MACsec 加密同一物理网络中的第 2 层流量
- 11.1. MACsec 如何提高安全性
- 11.2. 使用 nmcli 配置 MACsec 连接
- 11.3. 使用 nmstatectl 配置 MACsec 连接
- 第 12 章 将 NetworkManager 配置为忽略某些接口
- 12.1. 使用 NetworkManager device 部分将接口永久配置为非受管
- 12.2. 使用 nmcli将接口临时配置为非受管
- 12.3. 确定 NetworkManager 不管理特定网络接口的原因
- 第 13 章 管理默认网关
- 13.1. 使用 nmcli 对现有连接设置默认网关
- 13.2. 使用 nmstatectl 对现有连接设置默认网关
- 13.3. 使用 network RHEL 系统角色在现有连接上设置默认网关
- 13.4. NetworkManager 如何管理多个默认网关
- 13.5. 配置 NetworkManager 以避免使用特定配置集提供默认网关
- 13.6. 修复因为多个默认网关导致的意外路由行为
- 第 14 章 配置静态路由
- 14.1. 需要静态路由的网络示例
- 14.2. 如何使用 nmcli 工具配置静态路由
- 14.3. 使用 nmcli 配置静态路由
- 14.4. 使用 nmtui 配置静态路由
- 14.5. 使用 nmstatectl 配置静态路由
- 14.6. 使用 network RHEL 系统角色配置静态路由
- 第 15 章 配置基于策略的路由以定义其他路由
- 15.1. 使用 nmcli 将流量从特定子网路由到不同的默认网关
- 15.2. 使用 network RHEL 系统角色,将来自特定子网的流量路由到不同的默认网关
- 第 16 章 使用 hostnamectl 更改主机名
- 第 17 章 配置 NetworkManager 连接的 DHCP 超时行为
- 第 18 章 配置 DNS 服务器顺序
- 18.1. NetworkManager 如何对 /etc/resolv.conf 中的 DNS 服务器进行排序
- 18.2. 设置 NetworkManager 范围默认 DNS 服务器优先级值
- 18.3. 设置网络管理器连接的 DNS 优先级
- 18.4. 通过某个接口路由 DNS 流量
- 第 19 章 在不同域中使用不同的 DNS 服务器
- 19.1. 在 NetworkManager 中使用 dnsmasq 将特定域的 DNS 请求发送到所选的 DNS 服务器
- 19.2. 使用 NetworkManager 中的 systemd-resolved 将对特定域的 DNS 请求发送到所选的 DNS 服务器
- 第 20 章 使用 802.1X 标准和存储在文件系统上的证书对 RHEL 客户端进行网络验证
- 20.1. 使用 nmcli 在现有以太网连接上配置 802.1X 网络身份验证
- 20.2. 使用 nmstatectl 配置带有 802.1X 网络身份验证的静态以太网连接
- 20.3. 使用 network RHEL 系统角色,配置带有 802.1X 网络身份验证的静态以太网连接
- 20.4. 使用 network RHEL 系统角色配置带有 802.1X 网络身份验证的 wifi 连接
- 第 21 章 使用带有 FreeRADIUS 集成的 hostapd 为 LAN 客户端设置 802.1x 网络身份验证服务
- 21.1. 先决条件
- 21.2. 在验证器中设置网桥
- 21.3. 配置 FreeRADIUS ,以使用 EAP 安全地验证网络客户端
- 21.4. 在有线网络中将 hostapd 配置为验证器
- 21.5. 针对 FreeRADIUS 服务器或验证器测试 EAP-TTLS 身份验证
- 21.6. 根据 hostapd 身份验证事件阻止和允许流量
- 第 22 章 keyfile 格式的 NetworkManager 连接配置文件
- 22.1. NetworkManager 配置文件的密钥文件格式
- 22.2. 使用 nmcli 在离线模式下创建 keyfile 连接配置文件
- 第 23 章 systemd 网络目标和服务
- 23.1. network 和 network-online systemd 目标之间的区别
- 23.2. NetworkManager-wait-online 概述
- 23.3. 将 systemd 服务配置为在网络已启动后再启动
- 23.4. 配置 IP 地址 ping 目标,以确保活跃的网络连接
- 第 24 章 Nmstate 简介
- 24.1. 在 Python 应用程序中使用 libnmstate 库
- 24.2. 使用 nmstatectl 更新当前网络配置
- 24.3. nmstate systemd 服务
- 24.4. network RHEL 系统角色的网络状态
- 第 25 章 多路径 TCP 入门
- 25.1. 了解 MPTCP
- 25.2. 为 MPTCP 应用程序永久配置多路径
- 25.3. 配置 mptcpd
- 第 26 章 Linux 流量控制
- 26.1. 排队规则概述
- 26.2. 使用 tc 工具检查网络接口的 qdiscs
- 26.3. 更新默认的 qdisc
- 26.4. 使用 tc 工具临时设置网络接口的当前 qdisc
- 26.5. 使用 NetworkManager 永久设置网络接口的当前 qdisc
- 26.6. 使用 tc-ctinfo 工具配置数据包的速率限制
- 26.7. RHEL 中提供的 qdiscs
- 第 27 章 配置 InfiniBand 和 RDMA 网络
- 27.1. InfiniBand 和 RDMA 简介
- 27.2. 配置核心 RDMA 子系统
- 27.3. 配置 IPoIB
- 27.3.1. IPoIB 通讯模式
- 27.3.2. 了解 IPoIB 硬件地址
- 27.3.3. 使用 systemd 链接文件重命名 IPoIB 设备
- 27.3.4. 使用 nmcli 配置 IPoIB 连接
- 27.3.5. 使用 network RHEL 系统角色配置 IPoIB 连接
- 27.3.6. 使用 nmstatectl 配置 IPoIB 连接
- 27.3.7. 配置 IPoIB 后使用 iperf3 测试 RDMA 网络
- 27.4. 配置 RoCE
- 27.4.1. RoCE 协议版本概述
- 27.4.2. 临时更改默认 RoCE 版本
- 27.5. 增加用户可以在系统中固定的内存量
- 27.6. 在 NFS 服务器上启用 NFS over RDMA
- 27.7. InfiniBand 子网管理器
