Red Hat Training

A Red Hat training course is available for RHEL 8

第 9 章 网络

9.1. NetworkManager

9.1.1. 旧版网络脚本支持

网络脚本在 Red Hat Enterprise Linux 8 中已弃用,且不再默认提供。基本安装提供了 ifupifdown 脚本的新版本,它们通过 nmcli 工具调用 NetworkManager。在 Red Hat Enterprise Linux 8 中,要运行 ifupifdown 脚本, NetworkManager 必须正在运行。

注意

/sbin/ifup-localifdown-pre-localifdown-local 脚本中的自定义命令没有被执行。

如果需要这些脚本,您仍可以使用以下命令在系统中安装已弃用的网络脚本:

~]# yum install network-scripts

ifupifdown 脚本链接到已安装的旧网络脚本。

调用旧的网络脚本会显示一个关于它们已过时的警告。

9.1.2. NetworkManager 支持 SR-IOV 虚拟功能

在 Red Hat Enterprise Linux 8 中,NetworkManager 允许为支持单根 I/O 虚拟化(SR-IOV)的接口配置虚拟功能(VF)的数量。另外, NetworkManager 允许配置 VF 的一些属性,如 MAC 地址、VLAN、spoof checking 设置和允许的字节速率。请注意,与 SR-IOV 相关的所有属性都位于 sriov 连接设置中。详情请查看 nm-settings(5) man page。

9.1.3. NetworkManager 支持连接的通配符接口名称匹配

在以前的版本中,只能使用接口名的完全匹配来限制到给定接口的连接。在这个版本中,连接会有一个支持通配符的 match.interface-name 属性。在这个版本中,用户可以使用通配符模式以更灵活的方式为连接选择接口。

9.1.4. NetworkManager 支持配置 ethtool offload 功能

在这个版本中, NetworkManager 支持配置 ethtool 卸载功能,用户不再需要使用初始化脚本或 NetworkManager 分配程序脚本。现在,用户可以使用以下方法之一将下载功能配置为连接配置集的一部分:

  • 使用 nmcli 工具
  • 通过编辑 /etc/NetworkManager/system-connections/ 目录中的密钥文件
  • 编辑 /etc/sysconfig/network-scripts/ifcfg-* 文件

请注意,图形界面和 nmtui 实用程序目前不支持这个功能。

9.1.5. NetworkManager 现在默认使用内部 DHCP 插件

NetworkManager 支持 internaldhclient DHCP 插件。默认情况下,Red Hat Enterprise Linux(RHEL)7 中的 NetworkManager 使用 dhclient,RHEL 8 使用 internal 插件。在某些情况下,插件的行为不同。例如: dhclient 可以使用 /etc/dhcp/ 目录中指定的附加设置。

如果您从 RHEL 7 升级到 RHEL 8,NetworkManager 的行为有所不同,请在 /etc/NetworkManager/NetworkManager.conf 文件中的 [main] 部分添加以下设置以使用 dhclient 插件:

[main]
dhcp=dhclient

9.1.6. 在 RHEL 8 中,默认不会安装 NetworkManager-config-server 软件包

只有在设置过程中选择了 ServerServer with GUI 基础环境时,才会默认安装 NetworkManager-config-server 软件包。如果您选择了不同的环境,使用 yum install NetworkManager-config-server 命令安装软件包。

9.2. 数据包过滤

9.2.1. nftables 替换 iptables 作为默认网络数据包过滤框架

nftables 框架提供数据包分类工具,它是 iptablesip6tablesarptablesebtablesipset 工具的指定后台。与之前的数据包过滤工具相比,它在方便、特性和性能方面提供了大量改进,最重要的是:

  • 查找表而不是线性处理
  • IPv4IPv6 协议都使用同一个框架
  • 规则会以一个整体被应用,而不是分为抓取、更新和存储完整的规则集的步骤
  • 支持在规则集(nftrace)中进行调试和追踪,并监控追踪事件(在 nft 工具中)
  • 更加一致和压缩的语法,没有特定协议的扩展
  • 用于第三方应用程序的 Netlink API

iptables类似, nftables 使用表来存储链。链包含执行动作的独立规则。nft 工具替换了之前数据包过滤框架中的所有工具。libnftables 库可用于通过 libmnl 库与 nftables Netlink API 进行底层交互。

iptablesip6tablesebtablesarptables 工具由基于 nftables 的具有相同名称的程序替换。虽然其外部行为与其旧的程序相同,但在内部会通过兼容性接口使用 nftables 和旧的 netfilter 内核模块。

您可以使用 nft list ruleset 命令查看模块对 nftables 规则集的影响。这些工具将表、链和规则添加到 nftables 规则集中,请注意, nftables 规则集操作(如 nft flush ruleset 命令)可能会影响使用以前独立的旧命令安装的规则集。

为了帮助快速识存在该工具的哪个变体,版本信息已被更新,其中包含了后端名称。在 RHEL 8 中,基于 nftables 的 iptables 工具打印以下版本字符串:

$ iptables --version
iptables v1.8.0 (nf_tables)

如果存在旧的 iptables 工具,则会打印以下版本信息:

$ iptables --version
iptables v1.8.0 (legacy)

9.2.2. Arptables FORWARD 从 RHEL 8 的过滤表中删除

arptables FORWARD 链功能已在 Red Hat Enterprise Linux(RHEL)8 中删除。现在,您可以使用 ebtables 工具的 FORWARD 链将规则添加到其中。

9.2.3. iptables-ebtables 的输出与 ebtables 并不完全兼容

在 RHEL 8 中,ebtables 命令由 iptables-ebtables 软件包提供,它包含了基于 nftables 的新的实现。这个工具有不同的代码基础,其输出在方面会有所不同,它们是微不足道的,或者是特意设计选择。

因此,在迁移用于解析 ebtables 输出的脚本时,需要对脚本进行以下调整:

  • 将 MAC 地址格式化改为固定长度。必要时,在独立的字节值的开始包含一个 0,用于维护每个字段值带有两个字符。
  • 已更改 IPv6 前缀的格式以符合 RFC 4291。斜杠字符后的结尾部分不再包含 IPv6 地址格式的子网掩码,而是一个前缀长度。这个更改只适用于有效的(left-contiguous)掩码,其他更改则仍然以旧格式打印。

9.2.4. 将 iptables 转换为 nftables 的新工具

在这个版本中,添加了 iptables-translateip6tables-translate 工具,将现有 iptablesip6tables 规则转换为 nftables 的对等规则。请注意,一些扩展可能缺少响应的转换支持。如果存在这种扩展,该工具会输出以 # 符号为前缀的未转换的规则。例如:

| % iptables-translate -A INPUT -j CHECKSUM --checksum-fill
| nft # -A INPUT -j CHECKSUM --checksum-fill

另外,用户还可以使用 iptables-restore-translateip6tables-restore-translate 工具来翻译规则转储。请注意,在此之前,用户可以使用 iptables-save 或者 ip6tables-save 命令打印当前规则的转储。例如:

| % sudo iptables-save >/tmp/iptables.dump
| % iptables-restore-translate -f /tmp/iptables.dump
| # Translated by iptables-restore-translate v1.8.0 on Wed Oct 17 17:00:13 2018
| add table ip nat
| ...

9.3. wpa_supplicant 中的变化

9.3.1. journalctl 现在可以读取 wpa_supplicant 日志

在 Red Hat Enterprise Linux(RHEL)8 中,wpa_supplicant 软件包在启用CONFIG_DEBUG_SYSLOG 的情况下被构建。这允许使用 journalctl 实用程序读取 wpa_supplicant 日志,而不是检查 /var/log/wpa_supplicant.log 文件的内容。

9.3.2. 禁用了 wpa_supplicant 中无线扩展的编译时间支持

wpa_supplicant 软件包不支持无线扩展。当用户试图使用 wext 作为命令行参数时,或者在只支持无线扩展的旧适配器中尝试使用它时,将无法运行 wpa_supplicant 守护进程。

9.4. 向 SCTP 中添加的新数据块类型 I-DATA

在这个版本中,在流控制传输协议(SCTP)中添加了新的数据块类型 I-DATA 和流调度程序。在以前的版本中,SCTP 发送的用户信息与用户发送的顺序相同。因此,大的 SCTP 用户消息会阻断任意流中的所有其他信息,直到完全发送为止。当使用 I-DATA 块时, Transmission Sequence Number(TSN)字段不会被超载。因此,SCTP 现在可以以不同的方式调度流, I-DATA 允许用户信息交集(RFC 8260)。请注意,两个 peer 都必须支持 I-DATA 块类型。

9.5. RHEL 8 中的主要 TCP 特性

Red Hat Enterprise Linux 8 提供了 TCP 网络堆栈版本 4.18,它提供更高的性能、更好的可伸缩性和稳定性。性能会提高,特别是对于入站连接率高的忙碌的 TCP 服务器的性能。

另外,提供了两个新的 TCP 阻塞算法 BBRNV,它们在大多数情况下都会提供较低延迟和更好的吞吐量。

9.5.1. RHEL 8 中的 TCP BBR 支持

Red Hat Enterprise Linux(RHEL)8 现在支持一个新的 TCP 阻塞控制算法、Bottleneck Bandwidth 和□-trip 时间(BBR)。BBR 会尝试决定 bottleneck 链接和 RT-trip 时间(RTT)的带宽。大多数阻塞算法都基于数据包丢失(包括默认的 Linux TCP 阻塞控制算法)。高吞吐量链接存在问题。BBR 不直接响应丢失事件,它会调整 TCP 架构率使其与可用带宽匹配。

有关此问题的详情,请参考如何配置 TCP BBR 阻塞控制算法

9.7. 网络接口名称更改

在 Red Hat Enterprise Linux 8 中,默认使用与 RHEL 7 相同的一致的网络设备命名方案。但是,某些内核驱动程序,如 e1000enfpqedesfctg3bnxt_en 在 RHEL 8 的新安装中更改了它们的一致性名称。但是,名称会在从 RHEL 7 升级时保留。

9.8. 已删除 ipv6netmaskgatewayhostname 内核参数

从 RHEL 8.3 开始,在内核命令行中配置网络的 ipv6netmaskgatewayhostname 内核参数将不再可用。使用接受不同格式的合并的 ip 参数,如下所示:

ip=IP_address:peer:gateway_IP_address:net_mask:host_name:interface_name:configuration_method

有关各个字段以及这个参数接受的其他格式的详情,请查看 dracut.cmdline(7) man page 中的 ip 参数描述。

9.9. 删除 tc 命令的 -ok 选项

在 Red Hat Enterprise Linux 8 中删除了 tc 命令的 -ok 选项。作为临时解决方案,用户可以实施代码直接通过与内核的 netlink 进行通信。收到的响应消息,指明发送请求的完成和状态。另一个方法是为每个命令单独调用 tc。这可能会在一个自定义脚本中使用,它会在每次成功 tc 调用时打印 OK 来模拟 tc -batch 行为。


为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。