Red Hat Training
A Red Hat training course is available for RHEL 8
配置和管理网络
管理网络接口、防火墙和高级网络功能
摘要
- 您可以配置绑定、VLAN、网桥、隧道和其他网络类型,以将主机连接到网络。
- 您可以为本地主机和整个网络构建性能关键防火墙。RHEL 包含数据包过滤软件,如
firewalld
服务、nftables
框架和 Express 数据路径(XDP)。 - RHEL 还支持高级网络功能,如基于策略的路由和多路径 TCP (MPTCP)。
使开源包含更多
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对我们文档的反馈。让我们了解如何改进它。
根据具体内容提交评论
- 查看 Multi-page HTML 格式的文档,并确保在页面完全加载后看到右上角的 Feedback 按钮。
- 使用光标突出显示您要评论的文本部分。
- 点在高亮文本旁的 Add Feedback 按钮。
- 添加您的反馈并点 Submit。
通过 Bugzilla 提交反馈(需要帐户)
- 登录到 Bugzilla 网站。
- 从 Version 菜单中选择正确的版本。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点 Submit Bug。
第 1 章 一致的网络接口设备命名
Linux 内核通过将固定前缀与随着内核初始化网络设备而增加的数字连接在一起,来为网络接口分配名称。例如,eth0
代表启动时被探测的第一个设备。如果您在系统中添加另一个网卡,则内核设备名称的分配将不再是固定的。因此,重启后内核可能会以不同的方式为该设备命名。
要解决这个问题,udev
设备管理器支持几种不同的命名方案。默认情况下,udev
根据固件、拓扑和位置信息分配固定名称。它有以下优点:
- 设备名称完全可预测。
- 即使添加或删除了硬件,设备名称也会保持不变,因为不会进行重新枚举。
- 因此,有问题的硬件可以被无缝地替换。
红帽不支持禁用了一致设备命名的系统。详情请查看 是否可以安全地设置 net.ifnames=0?
1.1. 网络接口设备命名等级
如果启用了一致的设备命名(在 Red Hat Enterprise Linux 中是默认设置),则 udev
设备管理器会根据以下方案生成设备名称:
方案 | 描述 | 示例 |
---|---|---|
1 |
设备名称包含固件或者 BIOS 提供的索引号,用于板上的设备。如果此信息不可用或不适用,则 |
|
2 |
设备名称包含固件或 BIOS 提供的 PCI Express(PCIe)热插件插槽索引号。如果此信息不可用或不适用,则 |
|
3 |
设备名称包含硬件连接器的物理位置。如果此信息不可用或不适用,则 |
|
4 | 设备名称包含 MAC 地址。Red Hat Enterprise Linux 默认不使用这个方案,但管理员可选择性地使用它。 |
|
5 |
传统的无法预计的内核命名方案。如果 |
|
默认情况下,Red Hat Enterprise Linux 根据 /usr/lib/systemd/network/99-default.link
文件中的 NamePolicy
设置选择设备名称。NamePolicy
中值的顺序非常重要。Red Hat Enterprise Linux 使用文件中指定的和 udev
生成的第一个设备名称。
如果您手动配置 udev
规则来更改内核设备名称,则这些规则优先。
1.2. 网络设备重命名是如何工作的
默认情况下,在 Red Hat Enterprise Linux 中启用了一致的设备命名。udev
设备管理器会处理不同的规则来重命名设备。udev
服务按以下顺序处理这些规则:
-
/usr/lib/udev/rules.d/60-net.rules
文件定义了/lib/udev/rename_device
帮助工具搜索/etc/sysconfig/network-scripts/ifcfg-*
文件中的HWADDR
参数。如果变量中设置的值与接口的 MAC 地址匹配,则帮助工具会将接口重命名为文件的DEVICE
参数中设置的名称。 -
/usr/lib/udev/rules.d/71-biosdevname.rules
文件定义了biosdevname
工具根据其命名策略重命名接口,只要它在上一步中没有重命名。 -
/usr/lib/udev/rules.d/75-net-description.rules
文件定义了udev
检查网络接口设备,并在udev
-internal 变量中设置在下一步中将要处理的属性。请注意,其中一些属性可能没有定义。 /usr/lib/udev/rules.d/80-net-setup-link.rules
文件调用内置的net_setup_link
udev
,然后应用策略。以下是存储在/usr/lib/systemd/network/99-default.link
文件中的默认策略:[Link] NamePolicy=kernel database onboard slot path MACAddressPolicy=persistent
有了这个策略,如果内核使用持久名称,则
udev
不会重命名接口。如果内核不使用持久名称,则udev
会将接口重命名为udev
的硬件数据库提供的名称。如果这个数据库不可用,Red Hat Enterprise Linux 会回复到上述机制中。另外,对于基于介质访问控制(MAC)地址的接口名称,将此文件中的
NamePolicy
参数设为mac
。/usr/lib/udev/rules.d/80-net-setup-link.rules
文件定义了udev
按以下顺序,根据udev
-internal 参数重命名接口:-
ID_NET_NAME_ONBOARD
-
ID_NET_NAME_SLOT
-
ID_NET_NAME_PATH
如果没有设置参数,则
udev
将使用下一个参数。如果没有设置任何参数,接口就不会被重命名。-
步骤 3 和 4 实现了网络接口设备命名层次结构中介绍的命名方案 1 到 4。
其他资源
- 在安装过程中自定义以太网接口的前缀
- 为什么 systemd 网络接口在主 RHEL 版本之间名称不同?
-
systemd.link(5)
man page
1.3. x86_64 平台上的可预测的网络接口名称解释
当启用了一致的网络设备名称特性时,udev
设备管理器会根据不同的标准创建设备名称。接口名称以双字符前缀开始,该前缀基于接口类型:
-
en
用于以太网 -
wl
用于无线 LAN(WLAN) -
ww
用于无线广域网(WWAN)。
另外,以下之一会根据 udev
设备管理器应用的模式,附加到上述前缀中的一个:
-
o<on-board_index_number>
s<hot_plug_slot_index_number>[f<function>][d<device_id>]
请注意,所有多功能 PCI 设备在设备名称中都包含
[f<function>]
号,包括功能0
设备。-
x<MAC_address>
[P<domain_number>]p<bus>s<slot>[f<function>][d<device_id>]
[P<domain_number>]
部分定义了 PCI 的地理位置。如果域号不是0
,才会设置此部分。[P<domain_number>]p<bus>s<slot>[f<function>][u<usb_port>][…][c<config>][i<interface>]
对于 USB 设备,hub 端口号的完整链由 hub 的端口号组成。如果名称大于最大值(15 个字符),则不会导出该名称。如果链中有多个 USB 设备,则
udev
会抑制 USB 配置描述符(c1)
和 USB 接口描述符(i
0)的默认值。
1.4. System z 平台中可预测的网络接口设备名称解释
当启用了一致的网络设备名称特性时,System z 平台上的 udev
设备管理器会根据总线 ID 创建设备名称。总线 ID 识别 s390 频道子系统中的一个设备。
对于通道命令词(CCW)设备,总线 ID 是前缀为 0.n
的设备号 ,其中 n
是子通道集 ID。
例如,以太网接口被命名为 enccw0.0.1234
。例如,串行线互联网协议(SLIP)通道到通道(CTC)网络设备被命名为 slccw0.0.1234
。
使用 znetconf -c
或 lscss -a
命令显示可用的网络设备及其总线 ID。
Red Hat Enterprise Linux 还支持通过融合以太网(RoCE) Express PCI 功能的 RDMA 的可预测和持久接口名称。两个标识符提供可预测的接口名称:用户标识符 (UID) 和功能标识符 (FID)。在一个系统上,若要获取基于 UID 的可预测接口名称,请强制 UID 的唯一性,这是首选的命名方案。如果没有可用的 UID,则 RHEL 将使用 FID 来设置可预测的接口名称。
1.5. 在安装过程中自定义以太网接口的前缀
您可以在 Red Hat Enterprise Linux 安装过程中自定义以太网接口名称的前缀。
红帽不支持在已部署的系统上使用 prefixdevname
工具自定义前缀。
RHEL 安装后,udev
服务将太网设备命名为 <prefix>.<index>
。例如,如果您选择前缀 net
,RHEL 将太网接口命名为 net0
, net1
,等等。
先决条件
要设置的前缀满足以下要求:
- 由 ASCII 字符组成。
- 它是一个字母数字串。
- 它小于 16 个字符。
-
它不与任何用于网络接口命名的其他已知前缀冲突,如
eth
、eno
、ens
和em
。
步骤
- 引导 Red Hat Enterprise Linux 安装介质。
在引导管理器中:
-
选择
Install Red Hat Enterprise Linux<version>
条目,然后按 Tab 键编辑该条目。 -
将
net.ifnames.prefix=<prefix>
追加到在内核选项中。 - 按 Enter 键启动安装程序。
-
选择
- 安装 Red Hat Enterprise Linux。
验证
安装后,显示以太网接口:
# 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:53:00:c5:98:1c brd ff:ff:ff:ff:ff:ff 3: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:53:00:c2:39:9e brd ff:ff:ff:ff:ff:ff ...
1.6. 使用 udev 规则分配用户定义的网络接口名称
udev
设备管理器支持一组规则来自定义接口名称。
步骤
显示所有网络接口及其 MAC 地址:
# ip link list enp6s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether b4:96:91:14:ae:58 brd ff:ff:ff:ff:ff:ff enp6s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether b4:96:91:14:ae:5a brd ff:ff:ff:ff:ff:ff enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:90:fa:6a:7d:90 brd ff:ff:ff:ff:ff:ff
创建具有以下内容的文件
/etc/udev/rules.d/70-custom-ifnames.rules
:SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="b4:96:91:14:ae:58",ATTR{type}=="1",NAME="provider0" SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="b4:96:91:14:ae:5a",ATTR{type}=="1",NAME="provider1" SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:90:fa:6a:7d:90",ATTR{type}=="1",NAME="dmz"
这些规则与网络接口的 MAC 地址相匹配,并将它们重命名为 NAME 属性中指定的名称。在这些示例中,ATTR{type} 参数值 1 定义了接口类型为 Ethernet。
验证
重启系统:
# reboot
验证每个 MAC 地址的接口名称是否与您在规则文件的
NAME
参数中设置的值相匹配:# ip link show provider0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether b4:96:91:14:ae:58 brd ff:ff:ff:ff:ff:ff altname enp6s0f0 provider1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether b4:96:91:14:ae:5a brd ff:ff:ff:ff:ff:ff altname enp6s0f1 dmz: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:90:fa:6a:7d:90 brd ff:ff:ff:ff:ff:ff altname enp4s0f0
其他资源
-
udev(7)
手册页 -
udevadm(8)
手册页 -
/usr/src/kernels/<kernel_version>/include/uapi/linux/if_arp.h
由kernel-doc
软件包提供
1.7. 使用 systemd 链接文件分配用户定义的网络接口名称
通过将网络接口重命名为 provider0
来创建一个命名方案。
流程
显示所有接口名称及其 MAC 地址:
# ip link show enp6s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether b4:96:91:14:ae:58 brd ff:ff:ff:ff:ff:ff enp6s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether b4:96:91:14:ae:5a brd ff:ff:ff:ff:ff:ff enp4s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:90:fa:6a:7d:90 brd ff:ff:ff:ff:ff:ff
对于将 MAC 地址为 b4:96:91:14:ae:58 的接口命名为 provider0 ,请创建具有以下内容的 /etc/systemd/network/70-custom-ifnames.link 文件:
[Match] MACAddress=b4:96:91:14:ae:58 [Link] Name=provider0
此链接文件与 MAC 地址相匹配,并将网络接口重命名为
Name
参数中设置的名称。
验证
重启系统:
# reboot
验证 MAC 地址为您在链接文件中指定的设备是否已分配给
provider0
:# ip link show provider0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether b4:96:91:14:ae:58 brd ff:ff:ff:ff:ff:ff
其他资源
-
systemd.link(5)
man page
1.8. 使用 systemd 链接文件为网络接口分配额外名称
其它接口命名允许内核为网络接口设置替代名称。默认情况下,它提供与常规接口命名设置相同的命名方案 - NamePolicy
。您可以使用 AlternativeNamesPolicy
或 AlternativeName
指令编写自定义 systemd
链接文件,为您选择的网络接口提供替代名称。
其它接口命名的最新实现可让您:
- 创建任意长度的替代名称。
- 同一网络接口具有一个或多个替代名称。
- 使用替代名称作为命令的句柄。
先决条件
-
您知道介质访问控制(MAC)地址或其他网络接口标识符。详情请查看
systemd.link (5)
中的 [MATCH] SECTION OPTIONS 部分。
流程
使用以下内容创建
/etc/systemd/network/10-altnames.link
文件:[Match] MACAddress=52:54:00:76:e0:2a [Link] AlternativeName=production_alias_of_arbitrary_length AlternativeName=PRD
- 重启系统以使更改生效。
验证
您可以使用备用名称来显示网络接口的状态:
# ip address show production_alias_of_arbitrary_length 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:76:e0:2a brd ff:ff:ff:ff:ff:ff altname production_alias_of_arbitrary_length altname PRD inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp1s0 valid_lft 2760sec preferred_lft 2760sec inet6 2001:db8::/64 scope link noprefixroute valid_lft forever preferred_lft forever
第 2 章 配置以太网连接
Red Hat Enterprise Linux 为管理员提供不同的选项来配置以太网连接。例如:
-
在命令行中使用
nmcli
配置连接。 -
使用
nmtui
在基于文本的用户界面中配置连接。 - 使用 RHEL 系统角色在一个或多个主机上自动配置连接。
-
使用 GNOME Settings 菜单或
nm-connection-editor
应用程序在图形界面中配置连接。 -
使用
nmstatectl
通过 Nmstate API 配置连接。
如果要在在 Microsoft Azure 云中运行的主机上手动配置以太网连接,请禁用 cloud-init
服务或将其配置为忽略从云环境检索到的网络设置。否则,在下次重启手动配置的网络设置时,cloud-init
将被覆盖。
2.1. 使用 nmcli 配置带有静态 IP 地址的以太网连接
要在命令行中配置以太网连接,请使用 nmcli
实用程序。
例如,以下步骤使用以下设置为 enp7s0
设备创建 NetworkManager 连接配置集:
-
静态 IPv4 地址 -
192.0.2.1
和/24
子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
流程
为以太网连接添加新的 NetworkManager 连接配置集:
# nmcli connection add con-name Example-Connection ifname enp7s0 type ethernet
可以进一步修改您创建的
Example-Connection
连接配置集。设置 IPv4 地址:
# nmcli connection modify Example-Connection ipv4.addresses 192.0.2.1/24
设置 IPv6 地址:
# nmcli connection modify Example-Connection ipv6.addresses 2001:db8:1::1/64
将 IPv4 和 IPv6 连接方法设置为
manual
:# nmcli connection modify Example-Connection ipv4.method manual # nmcli connection modify Example-Connection ipv6.method manual
设置 IPv4 和 IPv6 默认网关:
# nmcli connection modify Example-Connection ipv4.gateway 192.0.2.254 # nmcli connection modify Example-Connection ipv6.gateway 2001:db8:1::fffe
设置 IPv4 和 IPv6 DNS 服务器地址:
# nmcli connection modify Example-Connection ipv4.dns "192.0.2.200" # nmcli connection modify Example-Connection ipv6.dns "2001:db8:1::ffbb"
要设置多个 DNS 服务器,以空格分隔并用引号括起来。
为 IPv4 和 IPv6 连接设置 DNS 搜索域:
# nmcli connection modify Example-Connection ipv4.dns-search example.com # nmcli connection modify Example-Connection ipv6.dns-search example.com
激活连接配置集:
# nmcli connection up Example-Connection Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13)
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者也存在于其它连接到同一交换机的主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤并替换有缺陷的电缆和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅 NetworkManager 服务重启后复制连接。
其他资源
-
nm-settings(5)
手册页 -
nmcli(1)
手册页 - 配置 NetworkManager 以避免使用特定配置集提供默认网关
2.2. 使用 nmcli 互动编辑器配置带有静态 IP 地址的以太网连接
您可以使用 nmcli
工具的交互模式在命令行中配置以太网连接。
例如,以下步骤使用以下设置为 enp7s0
设备创建 NetworkManager 连接配置集:
-
静态 IPv4 地址 -
192.0.2.1
和/24
子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
步骤
要为以太网连接添加新的 NetworkManager 连接配置集并启动互动模式,请输入:
# nmcli connection edit type ethernet con-name Example-Connection
设置网络接口:
nmcli> set connection.interface-name enp7s0
设置 IPv4 地址:
nmcli> set ipv4.addresses 192.0.2.1/24
设置 IPv6 地址:
nmcli> set ipv6.addresses 2001:db8:1::1/64
将 IPv4 和 IPv6 连接方法设置为
manual
:nmcli> set ipv4.method manual nmcli> set ipv6.method manual
设置 IPv4 和 IPv6 默认网关:
nmcli> set ipv4.gateway 192.0.2.254 nmcli> set ipv6.gateway 2001:db8:1::fffe
设置 IPv4 和 IPv6 DNS 服务器地址:
nmcli> set ipv4.dns 192.0.2.200 nmcli> set ipv6.dns 2001:db8:1::ffbb
要设置多个 DNS 服务器,请指定它们以空格分隔并用引号括起。
为 IPv4 和 IPv6 连接设置 DNS 搜索域:
nmcli> set ipv4.dns-search example.com nmcli> set ipv6.dns-search example.com
保存并激活连接:
nmcli> save persistent Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection. Do you still want to save? (yes/no) [yes] yes
保留为互动模式:
nmcli> quit
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者也存在于其它连接到同一交换机的主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤并替换有缺陷的电缆和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅 NetworkManager 服务重启后复制连接。
其他资源
-
nm-settings(5)
手册页 -
nmcli(1)
手册页 - 配置 NetworkManager 以避免使用特定配置集提供默认网关
2.3. 使用 nmtui 配置带有静态 IP 地址的以太网连接
nmtui
应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui
在没有图形界面的主机上配置具有静态 IP 地址的以太网连接。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 Space 选择并取消选择复选框。
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
步骤
如果您不知道要在连接中使用的网络设备名称,显示可用的设备:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- ...
启动
nmtui
:# nmtui
-
选择
Edit a connection
,并按 Enter。 -
按
Add
按钮。 -
从网络类型列表中选择
Ethernet
,然后按 Enter 。 - 可选:为要创建的 NetworkManager 配置文件输入一个名称。
-
在
Device
字段中输入网络设备名称。 在
IPv4 configuration
和IPv6 configuration
区中配置 IPv4和 IPv6 地址设置:-
按
Automatic
按钮,然后从显示的列表中选择Manual
。 -
按您要配置的协议旁边的
Show
按钮来显示其他字段。 按
Addresses
旁边的Add
按钮,然后输入 IP 地址和无类别域间路由(CIDR)格式的子网掩码。如果没有指定子网掩码,NetworkManager 会为 IPv4 地址设置
/32
子网掩码,为 IPv6 地址设置/64
子网掩码。- 输入默认网关的地址。
-
按
DNS servers
旁边的Add
按钮,并输入 DNS 服务器地址。 -
按
Search domains
旁边的Add
按钮,并输入 DNS 搜索域。
图 2.1. 具有静态 IP 地址设置的以太网连接示例
-
按
-
按
OK
按钮来创建并自动激活新连接。 -
按
Back
按钮返回到主菜单。 -
选择
Quit
,然后按 Enter 来关闭nmtui
应用程序。
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者也存在于其它连接到同一交换机的主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤并替换有缺陷的电缆和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅 NetworkManager 服务重启后复制连接。
2.4. 使用 nmstatectl 配置带有静态 IP 地址的以太网连接
要使用 Nmstate API 配置以太网连接,请使用 nmstatectl
工具。
例如,以下步骤使用以下设置为 enp7s0
设备创建 NetworkManager 连接配置集:
-
静态 IPv4 地址 -
192.0.2.1
,子网掩码为/24
-
静态 IPv6 地址 -
2001:db8:1::1
,子网掩码为/64
-
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
nmstatectl
工具确保设置配置后,结果与配置文件匹配。如果有任何失败,nmstatectl
会自动回滚更改以避免系统处于不正确的状态。
该流程以 YAML 格式定义接口配置。或者,您也可以以 JSON 格式指定配置:
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
-
nmstate
软件包已安装。
步骤
创建一个 YAML 文件,例如,包含以下内容的
~/create-ethernet-profile.yml
:--- interfaces: - name: enp7s0 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: enp7s0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: enp7s0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
将设置应用到系统:
# nmstatectl apply ~/create-ethernet-profile.yml
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected enp7s0
显示连接配置集的所有设置:
# nmcli connection show enp7s0 connection.id: enp7s0 connection.uuid: b6cdfa1c-e4ad-46e5-af8b-a75f06b79f76 connection.stable-id: -- connection.type: 802-3-ethernet connection.interface-name: enp7s0 ...
以 YAML 格式显示连接设置:
# nmstatectl show enp7s0
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory
2.5. 使用带有接口名称的网络 RHEL 系统角色,使用静态 IP 地址配置以太网连接
您可以使用 network
RHEL 系统角色远程配置以太网连接。
例如,以下步骤使用以下设置为 enp7s0
设备创建 NetworkManager 连接配置集:
-
静态 IPv4 地址 -
192.0.2.1
和/24
子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
- 服务器配置中有一个物理或者虚拟以太网设备。
- 受管节点使用 NetworkManager 配置网络。
步骤
创建包含以下内容的 playbook 文件,如
~/ethernet-static-IP.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP include_role: name: rhel-system-roles.network vars: network_connections: - name: enp7s0 interface_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 state: up
运行 playbook:
# ansible-playbook ~/ethernet-static-IP.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
2.6. 使用带有设备路径的网络 RHEL 系统角色使用静态 IP 地址配置以太网连接
您可以使用 network
RHEL 系统角色远程配置以太网连接。
您可以使用以下命令识别设备路径:
# udevadm info /sys/class/net/<device_name> | grep ID_PATH=
例如,以下步骤会为与 PCI ID 0000:00:0[1-3].0
表达式匹配的设备创建 NetworkManager 连接配置集,但没有 0000:00:02.0
:
-
静态 IPv4 地址 -
192.0.2.1
和/24
子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
- 服务器配置中有一个物理或者虚拟以太网设备。
- 受管节点使用 NetworkManager 配置网络。
步骤
创建包含以下内容的 playbook 文件,如
~/ethernet-static-IP.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP include_role: name: 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
本例中的
match
参数定义了 Ansible 将剧本应用到与 PCI ID0000:00:0[1-3].0
匹配的设备,但没有0000:00:02.0
设备。有关可以使用的特殊修饰符和通配符的详情,请查看/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件中的match
参数描述。运行 playbook:
# ansible-playbook ~/ethernet-static-IP.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
2.7. 使用 nmcli 配置带有动态 IP 地址的以太网连接
要在命令行中配置以太网连接,请使用 nmcli
实用程序。对于具有动态 IP 地址设置的连接,NetworkManager 会从 DHCP 服务器请求 IP 设置。
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器。
流程
为以太网连接添加新的 NetworkManager 连接配置集:
# nmcli connection add con-name Example-Connection ifname enp7s0 type ethernet
(可选)在使用
Example-Connection
配置文件时,更改 NetworkManager 发送给 DHCP 服务器的主机名:# nmcli connection modify Example-Connection ipv4.dhcp-hostname Example ipv6.dhcp-hostname Example
(可选)在使用
Example-Connection
配置文件时,更改 NetworkManager 发送给 IPv4 DHCP 服务器的客户端 ID:# nmcli connection modify Example-Connection ipv4.dhcp-client-id client-ID
请注意,对于 IPv6 ,没有
dhcp-client-id
参数。要为 IPv6 创建一个标识符,请配置dhclient
服务。
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者也存在于其它连接到同一交换机的主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤并替换有缺陷的电缆和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅 NetworkManager 服务重启后复制连接。
其他资源
-
dhclient(8)
手册页 -
nm-settings(5)
-
nmcli(1)
手册页 - 配置 NetworkManager 以避免使用特定配置集提供默认网关
2.8. 使用 nmcli 互动编辑器配置带有动态 IP 地址的以太网连接
您可以使用 nmcli
工具的交互模式在命令行中配置以太网连接。对于具有动态 IP 地址设置的连接,NetworkManager 会从 DHCP 服务器请求 IP 设置。
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器。
流程
要为以太网连接添加新的 NetworkManager 连接配置集并启动互动模式,请输入:
# nmcli connection edit type ethernet con-name Example-Connection
设置网络接口:
nmcli> set connection.interface-name enp7s0
(可选)在使用
Example-Connection
配置文件时,更改 NetworkManager 发送给 DHCP 服务器的主机名:nmcli> set ipv4.dhcp-hostname Example nmcli> set ipv6.dhcp-hostname Example
(可选)在使用
Example-Connection
配置文件时,更改 NetworkManager 发送给 IPv4 DHCP 服务器的客户端 ID:nmcli> set ipv4.dhcp-client-id client-ID
请注意,对于 IPv6 ,没有
dhcp-client-id
参数。要为 IPv6 创建一个标识符,请配置dhclient
服务。保存并激活连接:
nmcli> save persistent Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection. Do you still want to save? (yes/no) [yes] yes
保留为互动模式:
nmcli> quit
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者也存在于其它连接到同一交换机的主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤并替换有缺陷的电缆和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅 NetworkManager 服务重启后复制连接。
其他资源
-
nm-settings(5)
手册页 -
nmcli(1)
手册页 - 配置 NetworkManager 以避免使用特定配置集提供默认网关
2.9. 使用 nmtui 配置带有动态 IP 地址的以太网连接
nmtui
应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui
在没有图形界面的主机上配置具有动态 IP 地址的以太网连接。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 Space 选择并取消选择复选框。
前提条件
- 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器。
流程
如果您不知道要在连接中使用的网络设备名称,显示可用的设备:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- ...
启动
nmtui
:# nmtui
-
选择
Edit a connection
,并按 Enter。 -
按
Add
按钮。 -
从网络类型列表中选择
Ethernet
,然后按 Enter 。 - 可选:为要创建的 NetworkManager 配置文件输入一个名称。
-
在
Device
字段中输入网络设备名称。 按
OK
按钮来创建并自动激活新连接。-
按
Back
按钮返回到主菜单。 -
选择
Quit
,然后按 Enter 来关闭nmtui
应用程序。
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
故障排除
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者也存在于其它连接到同一交换机的主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤并替换有缺陷的电缆和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅 NetworkManager 服务重启后复制连接。
2.10. 使用 nmstatectl 配置带有动态 IP 地址的以太网连接
要使用 Nmstate API 配置以太网连接,请使用 nmstatectl
工具。对于具有动态 IP 地址设置的连接,NetworkManager 会从 DHCP 服务器请求 IP 设置。
nmstatectl
工具确保设置配置后,结果与配置文件匹配。如果有任何失败,nmstatectl
会自动回滚更改以避免系统处于不正确的状态。
该流程以 YAML 格式定义接口配置。或者,您也可以以 JSON 格式指定配置:
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器。
-
nmstate
软件包已安装。
步骤
创建一个 YAML 文件,例如,包含以下内容的
~/create-ethernet-profile.yml
:--- 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
将设置应用到系统:
# nmstatectl apply ~/create-ethernet-profile.yml
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected enp7s0
显示连接配置集的所有设置:
# nmcli connection show enp7s0 connection.id: enp7s0 connection.uuid: b6cdfa1c-e4ad-46e5-af8b-a75f06b79f76 connection.stable-id: -- connection.type: 802-3-ethernet connection.interface-name: enp7s0 ...
以 YAML 格式显示连接设置:
# nmstatectl show enp7s0
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory
2.11. 使用带有接口名称的网络 RHEL 系统角色,使用动态 IP 地址配置以太网连接
您可以使用 network
RHEL 系统角色远程配置以太网连接。对于具有动态 IP 地址设置的连接,NetworkManager 会从 DHCP 服务器请求 IP 设置。
在 Ansible 控制节点上执行此步骤。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
- 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器
- 受管节点使用 NetworkManager 配置网络。
步骤
创建包含以下内容的 playbook 文件,如
~/ethernet-dynamic-IP.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with dynamic IP include_role: name: rhel-system-roles.network vars: network_connections: - name: enp7s0 interface_name: enp7s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
运行 playbook:
# ansible-playbook ~/ethernet-dynamic-IP.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
2.12. 使用带有设备路径的网络 RHEL 系统角色使用动态 IP 地址配置以太网连接
您可以使用 network
RHEL 系统角色远程配置以太网连接。对于具有动态 IP 地址设置的连接,NetworkManager 会从 DHCP 服务器请求 IP 设置。
您可以使用以下命令识别设备路径:
# udevadm info /sys/class/net/<device_name> | grep ID_PATH=
在 Ansible 控制节点上执行此步骤。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
- 服务器配置中有一个物理或者虚拟以太网设备。
- 网络中有 DHCP 服务器。
- 受管主机使用 NetworkManager 配置网络。
步骤
创建包含以下内容的 playbook 文件,如
~/ethernet-dynamic-IP.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with dynamic IP include_role: name: 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
本例中的
match
参数定义了 Ansible 将剧本应用到与 PCI ID0000:00:0[1-3].0
匹配的设备,但没有0000:00:02.0
设备。有关可以使用的特殊修饰符和通配符的详情,请查看/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件中的match
参数描述。运行 playbook:
# ansible-playbook ~/ethernet-dynamic-IP.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
2.13. 使用 control-center 配置以太网连接
以太网连接是在物理机或虚拟机中最常用的连接类型。如果您将 Red Hat Enterprise Linux 与图形界面搭配使用,您可以在 GNOME control-center
中配置此连接类型。
请注意,control-center
不支持与 nm-connection-editor
应用程序或 nmcli
实用程序一样多的配置选项。
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
- 已安装了 GNOME。
步骤
-
按 Super 键,输入
Settings
,然后按 Enter 键。 -
在左侧导航中选择
Network
。 -
点击
Wired
条目旁边的 + 按钮来创建新配置文件。 -
可选:在
Identity
选项卡中为连接设置名称。 在
IPv4
选项卡中,配置 IPv4 设置。例如,选择方法Manual
,设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器:在
IPv6
选项卡中,配置 IPv6 设置。例如,选择方法Manual
,设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器:-
点 Add 按钮保存连接。GNOME
control-center
会自动激活连接。
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
故障排除步骤
- 验证网线是否插入到主机和交换机。
- 检查链路失败是否只存在于此主机上,或者也存在于其它连接到同一交换机的主机上。
- 验证网络电缆和网络接口是否如预期工作。执行硬件诊断步骤并替换有缺陷的电缆和网络接口卡。
- 如果磁盘中的配置与设备中的配置不匹配,则启动或重启 NetworkManager 会创建一个代表该设备的配置的内存连接。有关详情以及如何避免此问题,请参阅 NetworkManager 服务重启后复制连接。
2.14. 使用 nm-connection-editor 配置以太网连接
以太网连接是在物理或者虚拟服务器中最常用的连接类型。如果您将 Red Hat Enterprise Linux 与图形界面搭配使用,您可以使用 nm-connection-editor
应用程序配置此连接类型。
先决条件
- 服务器配置中有一个物理或者虚拟以太网设备。
- 已安装了 GNOME。
流程
打开终端窗口,输入:
$ nm-connection-editor
- 点 + 按钮添加新连接。
-
选择
Ethernet
类型,然后单击 Create。 在
General
选项卡中:要在系统启动时或者重启
NetworkManager
服务时自动启用此连接:-
选择
Connect automatically with priority
。 可选:更改
Connect automatically with priority
旁边的优先级值。如果同一设备有多个连接配置集,NetworkManager 只启用一个配置集。默认情况下,NetworkManager 激活启用了自动连接的最后使用的配置集。但是,如果您在配置集中设置了优先级值,NetworkManager 会以最高优先级激活配置集。
-
选择
-
如果配置文件应该只对创建连接配置文件的用户可用,请清除
All users may connect to this network
复选框。
在
Ethernet
选项卡中,选择一个设备,还可以选择与以太网相关的其他设置。在
IPv4 Settings
选项卡中,配置 IPv4 设置。例如,设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器:在
IPv6 设置
选项卡上,配置 IPv6 设置。例如,设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器:- 保存连接。
-
关闭
nm-connection-editor
。
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet connected Example-Connection
使用
ping
程序来验证这个主机是否可以向其它主机发送数据包:# ping host_name_or_IP_address
2.15. 更改 NetworkManager 的 DHCP 客户端
默认情况下,NetworkManager 使用其内部的 DHCP 客户端。但是,如果您需要不提供内置客户端的 DHCP 客户端,您也可以将 NetworkManager 配置为使用 dhclient
。
请注意,RHEL 不提供 dhcpcd
,因此 NetworkManager 无法使用这个客户端。
流程
使用以下内容创建
/etc/NetworkManager/conf.d/dhcp-client.conf
文件:[main] dhcp=dhclient
您可以对
internal
(默认)或dhclient
设置dhcp
参数。如果对
dhclient
设置dhcp
参数,请安装dhcp-client
软件包:# yum install dhcp-client
重启 NetworkManager:
# systemctl restart NetworkManager
请注意,重启会临时中断所有网络连接。
验证
在
/var/log/messages
日志文件中搜索类似于如下的条目:Apr 26 09:54:19 server NetworkManager[27748]: <info> [1650959659.8483] dhcp-init: Using DHCP client 'dhclient'
此日志条目确认 NetworkManager 使用
dhclient
作为 DHCP 客户端。
其他资源
-
NetworkManager.conf(5)
man page
2.16. 配置 NetworkManager 连接的 DHCP 行为
DHCP 客户端在每次连接到网络时都从 DHCP 服务器请求动态 IP 地址和对应配置信息。
当您将连接配置为从 DHCP 服务器检索 IP 地址时,网络管理器(NetworkManager)从 DHCP 服务器请求 IP 地址。默认情况下,客户端会等待 45 秒时间完成此请求。当 DHCP
连接启动时,dhcp 客户端会从 DHCP
服务器请求 IP 地址。
先决条件
- 在主机上配置了使用 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-retries
属性中设置的值尝试多次激活连接。默认值为4
。 - 如果连接仍然无法获得 DHCP 地址,则自动激活会失败。请注意,5 分钟后,自动连接过程会再次启动,从 DHCP 服务器获取 IP 地址。
-
如果启用了连接的
可选:配置如果网络管理器(NetworkManager)在超时前没有接收 IPv6 地址时的行为:
# nmcli connection modify connection_name ipv6.may-fail value
其他资源
-
nm-settings(5)
手册页
2.17. 按接口名称使用单一连接配置文件配置多个以太网接口
在大多数情况下,一个连接配置文件包含一个网络设备的设置。但是,当您在连接配置文件中设置接口名称时,NetworkManager 也支持通配符。如果主机在具有动态 IP 地址分配的以太网之间漫游,则您可以使用此功能创建可用于多个以太网接口的单一连接配置文件。
先决条件
- 服务器配置中存在多个物理或虚拟以太网设备。
- 网络中有 DHCP 服务器。
- 主机上不存在连接配置文件。
步骤
添加可应用于以
enp
开头的所有接口名称的连接配置文件:# nmcli connection add con-name Example connection.multi-connect multiple match.interface-name enp* type ethernet
验证
显示单个连接配置文件的所有设置:
# nmcli connection show Example connection.id: Example ... connection.multi-connect: 3 (multiple) match.interface-name:
enp*
...3
表示同时在连接配置集上活跃的接口数量,而不是连接配置文件中的网络接口数量。连接配置文件使用与match.interface-name
参数中的模式匹配的所有设备,因此连接配置文件具有相同的通用唯一识别符(UUID)。显示连接的状态:
# nmcli connection show NAME UUID TYPE DEVICE ... Example 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp7s0 Example 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp8s0 Example 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp9s0
其他资源
-
nmcli(1)
手册页 -
nm-settings(5)
手册页
2.18. 使用 PCI ID 为多个以太网接口配置一个连接配置文件
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 Example
验证
显示连接的状态:
# nmcli connection show NAME UUID TYPE DEVICE Example 9cee0958-512f-4203-9d3d-b57af1d88466 ethernet enp7s0 Example 9cee0958-512f-4203-9d3d-b57af1d88466 ethernet enp8s0 ...
显示连接配置集的所有设置:
# nmcli connection show Example connection.id: Example ... connection.multi-connect: 3 (multiple) match.path: pci-0000:07:00.0,pci-0000:08:00.0 ...
此连接配置文件使用 PCI ID 与
match.path
参数中的模式匹配的所有设备,因此连接配置文件具有相同的全局唯一标识符(UUID)。
其他资源
-
nmcli(1)
手册页 -
nm-settings(5)
手册页
第 3 章 配置网络绑定
网络绑定是一种组合或聚合物理和虚拟网络接口的方法,以提供高吞吐量或冗余的逻辑接口。在绑定中,内核只处理所有操作。您可以在不同类型的设备中创建绑定,如以太网设备或 VLAN。
Red Hat Enterprise Linux 为管理员提供不同的选项来配置团队设备。例如:
-
使用
nmcli
使用命令行配置绑定连接。 - 通过 RHEL web 控制台使用 Web 浏览器配置绑定连接。
-
使用
nmtui
在基于文本的用户界面中配置绑定连接。 -
使用
nm-connection-editor
应用程序在图形界面中配置绑定连接。 -
使用
nmstatectl
通过 Nmstate API 配置绑定连接。 - 使用 RHEL 系统角色在一个或多个主机上自动绑定配置。
3.1. 了解网络绑定
网络绑定(network bonding)是组合或者整合网络接口的方法,以便提供一个高吞吐量或冗余的逻辑接口。
active-backup
、balance-tlb
和 balance-alb
模式不需要网络交换机的任何具体配置。然而,其他绑定模式需要配置交换机来聚合链接。例如,对于模式 0、2 和 3,Cisco 交换机需要 EtherChannel
,但对于模式 4,需要链接聚合控制协议(LACP)和 EtherChannel
。详情请查看您的交换机文档。
某些网络绑定的功能,比如故障切换机制,不支持不通过网络交换机的直接电缆连接。详情请查看是否支持直接连接的绑定?KCS 解决方案。
3.2. 了解控制器和端口接口的默认行为
在使用 NetworkManager
服务管理或排除团队或绑定端口接口故障时,请考虑以下默认行为:
- 启动控制器接口不会自动启动端口接口。
- 启动端口接口总会启动控制器接口。
- 停止控制器接口也会停止端口接口。
- 没有端口的控制器可以启动静态 IP 连接。
- 没有端口的控制器在启动 DHCP 连接时会等待端口。
- 当您添加具有载体的端口时,等待端口且具有 DHCP 连接的控制器会完成。
- 当您添加不具有载体的端口时,等待端口且具有 DHCP 连接的控制器将继续等待。
3.3. 网络团队和绑定功能的比较
了解网络团队和网络绑定支持的功能:
功能 | 网络绑定 | 网络团队 |
---|---|---|
广播 Tx 策略 | 是 | 是 |
轮询 Tx 策略 | 是 | 是 |
Active-backup Tx 策略 | 是 | 是 |
LACP(802.3ad)支持 | 是(仅活动) | 是 |
基于 hash 的 Tx 策略 | 是 | 是 |
用户可以设置哈希功能 | 否 | 是 |
TX 负载均衡支持(TLB) | 是 | 是 |
LACP 哈希端口选择 | 是 | 是 |
LACP 支持的负载均衡 | 否 | 是 |
ethtool 链接监控 | 是 | 是 |
ARP 链路监控 | 是 | 是 |
NS/NA(IPv6)链路监控 | 否 | 是 |
端口启动/关闭延时 | 是 | 是 |
端口优先级和粘性("主要" 选项增强) | 否 | 是 |
独立的每个端口链路监控设置 | 否 | 是 |
多个链路监控设置 | 有限 | 是 |
Lockless Tx/Rx 路径 | 否(rwlock) | 是(RCU) |
VLAN 支持 | 是 | 是 |
用户空间运行时控制 | 有限 | 是 |
用户空间中的逻辑 | 否 | 是 |
可扩展性 | 难 | 易 |
模块化设计 | 否 | 是 |
性能开销 | 低 | 非常低 |
D-Bus 接口 | 否 | 是 |
多设备堆栈 | 是 | 是 |
使用 LLDP 时零配置 | 否 | (在计划中) |
NetworkManager 支持 | 是 | 是 |
3.4. 上游交换配置取决于绑定模式
根据绑定模式,将以下设置应用到上游交换机:
绑定模式 | 交换机上的配置 |
---|---|
| 需要启用静态的 Etherchannel(未启用 LACP 协商) |
| 需要可自主端口 |
| 需要启用静态的 Etherchannel(未启用 LACP 协商) |
| 需要启用静态的 Etherchannel(未启用 LACP 协商) |
| 需要启用 LACP 协商的 Etherchannel |
| 需要可自主端口 |
| 需要可自主端口 |
有关在交换机中配置这些设置,请查看交换机文档。
3.5. 使用 nmcli 配置网络绑定
要在命令行中配置网络绑定,请使用 nmcli
工具。
先决条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作绑定的端口,必须在服务器中安装物理或者虚拟以太网设备。
要使用 team、bridge 或 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 device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet disconnected -- enp8s0 ethernet disconnected -- bridge0 bridge connected bridge0 bridge1 bridge connected bridge1 ...
在本例中:
-
没有配置
enp7s0
和enp8s0
。要将这些设备用作端口,请在下一步中添加连接配置集。 -
bridge0
和bridge1
都有现有的连接配置文件。要将这些设备用作端口,请在下一步中修改其配置集。
-
没有配置
为绑定分配接口:
如果没有配置您要分配给绑定的接口,为其创建新的连接配置集:
# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp7s0 master bond0 # nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname enp8s0 master bond0
这些命令为
enp7s0
和enp8s0
创建配置文件,并将它们添加到bond0
连接中。为绑定分配现有连接配置集:
将这些连接的
master
参数设置为bond0
:# nmcli connection modify bridge0 master bond0 # nmcli connection modify bridge1 master bond0
这些命令将名为
bridge0
和bridge1
的现有连接配置文件分配给bond0
连接。重新激活连接:
# nmcli connection up bridge0 # nmcli connection up bridge1
配置 IPv4 设置:
要将这个绑定设备用作其它设备的端口,请输入:
# nmcli connection modify bond0 ipv4.method disabled
- 要使用 DHCP,不需要任何操作。
要为
bond0
连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify bond0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
配置 IPv6 设置:
要将这个绑定设备用作其它设备的端口,请输入:
# nmcli connection modify bond0 ipv6.method disabled
- 要使用 DHCP,不需要任何操作。
要为
bond0
连接设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify bond0 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
可选:如果要在绑定端口上设置任何参数,请使用以下命令:
# nmcli connection modify bond0-port1 bond-port.<parameter> <value>
激活连接:
# nmcli connection up bond0
验证端口是否已连接,并且
CONNECTION
列是否显示端口的连接名称:# nmcli device DEVICE TYPE STATE CONNECTION ... enp7s0 ethernet connected bond0-port1 enp8s0 ethernet connected bond0-port2
当您激活连接的任何端口时,NetworkManager 也激活绑定,但不会激活它的其它端口。您可以配置 Red Hat Enterprise Linux 在启用绑定时自动启用所有端口:
启用绑定连接的
connection.autoconnect-slaves
参数:# nmcli connection modify bond0 connection.autoconnect-slaves 1
重新激活桥接:
# nmcli connection up bond0
验证
从主机中临时删除网络电缆。
请注意,无法使用软件工具正确测试链路失败事件。停用连接的工具(如
nmcli
),只显示绑定驱动程序可以处理端口配置的更改,而不是实际的链接失败事件。显示绑定状态:
# cat /proc/net/bonding/bond0
3.6. 使用 RHEL web 控制台配置网络绑定
如果您希望使用基于 Web 浏览器的界面管理网络设置,请使用 RHEL web 控制台配置网络绑定。
先决条件
- 已登陆到 RHEL web 控制台。
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作绑定的成员,必须在服务器中安装物理或者虚拟以太网设备。
要将 team、bridge 或 VLAN 设备用作绑定成员,请预先创建它们,如:
流程
-
在屏幕左侧的导航中选择
Networking
选项卡。 -
在
Interfaces
部分点 Add bond。 - 输入您要创建的绑定设备名称。
- 选择应该是绑定成员的接口。
选择绑定模式。
如果您选择
Active backup
,Web 控制台会显示额外的Primary
字段,您可以在其中选择首选的活动设备。-
设置链路监控模式。例如,当您使用
Adaptive 负载均衡
模式时,将它设置为ARP
。 可选:调整监控间隔、链接延迟和连接延迟设置。通常,您只需要更改默认值以进行故障排除。
- 点应用。
默认情况下,绑定使用动态 IP 地址。如果要设置静态 IP 地址:
-
在
Interfaces
部分点绑定的名称。 -
点您要配置的协议旁的
Edit
。 -
选择
Addresses
旁的Manual
,并输入 IP 地址、前缀和默认网关。 -
在
DNS
部分,点 + 按钮,并输入 DNS 服务器的 IP 地址。重复此步骤来设置多个 DNS 服务器。 -
在
DNS search domains
部分中,点 + 按钮并输入搜索域。 如果接口需要静态路由,请在
Routes
部分配置它们。- 点 应用
-
在
验证
在屏幕左侧的导航中选择
Networking
选项卡,并检查接口上是否有传入和传出流量:从主机中临时删除网络电缆。
请注意,无法使用软件工具正确测试链路失败事件。取消激活连接的工具(如 Web 控制台)只显示处理成员配置更改且没有实际链路失败事件的能力。
显示绑定状态:
# cat /proc/net/bonding/bond0
3.7. 使用 nmtui 配置网络绑定
nmtui
应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui
在没有图形界面的主机上配置网络绑定。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 Space 选择并取消选择复选框。
先决条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作绑定的端口,必须在服务器中安装物理或者虚拟以太网设备。
流程
如果您不知道您要在其上配置网络绑定的网络设备名称,请显示可用的设备:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
启动
nmtui
:# nmtui
-
选择
Edit a connection
,并按 Enter。 -
按
Add
按钮。 -
从网络类型列表中选择
Bond
,然后按 Enter 。 - 可选:为要创建的 NetworkManager 配置文件输入一个名称。
-
在
Device
字段中输入要创建的绑定设备名称。 为要创建的绑定添加端口:
-
按
Slaves
列表旁边的Add
按钮。 -
选择您要作为端口添加到绑定的接口类型,例如
Ethernet
。 - 可选:为这个绑定端口输入要创建的 NetworkManager 配置文件的名称。
-
在
Device
字段中输入端口的设备名称。 按
OK
按钮返回到绑定设置窗口。图 3.1. 将以太网设备作为端口添加到绑定
- 重复这些步骤,来向绑定添加更多的端口。
-
按
-
设置绑定模式。根据您设置的值,
nmtui
会显示与所选模式相关的设置的额外字段。 根据您的环境,相应地在
IPv4 configuration
和IPv6 configuration
区中配置 IP 地址。为此,请按Automatic
按钮并选择:-
Disabled
,如果绑定不需要 IP 地址。 -
Automatic
,如果 DHCP 服务器为绑定动态分配一个 IP 地址。 Manual
,如果网络需要静态 IP 地址设置。在这种情况下,您必须填写更多字段:-
按您要配置的协议旁边的
Show
按钮来显示其他字段。 按
Addresses
旁边的Add
按钮,然后输入 IP 地址和无类别域间路由(CIDR)格式的子网掩码。如果没有指定子网掩码,NetworkManager 会为 IPv4 地址设置
/32
子网掩码,为 IPv6 地址设置/64
子网掩码。- 输入默认网关的地址。
-
按
DNS servers
旁边的Add
按钮,并输入 DNS 服务器地址。 -
按
Search domains
旁边的Add
按钮,并输入 DNS 搜索域。
-
按您要配置的协议旁边的
图 3.2. 具有静态 IP 地址设置的绑定连接的示例
-
-
按
OK
按钮来创建并自动激活新连接。 -
按
Back
按钮返回到主菜单。 -
选择
Quit
,然后按 Enter 来关闭nmtui
应用程序。
验证
从主机中临时删除网络电缆。
请注意,无法使用软件工具正确测试链路失败事件。停用连接的工具(如
nmcli
),只显示绑定驱动程序可以处理端口配置的更改,而不是实际的链接失败事件。显示绑定状态:
# cat /proc/net/bonding/bond0
3.8. 使用 nm-connection-editor 配置网络绑定
如果您将 Red Hat Enterprise Linux 与图形界面搭配使用,您可以使用 nm-connection-editor
应用程序配置网络绑定。
请注意:nm-connection-editor
只能向绑定添加新端口。要使用现有连接配置集作为端口,请使用 nmcli
实用程序创建绑定,如使用 nmcli 配置网络绑定 中所述。
先决条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作绑定的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 要使用 team、bond 或 VLAN 设备作为绑定的端口,请确保这些设备还没有配置。
步骤
打开一个终端,输入
nm-connection-editor
:$ nm-connection-editor
- 点击 + 按钮来添加一个新的连接。
- 选择 Bond 连接类型,然后单击 Create。
在 Bond 选项卡中:
- 可选:在 Interface name 字段中设置绑定接口的名称。
点 Add 按钮将网络接口作为端口添加到绑定。
- 选择接口的连接类型。例如,为有线连接选择 Ethernet。
- 可选:为端口设置连接名称。
- 如果您是为以太网设备创建连接配置集,打开 Ethernet 选项卡,在 Device 字段中选择您要添加为绑定的端口。如果您选择了不同的设备类型,请相应地进行配置。请注意,您只能在没有配置的绑定中使用以太网接口。
- 点 Save。
对您要添加到绑定的每个接口重复前面的步骤:
- 可选:设置其他选项,如介质独立接口(MII)监控间隔。
在 IPv4 设置和 IPv 6 设置 标签页中配置 IP 地址设置:
- 要将这个网桥设备用作其他设备的端口,请将 Method 字段设置为 Disabled。
- 要使用 DHCP,请将 Method 字段保留为默认值 Automatic (DHCP)。
要使用静态 IP 设置,请将 Method 字段设置为 Manual,并相应地填写字段:
- 点 Save。
-
关闭
nm-connection-editor
。
验证
从主机中临时删除网络电缆。
请注意,无法使用软件工具正确测试链路失败事件。停用连接的工具(如
nmcli
),只显示绑定驱动程序可以处理端口配置的更改,而不是实际的链接失败事件。显示绑定状态:
# cat /proc/net/bonding/bond0
3.9. 使用 nmstatectl 配置网络绑定
要使用 Nmstate API 配置网络绑定,请使用 nmstatectl
工具。
例如,以下步骤使用以下设置在 NetworkManager 中创建绑定:
-
绑定中的网络接口:
enp1s0
和enp7s0
-
模式:
active-backup
-
静态 IPv4 地址:
192.0.2.1
,子网掩码为/24
-
静态 IPv6 地址:
2001:db8:1::1
子网掩码为/64
-
IPv4 默认网关:
192.0.2.254
-
IPv6 默认网关:
2001:db8:1::fffe
-
IPv4 DNS 服务器:
192.0.2.200
-
IPv6 DNS 服务器:
2001:db8:1::ffbb
-
DNS 搜索域:
example.com
先决条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作绑定中的端口,必须在服务器中安装物理或者虚拟以太网设备。
-
要在绑定中使用团队、网桥或 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 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 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: bond0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
将设置应用到系统:
# nmstatectl apply ~/create-bond.yml
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION bond0 bond connected bond0
显示连接配置集的所有设置:
# nmcli connection show bond0 connection.id: bond0 connection.uuid: 79cbc3bd-302e-4b1f-ad89-f12533b818ee connection.stable-id: -- connection.type: bond connection.interface-name: bond0 ...
以 YAML 格式显示连接设置:
# nmstatectl show bond0
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory
3.10. 使用 network RHEL 系统角色配置网络绑定
您可以使用 network
RHEL 系统角色来配置 Linux 绑定。例如,使用它来在 active-backup 模式中配置使用两个以太网设备的网络绑定,并设置 IPv4 和 IPv6 地址、默认网关和 DNS 配置。
在绑定上设置 IP 配置,而不是在 Linux 绑定的端口上设置。
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
步骤
创建包含以下内容的 playbook 文件,如
~/bond-ethernet.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure a network bond that uses two Ethernet ports include_role: name: rhel-system-roles.network vars: network_connections: # Define the bond profile - name: bond0 type: bond interface_name: bond0 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 bond: mode: active-backup state: up # Add an Ethernet profile to the bond - name: bond0-port1 interface_name: enp7s0 type: ethernet controller: bond0 state: up # Add a second Ethernet profile to the bond - name: bond0-port2 interface_name: enp8s0 type: ethernet controller: bond0 state: up
运行 playbook:
# ansible-playbook ~/bond-ethernet.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
3.11. 创建网络绑定以便在不中断 VPN 的情况下在以太网和无线连接间进行切换
将工作站连接到公司网络的 RHEL 用户通常会使用 VPN 访问远程资源。然而,如果工作站在以太网和 Wi-Fi 连接间切换,例如:如果您是从带以太网连接的 docking 站中释放的笔记本电脑,VPN 连接就中断。要避免这个问题,您可以在 active-backup
模式中创建使用以太网和 Wi-Fi 连接的网络绑定。
先决条件
- 主机包含以太网和 Wi-Fi 设备。
已创建以太网和 Wi-Fi 网络管理器连接配置集,且两个连接都可以独立工作。
此流程使用以下连接配置文件来创建名为
bond0
的网络绑定:-
与
enp11s0u1
以太网设备关联的Docking_station
-
Wi-Fi
与wlp1s0
Wi-Fi 设备关联
-
与
流程
在
active-backup
模式中创建一个绑定接口:# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
这个命令将接口和连接配置文件命名为
bond0
。配置绑定的 IPv4 设置:
- 如果您的网络中的 DHCP 服务器为主机分配 IPv4 地址,则不需要任何操作。
如果您的本地网络需要静态 IPv4 地址,请将地址、网络掩码、默认网关、DNS 服务器和 DNS 搜索域设为
bond0
连接:# nmcli connection modify bond0 ipv4.addresses '192.0.2.1/24' # nmcli connection modify bond0 ipv4.gateway '192.0.2.254' # nmcli connection modify bond0 ipv4.dns '192.0.2.253' # nmcli connection modify bond0 ipv4.dns-search 'example.com' # nmcli connection modify bond0 ipv4.method manual
配置绑定的 IPv6 设置:
- 如果您的网络中的路由器或者 DHCP 服务器为主机分配 IPv6 地址,则不需要任何操作。
如果您的本地网络需要静态 IPv6 地址,请将地址、网络掩码、默认网关、DNS 服务器和 DNS 搜索域设为
bond0
连接:# nmcli connection modify bond0 ipv6.addresses '2001:db8:1::1/64' # nmcli connection modify bond0 ipv6.gateway '2001:db8:1::fffe' # nmcli connection modify bond0 ipv6.dns '2001:db8:1::fffd' # nmcli connection modify bond0 ipv6.dns-search 'example.com' # nmcli connection modify bond0 ipv6.method manual
显示连接配置集:
# nmcli connection show NAME UUID TYPE DEVICE Docking_station 256dd073-fecc-339d-91ae-9834a00407f9 ethernet enp11s0u1 Wi-Fi 1f1531c7-8737-4c60-91af-2d21164417e8 wifi wlp1s0 ...
下一步需要连接配置集的名称和以太网设备名称。
为绑定分配以太网连接的配置:
# nmcli connection modify Docking_station master bond0
为绑定分配 Wi-Fi 连接的连接配置集:
# nmcli connection modify Wi-Fi master bond0
如果您的 Wi-Fi 网络使用 MAC 过滤来只允许列表中的 MAC 地址访问网络,请配置 NetworkManager 将活跃端口的 MAC 地址动态分配给绑定:
# nmcli connection modify bond0 +bond.options fail_over_mac=1
使用这个设置时,您必须将 Wi-Fi 设备的 MAC 地址设置为 allow 列表,而不是以太网和 Wi-Fi 设备的 MAC 地址。
将与以太连接关联的设备设置为绑定的主设备:
# nmcli con modify bond0 +bond.options "primary=enp11s0u1"
使用这个设置时,如果可用,绑定总是使用以太网连接。
配置当
bond0
设备激活时,NetworkManager 会自动激活端口:# nmcli connection modify bond0 connection.autoconnect-slaves 1
激活
bond0
连接:# nmcli connection up bond0
验证
显示当前激活的设备,绑定及其端口的状态:
# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active) Primary Slave: enp11s0u1 (primary_reselect always) Currently Active Slave: enp11s0u1 MII Status: up MII Polling Interval (ms): 1 Up Delay (ms): 0 Down Delay (ms): 0 Peer Notification Delay (ms): 0 Slave Interface: enp11s0u1 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:53:00:59:da:b7 Slave queue ID: 0 Slave Interface: wlp1s0 MII Status: up Speed: Unknown Duplex: Unknown Link Failure Count: 2 Permanent HW addr: 00:53:00:b3:22:ba Slave queue ID: 0
其它资源
3.12. 不同的网络绑定模式
Linux 绑定驱动程序提供链路聚合。绑定是并行封装多个网络接口的过程,以提供单个逻辑绑定接口。绑定接口的操作取决于也称为模式的绑定策略。不同的模式提供负载均衡或热待机服务。
存在以下模式:
- Balance-rr (Mode 0)
balance-rr
使用循环算法,它按顺序将数据包从第一个可用端口传输到最后一个端口。这个模式提供负载平衡和容错。这个模式需要切换端口聚合组(也称为 EtherChannel 或类似的端口分组)。EtherChannel 是一个端口链路聚合技术,用于将多个物理以太网链接分组到一个逻辑以太网链接中。
这个模式的缺陷在于它不适用于大量工作负载,以及 TCP 吞吐量或排序数据包交付非常重要。
- Active-backup (Mode 1)
Active-backup
使用策略来确定在绑定中只有一个端口活跃。这个模式提供容错功能,不需要任何交换机配置。如果活动端口失败,则备用端口将变为活动状态。绑定会向网络发送大量地址解析协议 (ARP) 响应。gratuitous ARP 强制执行 ARP 帧的接收器,以更新它们的转发表。
Active-backup
模式传输一个 gratuitous ARP,宣布为主机维护连接的新路径。primary
选项定义绑定接口的首选端口。- Balance-xor (Mode 2)
balance-xor
使用所选传输哈希策略来发送数据包。这个模式提供负载平衡、容错和需要切换配置来设置 Etherchannel 或类似的端口分组。要改变数据包传输和平衡传输,此模式使用
xmit_hash_policy
选项。根据接口上流量的源或目的地,接口需要额外的负载均衡配置。请参阅 xmit_hash_policy bonding 参数。- Broadcast (Mode 3)
广播
使用在所有接口上传输每个数据包的策略。这个模式提供容错,需要交换机配置来设置 EtherChannel 或类似的端口分组。这个模式的缺陷在于它不适用于大量工作负载,以及 TCP 吞吐量或排序数据包交付非常重要。
- 802.3ad (Mode 4)
802.3ad
使用同名的 IEEE 标准动态链路聚合策略。此模式提供容错功能。这个模式需要切换配置来设置链路聚合控制协议 (LACP) 端口分组。这个模式会创建聚合组,它们共享相同的速度和双工设置,并使用活跃聚合器中的所有端口。根据接口上流量的源或目的地,此模式需要额外的负载平衡配置。
默认情况下,传出流量的端口选择取决于传输哈希策略。使用传输哈希策略的
xmit_hash_policy
选项更改端口选择和平衡传输。802.3ad
和Balance-xor
之间的差别是合规性。802.3ad
策略在端口聚合组之间协商 LACP。请参阅 xmit_hash_policy bonding 参数- Balance-tlb (Mode 5)
balance-tlb
使用传输负载均衡策略。这个模式提供容错、负载均衡和建立不需要任何交换机支持的频道绑定。活动端口接收传入流量。如果活动端口失败,另一个则是接管故障端口的 MAC 地址。要确定哪个接口处理传出流量,请使用以下模式之一:
-
值
0
:使用哈希分发策略在不进行负载均衡的情况下分发流量 值
1:
利用负载均衡将流量分配到每个端口使用 bonding 选项
tlb_dynamic_lb=0
,此绑定模式使用xmit_hash_policy
bonding 选项来均衡传输。primary
选项定义绑定接口的首选端口。
-
值
- Balance-alb (Mode 6)
balance-alb
使用自适应负载平衡策略。这个模式提供容错、负载平衡,且不需要任何特殊交换机支持。此模式包含 balance-trans-mit 负载平衡 (
balance-tlb
) 和 IPv4 和 IPv6 流量接收负载均衡。绑定会截获本地系统发送的 ARP 回复,并覆盖绑定中某个端口的源硬件地址。ARP 协商管理接收负载平衡。因此,不同的端口为服务器使用不同的硬件地址。primary
选项定义绑定接口的首选端口。使用 bonding 选项tlb_dynamic_lb=0
,此绑定模式使用xmit_hash_policy
bonding 选项来均衡传输。请参阅 xmit_hash_policy bonding 参数。
其他资源
-
/usr/share/doc/kernel-doc-<version>/Documentation/networking/bonding.rst
由kernel-doc
软件包提供 -
/usr/share/doc/kernel-doc-<version>/Documentation/networking/bonding.txt
由kernel-doc
软件包提供 - 与虚拟机客户机或容器连接的网桥一起使用的绑定模式
- How are the values for different policies in "xmit_hash_policy" bonding parameter calculated?
3.13. xmit_hash_policy bonding 参数
xmit_hash_policy
负载均衡参数在 balance-xor
、802.3ad
、balance-alb
和 balance-tlb
模式中选择节点选择的传输散列策略。如果 tlb_dynamic_lb 参数为 0
,则只适用于模式 5 和 6。此参数可能的值是 layer2
, layer2+3
, layer3+4
, encap2+3
, encap3+4
, 和 vlan+srcmac
。
详情请查看表:
策略或网络层 | Layer2 | Layer2+3 | Layer3+4 | encap2+3 | encap3+4 | VLAN+srcmac |
使用 | 源和目的地 MAC 地址和以太网协议类型的 XOR | 源和目标 MAC 地址和 IP 地址的 XOR | 源和目标端口和 IP 地址的 XOR |
支持的隧道内的目的地 MAC 地址和 IP 地址的 XOR,如虚拟可扩展局域网 (VXLAN)。此模式依赖于 |
受支持的隧道内的目标端口和 IP 地址的 XOR,如 VXLAN。此模式依赖于 | VLAN ID 和源 MAC 厂商和源 MAC 设备的 XOR |
流量放置 | 在同一个底层网络接口上到特定网络对等的所有流量 | 同一底层网络接口上特定 IP 地址的所有流量 | 同一底层网络接口上特定 IP 地址和端口的所有流量 | |||
主要选择 | 如果网络流量在此系统和同一广播域的多个其他系统之间 | 如果此系统和多个其他系统间的网络流量会通过默认网关 | 如果此系统和其他系统之间的网络流量使用相同的 IP 地址,但会经历多个端口 | 封装的流量在源系统和多个其它系统中使用多个 IP 地址 | 封装的流量是源系统和其它使用多个端口号的系统间 | 如果绑定承载来自多个容器或虚拟机 (VM) 的网络流量,它会将其 MAC 地址直接公开给外部网络,如桥接网络,您无法配置模式 2 或模式 4 的交换机。 |
辅助选择 | 如果网络流量主要是此系统和默认网关后面的多个其他系统之间 | 如果网络流量主要是此系统和另一个系统间的 | ||||
Compliant | 802.3ad | 802.3ad | Not 802.3ad | |||
默认策略 | 如果没有提供配置,则这是默认策略 |
对于非 IP 流量,公式与 |
对于非 IP 流量,公式与 |
第 4 章 配置网络团队(team)
网络组是一种组合或聚合物理和虚拟网络接口的方法,以提供高吞吐量或冗余的逻辑接口。在网络团队中,一个小内核模块和一个用户空间服务来处理操作。您可以在不同类型的设备(如以太网设备或 VLAN)中创建网络团队。
Red Hat Enterprise Linux 为管理员提供不同的选项来配置团队设备。例如:
-
使用
nmcli
使用命令行配置团队连接。 - 使用 RHEL web 控制台使用 Web 浏览器配置组连接。
-
使用
nm-connection-editor
应用程序在图形界面中配置组连接。
网络协作在 Red Hat Enterprise Linux 9 中已被弃用。如果您计划将服务器升级到将来的 RHEL 版本,请考虑使用内核绑定驱动程序作为替代方案。详情请参阅 配置网络绑定。
4.1. 了解网络团队
网络团队(network teaming)是一个合并或聚合网络接口的功能,它提供了一个高吞吐量或冗余的逻辑接口。
网络团队使用内核驱动程序来实现对数据包流、用户空间库以及用于其他任务的服务的快速处理。因此,网络团队是一个易扩展的解决方案,来满足负载平衡和冗余的要求。
某些网络团队的功能,比如故障切换机制,不支持不通过网络交换机的直接电缆连接。详情请查看是否支持直接连接的绑定?
4.2. 了解控制器和端口接口的默认行为
在使用 NetworkManager
服务管理或排除团队或绑定端口接口故障时,请考虑以下默认行为:
- 启动控制器接口不会自动启动端口接口。
- 启动端口接口总会启动控制器接口。
- 停止控制器接口也会停止端口接口。
- 没有端口的控制器可以启动静态 IP 连接。
- 没有端口的控制器在启动 DHCP 连接时会等待端口。
- 当您添加具有载体的端口时,等待端口且具有 DHCP 连接的控制器会完成。
- 当您添加不具有载体的端口时,等待端口且具有 DHCP 连接的控制器将继续等待。
4.3. 网络团队和绑定功能的比较
了解网络团队和网络绑定支持的功能:
功能 | 网络绑定 | 网络团队 |
---|---|---|
广播 Tx 策略 | 是 | 是 |
轮询 Tx 策略 | 是 | 是 |
Active-backup Tx 策略 | 是 | 是 |
LACP(802.3ad)支持 | 是(仅活动) | 是 |
基于 hash 的 Tx 策略 | 是 | 是 |
用户可以设置哈希功能 | 否 | 是 |
TX 负载均衡支持(TLB) | 是 | 是 |
LACP 哈希端口选择 | 是 | 是 |
LACP 支持的负载均衡 | 否 | 是 |
ethtool 链接监控 | 是 | 是 |
ARP 链路监控 | 是 | 是 |
NS/NA(IPv6)链路监控 | 否 | 是 |
端口启动/关闭延时 | 是 | 是 |
端口优先级和粘性("主要" 选项增强) | 否 | 是 |
独立的每个端口链路监控设置 | 否 | 是 |
多个链路监控设置 | 有限 | 是 |
Lockless Tx/Rx 路径 | 否(rwlock) | 是(RCU) |
VLAN 支持 | 是 | 是 |
用户空间运行时控制 | 有限 | 是 |
用户空间中的逻辑 | 否 | 是 |
可扩展性 | 难 | 易 |
模块化设计 | 否 | 是 |
性能开销 | 低 | 非常低 |
D-Bus 接口 | 否 | 是 |
多设备堆栈 | 是 | 是 |
使用 LLDP 时零配置 | 否 | (在计划中) |
NetworkManager 支持 | 是 | 是 |
4.4. 了解 teamd 服务、运行程序和 link-watchers
团队服务 teamd
控制团队驱动程序的一个实例。这个驱动的实例添加硬件设备驱动程序实例组成一个网络接口组。团队驱动程序向内核提供一个网络接口,如 team0
。
teamd
服务对所有团队方法实现通用逻辑。这些功能对不同的负载共享和备份方法(如循环)是唯一的,并由称为 runners
的单独的代码单元来实现。管理员以 JavaScript 对象表示法(JSON)格式指定runners ,在创建实例时,JSON 代码被编译到 teamd
实例中。另外,在使用 NetworkManager
时,您可以在 team.runner
参数中设置 runner ,NetworkManager
会自动创建对应的 JSON 代码。
可用的 runner 如下:
-
broadcast
:转换所有端口上的数据。 -
roundrobin
:依次转换所有端口上的数据。 -
activebackup
:转换一个端口上的数据,而其他端口上的数据则作为备份保留。 -
loadbalance
:转换所有具有活跃的 Tx 负载均衡和基于 Berkeley 数据包过滤器(BPF)的 Tx 端口选择器的端口上的数据。 -
random
:转换随机选择的端口上的数据。 -
lacp
:实现 802.3ad 链路聚合控制协议(LACP)。
teamd
服务使用链路监视器来监控从属设备的状态。可用的 link-watchers 如下:
-
ethtool
:libteam
库使用ethtool
工具来监视链接状态的变化。这是默认的 link-watcher。 -
arp_ping
:libteam
库使用arp_ping
工具来监控使用地址解析协议(ARP)的远端硬件地址是否存在。 -
nsna_ping
: 在 IPv6 连接上,libteam
库使用来自 IPv6 邻居发现协议的邻居广告和邻居请求功能来监控邻居接口的存在。
每个 runner 都可以使用任何链接监视器,但 lacp
除外。此 runner 只能使用 ethtool
链接监视器。
4.5. 使用 nmcli 配置网络团队
要在命令行中配置网络团队,请使用 nmcli
实用程序。
网络协作在 Red Hat Enterprise Linux 9 中已被弃用。如果您计划将服务器升级到将来的 RHEL 版本,请考虑使用内核绑定驱动程序作为替代方案。详情请参阅 配置网络绑定。
先决条件
-
已安装
teamd
和NetworkManager-team
软件包。 - 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作组的端口,必须在服务器中安装物理或者虚拟以太网设备并连接到交换机。
要使用 bond、bridge 或 VLAN 设备作为团队的端口,您可以在创建团队时创建这些设备,或者预先创建它们,如下所述:
流程
创建团队接口:
# nmcli connection add type team con-name team0 ifname team0 team.runner activebackup
此命令创建一个使用
activebackup
runner、名为team0
的网络团队。另外,还可设置链接监视器。例如,要在
team0
连接配置文件中设置ethtool
链接监视器:# nmcli connection modify team0 team.link-watchers "name=ethtool"
链路监视器支持不同的参数。要为链路监视器设置参数,请在
name
属性中以空格分隔的方式来指定它们。请注意,name 属性必须用引号括起。例如,要使用ethtool
链接监视器,并将其delay-up
参数设置为2500
毫秒(2.5 秒):# nmcli connection modify team0 team.link-watchers "name=ethtool delay-up=2500"
要设置多个链路监视器,每个都使用特定的参数,不同的连接监视器以逗号分隔。以下示例使用
delay-up
参数设置ethtool
链接监视器,使用source-host
和target-host
参数设置arp_ping
链路监视器:# nmcli connection modify team0 team.link-watchers "name=ethtool delay-up=2, name=arp_ping source-host=192.0.2.1 target-host=192.0.2.2"
显示网络接口,并记录您要添加到团队中的接口名称:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet disconnected -- enp8s0 ethernet disconnected -- bond0 bond connected bond0 bond1 bond connected bond1 ...
在本例中:
-
没有配置
enp7s0
和enp8s0
。要将这些设备用作端口,请在下一步中添加连接配置集。请注意,您只能在没有分配给任何连接的团队中使用以太网接口。 -
bond0
和bond1
已有连接配置文件。要将这些设备用作端口,请在下一步中修改其配置集。
-
没有配置
为团队分配端口接口:
如果没有配置您要分配给团队的接口,为其创建新的连接配置集:
# nmcli connection add type ethernet slave-type team con-name team0-port1 ifname enp7s0 master team0 # nmcli connection add type ethernet slave-type team con-name team0-port2 ifname enp8s0 master team0
.这些命令为
enp7s0
和enp8s0
创建配置文件,并将它们添加到team0
连接中。为团队分配现有连接配置集:
将这些连接的
master
参数设置为team0
:# nmcli connection modify bond0 master team0 # nmcli connection modify bond1 master team0
这些命令将名为
bond0
和bond1
的现有连接配置文件分配给team0
连接。重新激活连接:
# nmcli connection up bond0 # nmcli connection up bond1
配置 IPv4 设置:
要将这个团队设备用作其它设备的端口,请输入:
# nmcli connection modify team0 ipv4.method disabled
- 要使用 DHCP,不需要任何操作。
要为
team0
连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify team0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
配置 IPv6 设置:
要将这个团队设备用作其它设备的端口,请输入:
# nmcli connection modify team0 ipv6.method disabled
- 要使用 DHCP,不需要任何操作。
要为
team0
连接设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify team0 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
激活连接:
# nmcli connection up team0
验证
显示团队状态:
# teamdctl team0 state setup: runner: activebackup ports: enp7s0 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 enp8s0 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: enp7s0
在这个示例中,两个端口都是上线的。
其他资源
- 配置 NetworkManager 以避免使用特定配置集提供默认网关
- 了解 teamd 服务、运行程序和 link-watchers
-
nm-settings(5)
手册页 -
teamd.conf(5)
手册页
4.6. 使用 RHEL web 控制台配置网络团队
如果您希望使用基于 Web 浏览器的界面管理网络设置,请使用 RHEL web 控制台来配置网络团队。
网络协作在 Red Hat Enterprise Linux 9 中已被弃用。如果您计划将服务器升级到将来的 RHEL 版本,请考虑使用内核绑定驱动程序作为替代方案。详情请参阅 配置网络绑定。
先决条件
-
已安装
teamd
和NetworkManager-team
软件包。 - 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作组的端口,必须在服务器中安装物理或者虚拟以太网设备并连接到交换机。
要将 bond、bridge 或 VLAN 设备用作团队的端口,请预先创建它们,如下所述:
步骤
-
在屏幕左侧的导航中选择
Networking
选项卡。 -
在
Interfaces
部分点 Add team。 - 输入您要创建的团队设备名称。
- 选择应该是团队端口的接口。
选择团队的运行程序。
如果您选择
Load balancing
或802.3ad LACP
,Web 控制台会显示额外的Balancer
字段。设置链接监视器:
-
如果您选择
Ethtool
,请设置链接并关闭延迟。 -
如果您设置了
ARP ping
或NSNA ping
,还要设置 ping 间隔并 ping 目标。
-
如果您选择
- 点应用。
默认情况下,团队使用动态 IP 地址。如果要设置静态 IP 地址:
-
在
Interfaces
部分点团队的名称。 -
点您要配置的协议旁的
Edit
。 -
选择
Addresses
旁的Manual
,并输入 IP 地址、前缀和默认网关。 -
在
DNS
部分,点 + 按钮,并输入 DNS 服务器的 IP 地址。重复此步骤来设置多个 DNS 服务器。 -
在
DNS search domains
部分中,点 + 按钮并输入搜索域。 如果接口需要静态路由,请在
Routes
部分配置它们。- 点 应用
-
在
验证
在屏幕左侧的导航中选择
Networking
选项卡,并检查接口上是否有传入和传出流量。显示团队状态:
# teamdctl team0 state setup: runner: activebackup ports: enp7s0 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 enp8s0 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: enp7s0
在这个示例中,两个端口都是上线的。
其他资源
4.7. 使用 nm-connection-editor 配置网络团队
如果您将 Red Hat Enterprise Linux 与图形界面搭配使用,您可以使用 nm-connection-editor
应用程序配置网络团队。
请注意:nm-connection-editor
只能向团队添加新端口。要使用现有连接配置集作为端口,请使用 nmcli
实用程序创建团队,如使用 nmcli 配置网络团队 中所述。
网络协作在 Red Hat Enterprise Linux 9 中已被弃用。如果您计划将服务器升级到将来的 RHEL 版本,请考虑使用内核绑定驱动程序作为替代方案。详情请参阅 配置网络绑定。
先决条件
-
已安装
teamd
和NetworkManager-team
软件包。 - 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作组的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 要使用 team、bond 或 VLAN 设备作为团队的端口,请确保这些设备还没有配置。
步骤
打开一个终端,输入
nm-connection-editor
:$ nm-connection-editor
- 点击 + 按钮来添加一个新的连接。
- 选择 Team 连接类型,然后单击 Create。
在 Team 选项卡中:
- 可选:在 Interface name 字段中设置团队接口的名称。
点 Add 按钮为网络接口添加新连接配置集,并将配置集作为端口添加到团队。
- 选择接口的连接类型。例如,为有线连接选择 Ethernet。
- 可选:为端口设置连接名称。
- 如果您是为以太网设备创建连接配置集,打开 Ethernet 选项卡,在 Device 字段中选择您要添加为团队的端口。如果您选择了不同的设备类型,请相应地进行配置。请注意,您只能在没有分配给任何连接的团队中使用以太网接口。
- 点 Save。
对您要添加到团队的每个接口重复前面的步骤。
点 Advanced 按钮将高级选项设置为团队连接。
- 在 Runner 选项卡中,选择 runner。
- 在 Link Watcher 选项卡中,设置链接监视器及其可选设置。
- 点确定。
在 IPv4 设置和 IPv 6 设置 标签页中配置 IP 地址设置:
- 要将这个网桥设备用作其他设备的端口,请将 Method 字段设置为 Disabled。
- 要使用 DHCP,请将 Method 字段保留为默认值 Automatic (DHCP)。
要使用静态 IP 设置,请将 Method 字段设置为 Manual,并相应地填写字段:
- 点 Save。
-
关闭
nm-connection-editor
。
验证
显示团队状态:
# teamdctl team0 state setup: runner: activebackup ports: enp7s0 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 enp8s0 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: enp7s0
第 5 章 配置 VLAN 标记
Virtual Local Area Network (VLAN) 是物理网络中的一个逻辑网络。当 VLAN 接口通过接口时,VLAN 接口标签带有 VLAN ID 的数据包,并删除返回的数据包的标签。您可以在另一个接口(如以太网、绑定、团队或桥接设备)上创建 VLAN 接口。这些接口被称为父接口
。
Red Hat Enterprise Linux 为管理员提供不同的选项来配置 VLAN 设备。例如:
-
使用
nmcli
使用命令行配置 VLAN 标记。 - 通过 RHEL web 控制台使用 Web 浏览器配置 VLAN 标记。
-
使用
nmtui
在基于文本的用户界面中配置 VLAN 标记。 -
使用
nm-connection-editor
应用程序在图形界面中配置连接。 -
使用
nmstatectl
通过 Nmstate API 配置连接。 - 使用 RHEL 系统角色在一个或多个主机上自动化 VLAN 配置。
5.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=ignore
选项来确保它。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 主机连接到的交换机被配置为支持 VLAN 标签。详情请查看您的交换机文档。
流程
显示网络接口:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet disconnected enp1s0 bridge0 bridge connected bridge0 bond0 bond connected bond0 ...
创建 VLAN 接口。例如,要创建一个使用
enp1s0
作为其父接口,使用 VLAN ID10
标记数据包,名为vlan10
的 VLAN 接口,请输入:# nmcli connection add type vlan con-name vlan10 ifname vlan10 vlan.parent enp1s0 vlan.id 10
请注意,VLAN 必须在范围
0
到4094
之间。默认情况下,VLAN 连接会继承上级接口的最大传输单元(MTU)。另外,还可设置不同的 MTU 值:
# nmcli connection modify vlan10 ethernet.mtu 2000
配置 IPv4 设置:
要将这个 VLAN 设备用作其它设备的端口,请输入:
# nmcli connection modify vlan10 ipv4.method disabled
- 要使用 DHCP,不需要任何操作。
要为
vlan10
连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify vlan10 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.method manual
配置 IPv6 设置:
要将这个 VLAN 设备用作其它设备的端口,请输入:
# nmcli connection modify vlan10 ipv6.method disabled
- 要使用 DHCP,不需要任何操作。
要为
vlan10
连接设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify vlan10 ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.method manual
激活连接:
# nmcli connection up vlan10
验证
验证设置:
# ip -d addr show vlan10 4: vlan10@enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:72:2f:6e brd ff:ff:ff:ff:ff:ff promiscuity 0 vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute vlan10 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::8dd7:9030:6f8e:89e6/64 scope link noprefixroute valid_lft forever preferred_lft forever
其他资源
- 配置 NetworkManager 以避免使用特定配置集提供默认网关
-
nm-settings(5)
手册页
5.2. 使用 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 自动配置在一段时间后失败,接口可能会关闭。
- 主机连接到的交换机被配置为支持 VLAN 标签。详情请查看您的交换机文档。
流程
-
在屏幕左侧的导航中选择
Networking
选项卡。 -
在
Interfaces
部分点 Add VLAN。 - 选择父设备。
- 输入 VLAN ID。
输入 VLAN 设备的名称,或保留自动生成的名称。
- 点应用。
默认情况下,VLAN 设备使用动态 IP 地址。如果要设置静态 IP 地址:
-
点
Interfaces
部分中的 VLAN 设备名称。 -
点您要配置的协议旁的
Edit
。 -
选择
Addresses
旁的Manual
,并输入 IP 地址、前缀和默认网关。 -
在
DNS
部分,点 + 按钮,并输入 DNS 服务器的 IP 地址。重复此步骤来设置多个 DNS 服务器。 -
在
DNS search domains
部分中,点 + 按钮并输入搜索域。 如果接口需要静态路由,请在
Routes
部分配置它们。- 点 应用
-
点
验证
在屏幕左侧的导航中选择
Networking
选项卡,并检查接口上是否有传入和传出流量:
5.3. 使用 nmtui 配置 VLAN 标记
nmtui
应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui
在没有图形界面的主机上配置 VLAN 标签。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 Space 选择并取消选择复选框。
先决条件
- 您计划用作虚拟 VLAN 接口的父接口支持 VLAN 标签。
如果您在绑定接口之上配置 VLAN:
- 绑定的端口是上线的。
-
这个绑定没有使用
fail_over_mac=follow
选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。 -
这个绑定通常不会预期从 DHCP 服务器或 IPv6 自动配置获取 IP 地址。在创建绑定时通过设置
ipv4.method=disable
和ipv6.method=ignore
选项来确保它。否则,如果 DHCP 或 IPv6 自动配置在一段时间后失败,接口可能会关闭。
- 主机连接到的交换机被配置为支持 VLAN 标签。详情请查看您的交换机文档。
步骤
如果您不知道要在其上配置 VLAN 标签的网络设备名称,请显示可用的设备:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unavailable -- ...
启动
nmtui
:# nmtui
-
选择
Edit a connection
,并按 Enter。 -
按
Add
按钮。 -
从网络类型列表中选择
VLAN
,然后按 Enter 。 - 可选:为要创建的 NetworkManager 配置文件输入一个名称。
-
在
Device
字段中输入要创建的 VLAN 设备名称。 -
在
Parent
字段中输入您要在其上配置 VLAN 标签的设备名称。 -
输入 VLAN ID。ID 必须在
0
到4094
之间。 根据您的环境,相应地在
IPv4 configuration
和IPv6 configuration
区中配置 IP 地址。为此,请按Automatic
按钮并选择:-
Disabled
,如果此 VLAN 设备不需要 IP 地址,或者您想要将其用作其它设备的端口。 -
Automatic
,如果 DHCP 服务器为 VLAN 设备动态分配了一个 IP 地址。 Manual
,如果网络需要静态 IP 地址设置。在这种情况下,您必须填写更多字段:-
按您要配置的协议旁边的
Show
按钮来显示其他字段。 按
Addresses
旁边的Add
按钮,然后输入 IP 地址和无类别域间路由(CIDR)格式的子网掩码。如果没有指定子网掩码,NetworkManager 会为 IPv4 地址设置
/32
子网掩码,为 IPv6 地址设置/64
子网掩码。- 输入默认网关的地址。
-
按
DNS servers
旁边的Add
按钮,并输入 DNS 服务器地址。 -
按
Search domains
旁边的Add
按钮,并输入 DNS 搜索域。
-
按您要配置的协议旁边的
图 5.1. 具有静态 IP 地址设置的 VLAN 连接示例
-
-
按
OK
按钮来创建并自动激活新连接。 -
按
Back
按钮返回到主菜单。 -
选择
Quit
,然后按 Enter 来关闭nmtui
应用程序。
验证
验证设置:
# ip -d addr show vlan10 4: vlan10@enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:72:2f:6e brd ff:ff:ff:ff:ff:ff promiscuity 0 vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute vlan10 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::8dd7:9030:6f8e:89e6/64 scope link noprefixroute valid_lft forever preferred_lft forever
5.4. 使用 nm-connection-editor 配置 VLAN 标记
您可以使用 nm-connection-editor
应用程序在图形界面中配置 Virtual Local Area Network (VLAN) 标记。
先决条件
- 您计划用作虚拟 VLAN 接口的父接口支持 VLAN 标签。
如果您在绑定接口之上配置 VLAN:
- 绑定的端口是上线的。
-
这个绑定没有使用
fail_over_mac=follow
选项进行配置。VLAN 虚拟设备无法更改其 MAC 地址以匹配父设备的新 MAC 地址。在这种情况下,流量仍会与不正确的源 MAC 地址一同发送。
- 主机已连接,以支持 VLAN 标签。详情请查看您的交换机文档。
步骤
打开一个终端,输入
nm-connection-editor
:$ nm-connection-editor
- 点击 + 按钮来添加一个新的连接。
- 选择 VLAN 连接类型,然后单击 Create。
在 VLAN 选项卡中:
- 选择上级接口。
- 选择 VLAN ID。请注意,VLAN 必须在 0 到 4094 之间。
- 默认情况下,VLAN 连接会继承上级接口的最大传输单元(MTU)。另外,还可设置不同的 MTU 值。
另外,还可设置 VLAN 接口的名称以及其它特定 VLAN 选项。
在 IPv4 设置和 IPv 6 设置 标签页中配置 IP 地址设置:
- 要将这个网桥设备用作其他设备的端口,请将 Method 字段设置为 Disabled。
- 要使用 DHCP,请将 Method 字段保留为默认值 Automatic (DHCP)。
要使用静态 IP 设置,请将 Method 字段设置为 Manual,并相应地填写字段:
- 点 Save。
-
关闭
nm-connection-editor
。
验证
验证设置:
# ip -d addr show vlan10 4: vlan10@enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:d5:e0:fb brd ff:ff:ff:ff:ff:ff promiscuity 0 vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute vlan10 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::8dd7:9030:6f8e:89e6/64 scope link noprefixroute valid_lft forever preferred_lft forever
5.5. 使用 nmstatectl 配置 VLAN 标记
您可以使用 nmstatectl
程序配置 Virtual Local Area Network (VLAN) 标记。这个示例配置了使用以太网连接 ID 10 的 VLAN。作为子设备,VLAN 连接包含 IP、默认网关和 DNS 配置。
根据您的环境,相应地调整 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 - 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.yml
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION vlan10 vlan connected vlan10
显示连接配置集的所有设置:
# nmcli connection show vlan10 connection.id: vlan10 connection.uuid: 1722970f-788e-4f81-bd7d-a86bf21c9df5 connection.stable-id: -- connection.type: vlan connection.interface-name: vlan10 ...
以 YAML 格式显示连接设置:
# nmstatectl show vlan0
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory
5.6. 使用 network RHEL 系统角色配置 VLAN 标记
您可以使用 network
RHEL 系统角色配置 VLAN 标记。这个示例在这个以太网连接之上添加了一个以太网连接和 ID 为 10
的 VLAN。作为子设备,VLAN 连接包含 IP、默认网关和 DNS 配置。
根据您的环境,相应地进行调整。例如:
-
若要将 VLAN 用作其他连接中的端口(如绑定),请省略
ip
属性,并在子配置中设置 IP 配置。 -
若要在 VLAN 中使用 team、bridge 或 bond 设备,请调整您在 VLAN 中使用的端口的
interface_name
和类型
属性。
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
步骤
创建包含以下内容的 playbook 文件,如
~/vlan-ethernet.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure a VLAN that uses an Ethernet connection include_role: name: rhel-system-roles.network vars: network_connections: # Add an Ethernet profile for the underlying device of the VLAN - name: enp1s0 type: ethernet interface_name: enp1s0 autoconnect: yes state: up ip: dhcp4: no auto6: no # Define the VLAN profile - name: enp1s0.10 type: vlan 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 vlan_id: 10 parent: enp1s0 state: up
VLAN 配置文件中的
parent
属性将 VLAN 配置为在enp1s0
设备之上运行。运行 playbook:
# ansible-playbook ~/vlan-ethernet.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
5.7. 其他资源
第 6 章 配置网络桥接
网络桥接是一个链路层设备,它可根据 MAC 地址列表转发网络间的流量。网桥通过侦听网络流量并了解连接到每个网络的主机来构建 MAC 地址表。例如,您可以使用 Red Hat Enterprise Linux 主机上的软件桥接模拟硬件桥接或在虚拟化环境中,将虚拟机(VM)集成到与主机相同的网络中。
桥接需要在桥接应该连接的每个网络中有一个网络设备。当您配置网桥时,网桥被称为 controller
,其使用的设备为 ports
。
您可以在不同类型的设备中创建桥接,例如:
- 物理和虚拟以太网设备
- 网络绑定
- 网络团队(team)
- VLAN 设备
由于 IEEE 802.11 标准指定在 Wi-Fi 中使用 3 个地址帧以便有效地使用随机时间,您无法通过 Ad-Hoc 或者 Infrastructure 模式中的 Wi-Fi 网络配置网桥。
6.1. 使用 nmcli 配置网络桥接
要在命令行中配置网络桥接,请使用 nmcli
实用程序。
先决条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作网桥的端口,必须在服务器中安装物理或者虚拟以太网设备。
要使用 team、bond 或 VLAN 设备作为网桥的端口,您可以在创建桥接时创建这些设备,或者预先创建它们,如:
步骤
创建网桥接口:
# nmcli connection add type bridge con-name bridge0 ifname bridge0
这个命令会创建一个名为
bridge0
的网桥,输入:显示网络接口,并记录您要添加到网桥中的接口名称:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet disconnected -- enp8s0 ethernet disconnected -- bond0 bond connected bond0 bond1 bond connected bond1 ...
在本例中:
-
没有配置
enp7s0
和enp8s0
。要将这些设备用作端口,请在下一步中添加连接配置集。 -
bond0
和bond1
已有连接配置文件。要将这些设备用作端口,请在下一步中修改其配置集。
-
没有配置
将接口分配给网桥。
如果没有配置您要分配给网桥的接口,为其创建新的连接配置集:
# nmcli connection add type ethernet slave-type bridge con-name bridge0-port1 ifname enp7s0 master bridge0 # nmcli connection add type ethernet slave-type bridge con-name bridge0-port2 ifname enp8s0 master bridge0
这些命令为
enp7s0
和enp8s0
创建配置文件,并将它们添加到bridge0
连接中。如果要为网桥分配现有连接配置集:
将这些连接的
master
参数设置为bridge0
:# nmcli connection modify bond0 master bridge0 # nmcli connection modify bond1 master bridge0
这些命令将名为
bond0
和bond1
的现有连接配置文件分配给bridge0
连接。重新激活连接:
# nmcli connection up bond0 # nmcli connection up bond1
配置 IPv4 设置:
要将这个网桥设备用作其它设备的端口,请输入:
# nmcli connection modify bridge0 ipv4.method disabled
- 要使用 DHCP,不需要任何操作。
要为
bridge0
连接设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
配置 IPv6 设置:
要将这个网桥设备用作其它设备的端口,请输入:
# nmcli connection modify bridge0 ipv6.method disabled
- 要使用 DHCP,不需要任何操作。
要为
bridge0
连接设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器设置,请输入:# nmcli connection modify bridge0 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
可选:配置网桥的其他属性。例如,要将
bridge0
的生成树协议(STP)优先级设为16384
,请输入:# nmcli connection modify bridge0 bridge.priority '16384'
默认情况下启用 STP。
激活连接:
# nmcli connection up bridge0
验证端口是否已连接,并且
CONNECTION
列是否显示端口的连接名称:# nmcli device DEVICE TYPE STATE CONNECTION ... enp7s0 ethernet connected bridge0-port1 enp8s0 ethernet connected bridge0-port2
当您激活连接的任何端口时,NetworkManager 也会激活网桥,但不会激活它的其它端口。您可以配置 Red Hat Enterprise Linux 在启用桥接时自动启用所有端口:
启用网桥连接的
connection.autoconnect-slaves
参数:# nmcli connection modify bridge0 connection.autoconnect-slaves 1
重新激活桥接:
# nmcli connection up bridge0
验证
使用
ip
工具来显示作为特定网桥端口的以太网设备的链接状态:# ip link show master bridge0 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
使用
bridge
工具来显示作为任意网桥设备端口的以太网设备状态:# bridge link show 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100 5: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state forwarding priority 32 cost 100 6: enp11s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state blocking priority 32 cost 100 ...
要显示特定以太网设备的状态,请使用
bridge link show dev ethernet_device_name
命令。
其他资源
- 配置 NetworkManager 以避免使用特定配置集提供默认网关
-
nm-settings(5)
手册页 -
bridge(8)
手册页 - 重启 NetworkManager 服务后NetworkManager 会复制连接
- 如何配置具有 VLAN 信息的网桥?
6.2. 使用 RHEL web 控制台配置网络桥接
如果您希望通过基于 Web 浏览器的界面管理网络设置,请使用 RHEL web 控制台来配置网桥。
前提条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作网桥的端口,必须在服务器中安装物理或者虚拟以太网设备。
要使用 team、bond 或 VLAN 设备作为网桥的端口,您可以在创建桥接时创建这些设备,或者预先创建它们,如:
流程
-
在屏幕左侧的导航中选择
Networking
选项卡。 -
在
Interfaces
部分点 Add bridge。 - 输入您要创建的网桥设备名称。
- 选择应该是网桥端口的接口。
可选:启用
Spanning tree 协议 (STP)
功能,以避免桥接循环和广播。- 点应用。
默认情况下,网桥使用动态 IP 地址。如果要设置静态 IP 地址:
-
在
Interfaces
部分,点网桥的名称。 -
点您要配置的协议旁的
Edit
。 -
选择
Addresses
旁的Manual
,并输入 IP 地址、前缀和默认网关。 -
在
DNS
部分,点 + 按钮,并输入 DNS 服务器的 IP 地址。重复此步骤来设置多个 DNS 服务器。 -
在
DNS search domains
部分中,点 + 按钮并输入搜索域。 如果接口需要静态路由,请在
Routes
部分配置它们。- 点 应用
-
在
验证
在屏幕左侧的导航中选择
Networking
选项卡,并检查接口上是否有传入和传出流量:
6.3. 使用 nmtui 配置网络桥接
nmtui
应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui
在没有图形界面的主机上配置网桥。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 Space 选择并取消选择复选框。
前提条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作网桥的端口,必须在服务器中安装物理或者虚拟以太网设备。
流程
如果您不知道您要在其上配置网桥的网络设备名称,请显示可用的设备:
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
启动
nmtui
:# nmtui
-
选择
Edit a connection
,并按 Enter。 -
按
Add
按钮。 -
从网络类型列表中选择
Bridge
,然后按 Enter 。 - 可选:为要创建的 NetworkManager 配置文件输入一个名称。
-
在
Device
字段中输入要创建的网桥设备名称。 将端口添加到要创建的网桥中:
-
按
Slaves
列表旁边的Add
按钮。 -
选择您要作为端口添加到网桥的接口类型,例如
Ethernet
。 - 可选:为这个网桥端口输入要创建的 NetworkManager 配置文件的名称。
-
在
Device
字段中输入端口的设备名称。 按
OK
按钮返回到网桥设置窗口。图 6.1. 将以太网设备作为端口添加到网桥
- 重复这些步骤,来向网桥添加更多的端口。
-
按
根据您的环境,相应地在
IPv4 configuration
和IPv6 configuration
区中配置 IP 地址。为此,请按Automatic
按钮并选择:-
Disabled
,如果网桥不需要 IP 地址。 -
Automatic
,如果 DHCP 服务器为网桥动态分配了一个 IP 地址。 Manual
,如果网络需要静态 IP 地址设置。在这种情况下,您必须填写更多字段:-
按您要配置的协议旁边的
Show
按钮来显示其他字段。 按
Addresses
旁边的Add
按钮,然后输入 IP 地址和无类别域间路由(CIDR)格式的子网掩码。如果没有指定子网掩码,NetworkManager 会为 IPv4 地址设置
/32
子网掩码,为 IPv6 地址设置/64
子网掩码。- 输入默认网关的地址。
-
按
DNS servers
旁边的Add
按钮,并输入 DNS 服务器地址。 -
按
Search domains
旁边的Add
按钮,并输入 DNS 搜索域。
-
按您要配置的协议旁边的
图 6.2. 没有 IP 地址设置的网桥连接的示例
-
-
按
OK
按钮来创建并自动激活新连接。 -
按
Back
按钮返回到主菜单。 -
选择
Quit
,然后按 Enter 来关闭nmtui
应用程序。
验证
使用
ip
工具来显示作为特定网桥端口的以太网设备的链接状态:# ip link show master bridge0 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
使用
bridge
工具来显示作为任意网桥设备端口的以太网设备状态:# bridge link show 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100 ...
要显示特定以太网设备的状态,请使用
bridge link show dev ethernet_device_name
命令。
6.4. 使用 nm-connection-editor 配置网络桥接
如果您将 Red Hat Enterprise Linux 与图形界面搭配使用,您可以使用 nm-connection-editor
应用程序配置网桥。
请注意,nm-connection-editor
只能向网桥添加新端口。要使用现有连接配置集作为端口,请使用 nmcli
实用程序创建网桥,如使用 nmcli 配置网络桥接 中所述。
先决条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作网桥的端口,必须在服务器中安装物理或者虚拟以太网设备。
- 要使用 team、bond 或 VLAN 设备作为网桥的端口,请确保这些设备还没有配置。
步骤
打开一个终端,输入
nm-connection-editor
:$ nm-connection-editor
- 点击 + 按钮来添加一个新的连接。
- 选择 Bridge 连接类型,然后单击 Create。
在 Bridge 选项卡中:
- 可选:在 Interface name 字段中设置网桥接口的名称。
点 Add 按钮为网络接口创建新连接配置集,并将配置集作为端口添加到网桥。
- 选择接口的连接类型。例如,为有线连接选择 Ethernet。
- 另外,还可为端口设备设置连接名称。
- 如果您是为以太网设备创建连接配置集,打开 Ethernet 选项卡,然后在 Device 字段中选择您要添加为网桥的端口。如果您选择了不同的设备类型,请相应地进行配置。
- 点 Save。
对您要添加到桥接的每个接口重复前面的步骤。
- 可选:配置其他网桥设置,如生成树协议(STP)选项。
在 IPv4 设置和 IPv 6 设置 标签页中配置 IP 地址设置:
- 要将这个网桥设备用作其他设备的端口,请将 Method 字段设置为 Disabled。
- 要使用 DHCP,请将 Method 字段保留为默认值 Automatic (DHCP)。
要使用静态 IP 设置,请将 Method 字段设置为 Manual,并相应地填写字段:
- 点 Save。
-
关闭
nm-connection-editor
。
验证
使用
ip
工具来显示作为特定网桥端口的以太网设备的链接状态。# ip link show master bridge0 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
使用
bridge
工具来显示作为任意网桥设备中端口的以太网设备状态:# bridge link show 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100 5: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state forwarding priority 32 cost 100 6: enp11s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state blocking priority 32 cost 100 ...
要显示特定以太网设备的状态,请使用
bridge link show dev ethernet_device_name
命令。
6.5. 使用 nmstatectl 配置网络桥接
要使用 Nmstate API 配置网桥,请使用 nmstatectl
工具。
例如,以下步骤使用以下设置在 NetworkManager 中创建桥接:
-
网桥中的网络接口:
enp1s0
和enp7s0
- Spanning Tree Protocol (STP): 启用
-
静态 IPv4 地址:
192.0.2.1
,子网掩码为/24
-
静态 IPv6 地址:
2001:db8:1::1
,子网掩码为/64
-
IPv4 默认网关:
192.0.2.254
-
IPv6 默认网关:
2001:db8:1::fffe
-
IPv4 DNS 服务器:
192.0.2.200
-
IPv6 DNS 服务器:
2001:db8:1::ffbb
-
DNS 搜索域:
example.com
先决条件
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
- 要将以太网设备用作网桥中的端口,必须在服务器中安装物理或者虚拟以太网设备。
-
要使用团队、绑定或 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: 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 server: - 192.0.2.200 - 2001:db8:1::ffbb
将设置应用到系统:
# nmstatectl apply ~/create-bridge.yml
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION bridge0 bridge connected bridge0
显示连接配置集的所有设置:
# nmcli connection show bridge0 connection.id: bridge0 connection.uuid: e2cc9206-75a2-4622-89cf-1252926060a9 connection.stable-id: -- connection.type: bridge connection.interface-name: bridge0 ...
以 YAML 格式显示连接设置:
# nmstatectl show bridge0
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory - 如何使用 vlan 信息配置网桥?
6.6. 使用 network RHEL 系统角色配置网络桥接
您可以使用 network
RHEL 系统角色配置 Linux 网桥。例如,使用它来配置使用两个以太网设备的网桥,并设置 IPv4 和 IPv6 地址、默认网关和 DNS 配置。
在网桥上设置 IP 配置,而不是在 Linux 网桥的端口上设置。
在 Ansible 控制节点上执行此步骤。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
- 在服务器中安装两个或者两个以上物理或者虚拟网络设备。
步骤
创建包含以下内容的 playbook 文件,如
~/bridge-ethernet.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure a network bridge that uses two Ethernet ports include_role: name: rhel-system-roles.network vars: network_connections: # Define the bridge profile - name: bridge0 type: bridge interface_name: bridge0 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 # Add an Ethernet profile to the bridge - name: bridge0-port1 interface_name: enp7s0 type: ethernet controller: bridge0 port_type: bridge state: up # Add a second Ethernet profile to the bridge - name: bridge0-port2 interface_name: enp8s0 type: ethernet controller: bridge0 port_type: bridge state: up
运行 playbook:
# ansible-playbook ~/bridge-ethernet.yml
其它资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
第 7 章 配置 VPN 连接
虚拟专用网络(VPN)是通过互联网连接到本地网络的一种方式。Libreswan
提供的 IPsec
是创建 VPN 的首选方法。libreswan
是 VPN 的用户空间 IPsec
实现。VPN 通过在中间网络(比如互联网)设置隧道,启用 LAN 和另一个远程 LAN 之间的通信。为了安全起见,VPN 隧道总是使用认证和加密。对于加密操作,Libreswan
使用 NSS
库。
7.1. 使用 control-center 配置 VPN 连接
如果您将 Red Hat Enterprise Linux 与图形界面搭配使用,您可以在 GNOME control-center
中配置 VPN 连接。
先决条件
-
已安装
NetworkManager-libreswan-gnome
软件包。
步骤
-
按 Super 键,输入
Settings
,然后按 Enter 键打开control-center
应用程序。 -
选择左侧的
Network
条目。 - 点 + 图标。
-
选择
VPN
。 选择
Identity
菜单项来查看基本配置选项:General
Gateway
- 远程 VPN 网关的名称或IP
地址。认证
类型
-
IKEv2(Certificate)
- 客户端通过证书进行身份验证。它更安全(默认)。 IKEv1(XAUTH)
- 客户端通过用户名和密码或预共享密钥(PSK)进行身份验证。以下配置设置在
高级
部分中提供:图 7.1. VPN 连接的高级选项
警告当使用
gnome-control-center
应用程序配置基于 IPsec 的 VPN 连接时,高级
对话框会显示配置,但它不允许任何更改。因此,用户无法更改任何高级 IPsec 选项。使用nm-connection-editor
或nmcli
工具来配置高级属性。身份识别
域
- 如果需要,输入域名。安全性
-
Phase1 Algorithms
- 对应于ike
Libreswan 参数 - 输入用来验证和设置加密频道的算法。 Phase2 Algorithms
- 对应于esp
Libreswan 参数 - 输入用于IPsec
协商的算法。选择
Disable PFS
字段来关闭 Perfect Forward Secrecy(PFS),以确保与不支持 PFS 的旧服务器兼容。-
Phase1 Lifetime
- 对应于ikelifetime
Libreswan 参数 - 用于加密流量的密钥的有效期。 Phase2 Lifetime
- 对应于salifetime
Libreswan 参数 - 在过期前连接的特定实例应多久。注意:为了安全起见,加密密钥应该不时地更改。
Remote network
- 对应于rightsubnet
Libreswan 参数 - 应该通过 VPN 访问的目标专用远程网络。检查
缩减
字段以启用缩小字段。请注意,它只在 IKEv2 协商中有效。-
Enable fragmentation
- 对应于fragmentation
Libreswan 参数 - 是否允许 IKE 分段。有效值为yes
(默认)或no
。 -
Enable Mobike
- 对应于mobike
Libreswan 参数 - 是否允许 Mobility and Multihoming Protocol(MOBIKE、RFC 4555)启用连接来迁移其端点,而无需从头开始重启连接。这可用于在有线、无线或者移动数据连接之间进行切换的移动设备。值为no
(默认)或yes
。
-
选择 IPv4 菜单条目:
IPv4 方法
-
Automatic (DHCP)
- 如果您要连接的网络使用DHCP
服务器来分配动态IP
地址,请选择此选项。 -
Link-Local Only
- 如果您要连接的网络没有DHCP
服务器且您不想手动分配IP
地址,请选择这个选项。随机地址将根据 RFC 3927 分配,带有前缀169.254/16
。 -
手动
- 如果您要手动分配IP
地址,请选择这个选项。 Disable
- 在这个连接中禁用IPv4
。DNS
在
DNS
部分,当Automatic
为ON
时,将其切换到OFF
以进入您要用逗号分开的 DNS 服务器的 IP 地址。Routes
请注意,在
Routes
部分,当Automatic
为ON
时,会使用 DHCP 的路由,但您也可以添加额外的静态路由。当OFF
时,只使用静态路由。-
Address
- 输入远程网络或主机的IP
地址。 -
Netmask
- 以上输入的IP
地址的子网掩码或前缀长度。 -
Gateway
- 上面输入的远程网络或主机的网关的IP
地址。 Metric
- 网络成本,赋予此路由的首选值。数值越低,优先级越高。仅将此连接用于其网络上的资源
选择这个复选框以防止连接成为默认路由。选择这个选项意味着只有特别用于路由的流量才会通过连接自动获得,或者手动输入到连接上。
-
要在
VPN
连接中配置IPv6
设置,请选择 IPv6 菜单条目:IPv6 Method
-
Automatic
- 选择这个选项使用IPv6
Stateless Address AutoConfiguration(SLAAC)根据硬件地址和路由器公告(RA)创建自动的、无状态的配置。 -
Automatic, DHCP only
- 选择这个选项以不使用 RA,但从DHCPv6
请求信息以创建有状态的配置。 -
Link-Local Only
- 如果您要连接的网络没有DHCP
服务器且您不想手动分配IP
地址,请选择这个选项。随机地址将根据 RFC 4862 分配,前缀为FE80::0
。 -
手动
- 如果您要手动分配IP
地址,请选择这个选项。 Disable
- 在这个连接中禁用IPv6
。请注意,
DNS
,Routes
,Use this connection only for resources on its network
项是IPv4
的常规设置。
-
-
编辑完
VPN
连接后,点添加按钮自定义配置或应用按钮为现有配置保存它。 -
将配置集切换为
ON
以激活VPN
连接。
其他资源
-
nm-settings-libreswan(5)
7.2. 使用 nm-connection-editor 配置 VPN 连接
如果您将 Red Hat Enterprise Linux 与图形界面搭配使用,您可以在 nm-connection-editor
应用程序中配置 VPN 连接。
先决条件
-
已安装
NetworkManager-libreswan-gnome
软件包。 如果您配置了互联网密钥交换版本 2(IKEv2)连接:
- 证书导入到 IPsec 网络安全服务(NSS)数据库中。
- NSS 数据库中的证书 nickname 是已知的。
流程
打开终端窗口,输入:
$ nm-connection-editor
- 点击 + 按钮来添加一个新的连接。
-
选择
IPsec based VPN
连接类型,然后点击 Create。 在
VPN
选项卡中:在
Gateway
字段中输入 VPN 网关的主机名或 IP 地址,然后选择验证类型。根据验证类型,您必须输入不同的额外信息:-
IKEv2(认证)
使用证书验证客户端,这会更安全。这个设置需要在 IPsec NSS 数据库中指定证书的 nickname IKEv1(XAUTH)
使用用户名和密码(预共享密钥)验证用户身份。此设置要求您输入以下值:- 用户名
- 密码
- 组名称
- Secret
-
如果远程服务器为 IKE 交换指定了本地标识符,在
Remote ID
字段中输入准确的字符串。在运行 Libreswan 的远程服务器中,这个值是在服务器的leftid
参数中设置的。(可选)点击高级按钮配置附加设置。您可以配置以下设置:
身份识别
-
域
- 如果需要,请输入域名。
-
安全性
-
Phase1 Algorithms
对应于 ikeLibreswan
参数。输入用来验证和设置加密频道的算法。 Phase2 Algorithms
对应于esp
Libreswan 参数。输入用于IPsec
协商的算法。选择
Disable PFS
字段来关闭 Perfect Forward Secrecy(PFS),以确保与不支持 PFS 的旧服务器兼容。-
Phase1 Lifetime
与ikelifetime
Libreswan 参数对应。此参数定义用于加密流量的密钥的有效期。 -
Phase2 Lifetime
与salifetime
Libreswan 参数对应。这个参数定义安全关联有效期。
-
连接性
远程网络
与rightsubnet
Libreswan 参数对应,并定义应通过 VPN 访问的目标专用远程网络。检查
缩减
字段以启用缩小字段。请注意,它只在 IKEv2 协商中有效。-
Enable fragmentation
与segmentation
Libreswan 参数对应,并定义是否允许 IKE 分段。有效值为yes
(默认)或no
。 -
Enable Mobike
与mobike
参数对应。参数定义是否允许移动和多功能协议(MOBIKE)(RFC 4555)启用连接来迁移其端点而无需从头开始重启连接。这可用于在有线、无线或者移动数据连接之间进行切换的移动设备。值为no
(默认)或yes
。
在
IPv4 Settings
选项卡中,选择 IP 分配方法,并可选择设置额外的静态地址、DNS 服务器、搜索域和路由。- 保存连接。
-
关闭
nm-connection-editor
。
当您点 + 按钮添加新连接时, NetworkManager 会为那个连接创建新配置文件,然后打开同一个对话框来编辑现有连接。这两个对话框之间的区别在于现有连接配置集有详情菜单条目。
其他资源
-
nm-settings-libreswan(5)
手册页
7.3. 配置自动检测和使用 ESP 硬件卸载来加速 IPsec 连接
卸载硬件的封装安全负载(ESP)来加速以太网上的 IPsec 连接。默认情况下,Libreswan 会检测硬件是否支持这个功能,并因此启用 ESP 硬件卸载。如果这个功能被禁用或明确启用,您可以切回到自动检测。
先决条件
- 网卡支持 ESP 硬件卸载。
- 网络驱动程序支持 ESP 硬件卸载。
- IPsec 连接已配置且可以正常工作。
步骤
-
编辑连接的
/etc/ipsec.d/
目录中的 Libreswan 配置文件,该文件应使用 ESP 硬件卸载支持的自动检测。 -
确保连接的设置中没有设置
nic-offload
参数。 如果您删除了
nic-offload
,重启ipsec
服务:# systemctl restart ipsec
验证
如果网卡支持 ESP 硬件卸载支持,请按照以下步骤验证结果:
显示 IPsec 连接使用的以太网设备计数器的
tx_ipsec
和rx_ipsec
:# ethtool -S enp1s0 | egrep "_ipsec" tx_ipsec: 10 rx_ipsec: 10
通过 IPsec 隧道发送流量。例如,ping 远程 IP 地址:
# ping -c 5 remote_ip_address
再次显示以太网设备的
tx_ipsec
和rx_ipsec
计数器:# ethtool -S enp1s0 | egrep "_ipsec" tx_ipsec: 15 rx_ipsec: 15
如果计数器值增加了,ESP 硬件卸载正常工作。
其他资源
7.4. 在绑定中配置 ESP 硬件卸载以加快 IPsec 连接
将封装安全负载(ESP)卸载到硬件可加速 IPsec 连接。如果出于故障转移原因而使用网络绑定,配置 ESP 硬件卸载的要求和流程与使用常规以太网设备的要求和流程不同。例如,在这种情况下,您可以对绑定启用卸载支持,内核会将设置应用到绑定的端口。
先决条件
- 绑定中的所有网卡都支持 ESP 硬件卸载。
-
网络驱动程序支持对绑定设备的 ESP 硬件卸载。在 RHEL 中,只有
ixgbe
驱动程序支持此功能。 - 绑定已配置且可以正常工作。
-
该绑定使用
active-backup
模式。绑定驱动程序不支持此功能的任何其他模式。 - IPsec 连接已配置且可以正常工作。
步骤
对网络绑定启用 ESP 硬件卸载支持:
# nmcli connection modify bond0 ethtool.feature-esp-hw-offload on
这个命令在对
bond0
连接启用 ESP 硬件卸载支持。重新激活
bond0
连接:# nmcli connection up bond0
编辑应使用 ESP 硬件卸载的连接的
/etc/ipsec.d/
目录中的 Libreswan 配置文件,并将nic-offload=yes
语句附加到连接条目:conn example ... nic-offload=yes
重启
ipsec
服务:# systemctl restart ipsec
验证
显示绑定的活动端口:
# grep "Currently Active Slave" /proc/net/bonding/bond0 Currently Active Slave: enp1s0
显示活动端口的
tx_ipsec
和rx_ipsec
计数器:# ethtool -S enp1s0 | egrep "_ipsec" tx_ipsec: 10 rx_ipsec: 10
通过 IPsec 隧道发送流量。例如,ping 远程 IP 地址:
# ping -c 5 remote_ip_address
再次显示活动端口的
tx_ipsec
和rx_ipsec
计数器:# ethtool -S enp1s0 | egrep "_ipsec" tx_ipsec: 15 rx_ipsec: 15
如果计数器值增加了,ESP 硬件卸载正常工作。
其他资源
- 配置网络绑定
- 在安全网络文档中 使用 IPsec 配置 VPN 部分
第 8 章 配置 IP 隧道
与 VPN 类似,IP 隧道通过网络(如互联网)直接连接两个网络。然而,不是所有的隧道协议都支持加密。
两个建立隧道网络的路由器至少需要两个接口:
- 一个连接到本地网络的接口
- 一个连接到建立隧道的网络的接口。
要建立隧道,您可以在两个路由器中使用来自远程子网的 IP 地址创建一个虚拟接口。
NetworkManager 支持以下 IP 隧道:
- 通用路由封装(GRE)
- IPv6 上的通用路由封装(IP6GRE)
- 通用路由封装终端接入点(GRETAP)
- 通用路由登录在 IPv6(IP6GRETAP)上
- IPv4 over IPv4(IPIP)
- IPv4 over IPv6(IPIP6)
- IPv6 over IPv6(IP6IP6)
- 简单的互联网转换(SIT)
根据类型,这些通道在 Open Systems Interconnection(OSI)的第 2 层或 3 层动作。
8.1. 使用 nmcli 配置 IPIP 隧道来封装 IPv4 数据包中的 IPv4 流量
IP over IP(IPIP)隧道在 OSI 层 3 上运行,并封装 IPv4 数据包中的 IPv4 流量,如 RFC 2003 所述。
通过 IPIP 隧道发送的数据没有加密。出于安全考虑,只在已经加密的数据中使用隧道,比如 HTTPS。
请注意,IPIP 隧道只支持单播数据包。如果您需要支持多播的 IPv4 隧道,请参阅 使用 nmcli 配置 GRE 隧道来封装 IPv4 数据包中的第 3 层流量。
例如,您可以在两个 RHEL 路由器之间创建一个 IPIP 隧道来通过互联网连接两个内部子网,如下图所示:

先决条件
- 每个 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
连接配置为使用手动 IPv4 配置:# nmcli connection modify tun0 ipv4.method manual
添加一个静态路由,其将到
172.16.0.0/24
网络的流量路由到路由器 B 上的隧道 IP:# nmcli connection modify tun0 +ipv4.routes "172.16.0.0/24 10.0.1.2"
启用
tun0
连接。# nmcli connection up tun0
启用数据包转发:
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
在网络 B 中的 RHEL 路由器中:
创建名为
tun0
的 IPIP 隧道接口:# nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 203.0.113.10 local 198.51.100.5
remote
和local
参数设置远程和本地路由器的公共 IP 地址。将 IPv4 地址设为
tun0
设备:# nmcli connection modify tun0 ipv4.addresses '10.0.1.2/30'
将
tun0
连接配置为使用手动 IPv4 配置:# nmcli connection modify tun0 ipv4.method manual
添加一个静态路由,其将路由到
192.0.2.0/24
网络的流量路由到路由器 A 上的隧道 IP:# nmcli connection modify tun0 +ipv4.routes "192.0.2.0/24 10.0.1.1"
启用
tun0
连接。# nmcli connection up tun0
启用数据包转发:
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
验证
从每个 RHEL 路由器中,ping 路由器的内部接口的 IP 地址:
在路由器 A 上,ping
172.16.0.1
:# ping 172.16.0.1
在路由器 B 上,ping
192.0.2.1
:# ping 192.0.2.1
其他资源
-
nmcli(1)
手册页 -
nm-settings(5)
手册页
8.2. 使用 nmcli 配置 GRE 隧道来封装 IPv4 数据包中的层 3 流量
Generic Routing Encapsulation(GRE)隧道封装 IPv4 数据包中的第 3 层流量,如 RFC 2784 所述。GRE 隧道可以使用有效的以太网类型封装任何第 3 层协议。
通过 GRE 隧道发送的数据没有加密。出于安全考虑,只在已经加密的数据中使用隧道,比如 HTTPS。
例如,您可以在两个 RHEL 路由器之间创建一个 GRE 隧道来通过互联网连接两个内部子网,如下图所示:

保留 gre0
设备名称。对该设备使用 gre1
或者不同的名称。
先决条件
- 每个 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 地址。将 IPv4 地址设为
gre1
设备:# nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30'
请注意,具有两个可用 IP 地址的
/30
子网足以满足隧道的需要。将
gre1
连接配置为使用手动 IPv4 配置:# nmcli connection modify gre1 ipv4.method manual
添加一个静态路由,其将到
172.16.0.0/24
网络的流量路由到路由器 B 上的隧道 IP:# nmcli connection modify gre1 +ipv4.routes "172.16.0.0/24 10.0.1.2"
启用
gre1
连接。# nmcli connection up gre1
启用数据包转发:
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
在网络 B 中的 RHEL 路由器中:
创建名为
gre1
的 GRE 隧道接口:# nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 203.0.113.10 local 198.51.100.5
remote
和local
参数设置远程和本地路由器的公共 IP 地址。将 IPv4 地址设为
gre1
设备:# nmcli connection modify gre1 ipv4.addresses '10.0.1.2/30'
将
gre1
连接配置为使用手动 IPv4 配置:# nmcli connection modify gre1 ipv4.method manual
添加一个静态路由,其将路由到
192.0.2.0/24
网络的流量路由到路由器 A 上的隧道 IP:# nmcli connection modify gre1 +ipv4.routes "192.0.2.0/24 10.0.1.1"
启用
gre1
连接。# nmcli connection up gre1
启用数据包转发:
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
验证
从每个 RHEL 路由器中,ping 路由器的内部接口的 IP 地址:
在路由器 A 上,ping
172.16.0.1
:# ping 172.16.0.1
在路由器 B 上,ping
192.0.2.1
:# ping 192.0.2.1
其他资源
-
nmcli(1)
手册页 -
nm-settings(5)
手册页
8.3. 配置 GRETAP 隧道来通过 IPv4 传输以太网帧
通用路由封装终端接入点(GRETAP)隧道在 OSI 级别 2 上运行,并封装 IPv4 数据包中的以太网流量,如 RFC 2784 所述。
通过 GRETAP 隧道发送的数据没有加密。出于安全考虑,通过 VPN 或不同的加密连接建立隧道。
例如,您可以在两个 RHEL 路由器之间创建一个 GRETAP 隧道,以使用网桥连接两个网络,如下图所示:

保留 gretap0
设备名称。对该设备使用 gretap1
或者不同的名称。
先决条件
- 每个 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 slave-type bridge con-name bridge0-port1 ifname enp1s0 master bridge0
为网桥添加 GRETAP 隧道接口的新连接配置集:
# nmcli connection add type ip-tunnel ip-tunnel.mode gretap slave-type bridge con-name bridge0-port2 ifname gretap1 remote 198.51.100.5 local 203.0.113.10 master bridge0
remote
和local
参数设置远程和本地路由器的公共 IP 地址。可选:如果您不需要,STP(Spanning Tree Protocol):
# nmcli connection modify bridge0 bridge.stp no
默认情况下,STP 被启用并导致在使用连接前出现延迟。
配置激活
bridge0
连接会自动激活网桥端口:# nmcli connection modify bridge0 connection.autoconnect-slaves 1
激活
bridge0
连接:# nmcli connection up bridge0
在网络 B 中的 RHEL 路由器中:
创建名为
bridge0
的网桥接口:# nmcli connection add type bridge con-name bridge0 ifname bridge0
配置网桥的 IP 设置:
# nmcli connection modify bridge0 ipv4.addresses '192.0.2.2/24' # nmcli connection modify bridge0 ipv4.method manual
为连接到本地网络的接口添加新连接配置集到网桥:
# nmcli connection add type ethernet slave-type bridge con-name bridge0-port1 ifname enp1s0 master bridge0
为网桥添加 GRETAP 隧道接口的新连接配置集:
# nmcli connection add type ip-tunnel ip-tunnel.mode gretap slave-type bridge con-name bridge0-port2 ifname gretap1 remote 203.0.113.10 local 198.51.100.5 master bridge0
remote
和local
参数设置远程和本地路由器的公共 IP 地址。可选:如果您不需要,STP(Spanning Tree Protocol):
# nmcli connection modify bridge0 bridge.stp no
配置激活
bridge0
连接会自动激活网桥端口:# nmcli connection modify bridge0 connection.autoconnect-slaves 1
激活
bridge0
连接:# nmcli connection up bridge0
验证
在两个路由器上,验证
enp1s0
和gretap1
连接是否已连接,并且CONNECTION
列是否显示端口的连接名称:# nmcli device nmcli device DEVICE TYPE STATE CONNECTION ... bridge0 bridge connected bridge0 enp1s0 ethernet connected bridge0-port1 gretap1 iptunnel connected bridge0-port2
从每个 RHEL 路由器中,ping 路由器的内部接口的 IP 地址:
在路由器 A 上,ping
192.0.2.2
:# ping 192.0.2.2
在路由器 B 上,ping
192.0.2.1
:# ping 192.0.2.1
其他资源
-
nmcli(1)
手册页 -
nm-settings(5)
手册页
8.4. 其他资源
-
ip-link(8)
手册页
第 9 章 使用 VXLAN 为虚拟机创建虚拟第 2 层域
虚拟可扩展局域网(VXLAN)是一种网络协议,它使用 UDP 协议在 IP 网络上对第 2 层流量进行隧道化。例如,在不同主机上运行的某些虚拟机(VM)可以通过 VXLAN 隧道进行通信。主机可以位于不同的子网中,甚至位于世界各地的不同数据中心。从虚拟机的角度来看,同一 VXLAN 中的其他虚拟机都在同一个第 2 层域中:

在本例中,RHEL-host-A 和 RHEL-host-B 使用网桥 br0
来在每台具有 VXLAN 为 vxlan10
的主机上连接虚拟机的虚拟网络。由于此配置,VXLAN 对虚拟机不可见,虚拟机不需要任何特殊的配置。如果您稍后将更多的虚拟机连接到同一虚拟网络,则虚拟机将自动成为同一虚拟第 2 层域的成员。
就像正常的第 2 层流量一样,VXLAN 中的数据是不加密的。出于安全考虑,在 VPN 或其他类型的加密连接上使用 VXLAN 。
9.1. VXLAN 的优点
虚拟可扩展局域网(VXLAN)提供了以下主要优点:
- VXLAN 使用 24 位 ID。因此,您可以创建高达 16,777,216 个隔离网络。例如,虚拟 LAN(VLAN)只支持 4,096 个隔离网络。
- VXLAN 使用 IP 协议。这可让您路由流量,并在同一第 2 层域中的不同网络和位置虚拟运行系统。
- 与大多数隧道协议不同,VXLAN 不仅仅是一个点对点的网络。VXLAN 可以动态了解其他端点的 IP 地址,也可以使用静态配置的转发条目。
- 某些网卡支持 UDP 隧道相关的卸载功能。
其他资源
-
/usr/share/doc/kernel-doc-<kernel_version>> /Documentation/networking/vxlan.rst
由kernel-doc
软件包提供
9.2. 在主机上配置以太网接口
要将 RHEL 虚拟机主机连接到以太网,请创建一个网络连接配置文件,配置 IP 设置,并激活配置文件。
在 RHEL 主机上运行此过程,并相应地调整 IP 地址配置。
先决条件
- 主机连接到以太网。
步骤
在 NetworkManager 中添加新的以太网连接配置文件:
# nmcli connection add con-name Example ifname enp1s0 type ethernet
配置 IPv4 设置:
# nmcli connection modify Example ipv4.addresses 198.51.100.2/24 ipv4.method manual ipv4.gateway 198.51.100.254 ipv4.dns 198.51.100.200 ipv4.dns-search example.com
如果网络使用 DHCP,请跳过这一步。
激活
Example
连接:# nmcli connection up Example
验证
显示设备和连接的状态:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet connected Example
在远程网络中 ping 主机以验证 IP 设置:
# ping RHEL-host-B.example.com
请注意,在该主机上配置网络前,您无法 ping 其他虚拟机主机。
其他资源
-
nm-settings(5)
手册页
9.3. 创建附加了 VXLAN 的网桥
要使虚拟可扩展局域网(VXLAN)对虚拟机(VM)不可见,请在主机上创建一个网桥,并将 VXLAN 附加给网桥。使用 NetworkManager 创建网桥和 VXLAN。您不能将虚拟机的任何流量访问点(TAP)设备(通常在主机上称为 vnet
*)添加到网桥。在虚拟机启动时,libvirtd
服务会动态添加它们。
在 RHEL 主机上运行此过程,并相应地调整 IP 地址。
步骤
创建网桥
br0
:# nmcli connection add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
此命令在网桥设备上设置没有 IPv4 和 IPv6 地址,因为此网桥在第 2 层工作。
创建 VXLAN 接口,并将其附加到
br0
:# nmcli connection add type vxlan slave-type bridge con-name br0-vxlan10 ifname vxlan10 id 10 local 198.51.100.2 remote 203.0.113.1 master br0
这个命令使用以下设置:
-
ID 10
:设置 VXLAN 标识符。 -
local 198.51.100.2
:设置传出数据包的源 IP 地址。 -
remote 203.0.113.1
:当目的地链路层地址在 VXLAN 设备转发数据库中未知时,设置要在传出数据包中使用的单播或多播IP地址。 -
Master br0
:将要创建的此 VXLAN 连接设为br0
连接中的一个端口。 -
ipv4.method disabled
和ipv6.method disabled
: 在网桥上禁用 IPv4 和 IPv6。
默认情况下,NetworkManager 使用
8472
作为目的地端口。如果目的地端口不同,还要将destination-port <port_number>
选项传给命令。-
激活
br0
连接配置文件:# nmcli connection up br0
在本地防火墙中为进入 UDP 连接打开端口
8472
:# firewall-cmd --permanent --add-port=8472/udp # firewall-cmd --reload
验证
显示转发表:
# bridge fdb show dev vxlan10 2a:53:bd:d5:b3:0a master br0 permanent 00:00:00:00:00:00 dst 203.0.113.1 self permanent ...
其他资源
-
nm-settings(5)
手册页
9.4. 在带有现有网桥的 libvirt 中创建一个虚拟网络
要使虚拟机(VM)使用带有附加虚拟可扩展局域网(VXLAN) 的 br0
网桥,首先将虚拟网络添加到使用此网桥的 libvirtd
服务中。
先决条件
-
您已安装了
libvirt
软件包。 -
您已启动并启用了
libvirtd
服务。 -
您已在 RHEL 上配置了带有 VXLAN 的
br0
设备。
步骤
使用以下内容创建
~/vxlan10-bridge.xml
文件:<network> <name>vxlan10-bridge</name> <forward mode="bridge" /> <bridge name="br0" /> </network>
使用
~/vxlan10-bridge.xml
文件来在libvirt
中创建一个新的虚拟网络:# virsh net-define ~/vxlan10-bridge.xml
删除
~/vxlan10-bridge.xml
文件:# rm ~/vxlan10-bridge.xml
启动
vxlan10-bridge
虚拟网络:# virsh net-start vxlan10-bridge
将
vxlan10-bridge
虚拟网络配置为在libvirtd
服务启动时自动启动:# virsh net-autostart vxlan10-bridge
验证
显示虚拟网络列表:
# virsh net-list Name State Autostart Persistent ---------------------------------------------------- vxlan10-bridge active yes yes ...
其他资源
-
virsh(1)
手册页
9.5. 配置虚拟机以使用 VXLAN
要在主机上将虚拟机配置为使用带有附加虚拟可扩展 LAN(VXLAN)的网桥设备,请创建一个使用 vxlan10-bridge
虚拟网络的新虚拟机或更新现有虚拟机的设置以使用这个网络。
在 RHEL 主机上执行此流程。
先决条件
-
您在
libvirtd
中配置了vxlan10-bridge
虚拟网络。
步骤
要创建新的虚拟机,并将其配置为使用
vxlan10-bridge
网络,请在创建虚拟机时将--network network:vxlan10-bridge
选项传给virt-install
命令:# virt-install ... --network network:vxlan10-bridge
要更改现有虚拟机的网络设置:
将虚拟机的网络接口连接到
vxlan10-bridge
虚拟网络:# virt-xml VM_name --edit --network network=vxlan10-bridge
关闭虚拟机,并重新启动它:
# virsh shutdown VM_name # virsh start VM_name
验证
显示主机上虚拟机的虚拟网络接口:
# virsh domiflist VM_name Interface Type Source Model MAC ------------------------------------------------------------------- vnet1 bridge vxlan10-bridge virtio 52:54:00:c5:98:1c
显示连接到
vxlan10-bridge
网桥的接口:# ip link show master vxlan10-bridge 18: vxlan10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 2a:53:bd:d5:b3:0a brd ff:ff:ff:ff:ff:ff 19: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:c5:98:1c brd ff:ff:ff:ff:ff:ff
请注意,
libvirtd
服务会动态更新网桥的配置。当您启动使用了vxlan10-bridge
网络的虚拟机时,主机上对应的vnet*
设备会显示为网桥的端口。使用地址解析协议(ARP)请求来验证虚拟机是否在同一 VXLAN 中:
- 启动同一 VXLAN 中的两个或多个虚拟机。
将 ARP 请求从一个虚拟机发送到另一个虚拟机:
# arping -c 1 192.0.2.2 ARPING 192.0.2.2 from 192.0.2.1 enp1s0 Unicast reply from 192.0.2.2 [52:54:00:c5:98:1c] 1.450ms Sent 1 probe(s) (0 broadcast(s)) Received 1 response(s) (0 request(s), 0 broadcast(s))
如果命令显示回复,则虚拟机位于同一第 2 层域中,在这种情况下,是在同一 VXLAN 中。
安装
iputils
软件包以使用arping
工具。
其他资源
-
virt-install(1)
手册页 -
virt-xml(1)
手册页 -
virsh(1)
手册页 -
arping(8)
手册页
第 10 章 管理 wifi 连接
RHEL 提供多个实用程序和应用程序来配置和连接到 wifi 网络,例如:
-
使用
nmcli
实用程序使用命令行配置连接。 -
使用
nmtui
应用程序在基于文本的用户界面中配置连接。 - 使用 GNOME 系统菜单快速连接到不需要任何配置的 wifi 网络。
-
使用
GNOME Settings
应用程序使用 GNOME 应用程序配置连接。 -
使用
nm-connection-editor
应用程序在图形用户界面中配置连接。 -
使用
network
RHEL 系统角色在一个或多个主机上自动配置连接。
10.1. 支持的 wifi 安全类型
根据安全类型网络支持,您可以更安全地传输数据。
不要连接到不使用加密的网络,或者只支持不安全的 WEP 或 WPA 标准。
RHEL 8 支持以下 wifi 安全类型:
-
None
:加密被禁用,数据在网络中以纯文本形式传输。 -
Enhanced Open
:使用投机无线加密(OWE),设备会协商唯一对主密钥 (PMK) 以在无线网络中加密连接,而无需身份验证。 -
WEP 40/128-bit Key (Hex or ASCII)
: 这个模式的 Wired Equivalent Privacy (WEP) 协议仅以十六进制或 ASCII 格式使用预共享密钥。WEP 已被弃用,并将在 RHEL 9.1 中被删除。 -
WEP 128 位密码
.这个模式的 WEP 协议使用密码短语的 MD5 哈希来生成 WEP 密钥。WEP 已被弃用,并将在 RHEL 9.1 中被删除。 -
动态 WEP (802.1x)
:使用带动态键的 802.1X 和 EAP 的组合。WEP 已被弃用,并将在 RHEL 9.1 中被删除。 -
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 使用 Simultaneous Authentication of Equals (SAE) 而不是预共享密钥 (PSK) 来防止字典攻击。WPA3 使用完美转发保密 (PFS)。
10.2. 使用 nmcli 连接到 wifi 网络
您可以使用 nmcli
实用程序连接到 wifi 网络。当您第一次尝试连接到网络时,实用程序会自动为其创建一个 NetworkManager 连接配置集。如果网络需要额外的设置,如静态 IP 地址,您可以在它自动创建后修改配置集。
先决条件
- 在主机上安装了 wifi 设备。
- 如果存在硬件交换机,启用 wifi 设备。
流程
如果网络管理器 (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 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 ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
重新激活连接:
# nmcli connection up Office
验证
显示活跃连接:
# nmcli connection show --active NAME ID TYPE DEVICE Office 2501eb7e-7b16-4dc6-97ef-7cc460139a58 wifi wlp0s20f3
如果输出列出了您创建的 wifi 连接,则连接会活跃。
Ping 主机名或 IP 地址:
# ping -c 3 example.com
其他资源
-
nm-settings-nmcli(5)
man page
10.3. 使用 GNOME 系统菜单连接到 wifi 网络
您可以使用 GNOME 系统菜单连接到 wifi 网络。当您第一次连接到网络时,GNOME 会为它创建一个 NetworkManager 连接配置集。如果您将连接配置集配置为不自动连接,也可以使用 GNOME 系统菜单使用现有 NetworkManager 连接配置集手动连接到 wifi 网络。
第一次使用 GNOME 系统菜单建立与 wifi 网络的连接存在某种限制。例如,您无法配置 IP 地址设置。在这种情况下,首先配置连接:
先决条件
- 在主机上安装了 wifi 设备。
- 如果存在硬件交换机,启用 wifi 设备。
流程
- 打开顶栏右侧的系统菜单。
-
展开
Wi-Fi Not Connected
条目。 点
Select Network
:- 选择您要连接到的 wifi 网络。
-
点
连接
。 -
如果这是您第一次连接到这个网络,请输入网络的密码,然后点
Connect
。
验证
打开顶栏右侧的系统菜单,验证 wifi 网络是否已连接:
如果网络出现在列表中,它已被连接。
Ping 主机名或 IP 地址:
# ping -c 3 example.com
10.4. 使用 GNOME 设置应用程序连接到 wifi 网络
您可以使用名为 gnome-control-center
的 GNOME 设置
应用程序连接到 wifi 网络并配置连接。当您第一次连接到网络时,GNOME 会为它创建一个 NetworkManager 连接配置集。
在 GNOME 设置
中,您可以为 RHEL 支持的所有 wifi 网络安全类型配置 wifi 连接。
先决条件
- 在主机上安装了 wifi 设备。
- 如果存在硬件交换机,启用 wifi 设备。
步骤
-
按 Super 键,键入
Wi-Fi
,然后按 Enter 键。 - 点您要连接的 wifi 网络的名称。
-
输入网络的密码,点
Connect
。 如果网络需要额外的设置,如静态 IP 地址或 WPA2 个人以外的安全类型:
- 点网络名称旁边的齿轮图标。
可选:在
Details
标签页中配置网络配置集无法自动连接。如果取消激活这个功能,则必须总是手动连接到网络,例如使用
GNOME 设置
或 GNOME 系统菜单。-
在 IPv4 选项卡上配置
IPv4
设置,并在 IPv6 选项卡上配置IPv6
设置。 在
Security
选项卡中,选择网络验证,如WPA3 Personal
,然后输入密码。根据所选安全性,应用程序会显示其他字段。相应地填充它们。详情请参阅 wifi 网络管理员。
-
点
应用
。
验证
打开顶栏右侧的系统菜单,验证 wifi 网络是否已连接:
如果网络出现在列表中,它已被连接。
Ping 主机名或 IP 地址:
# ping -c 3 example.com
10.5. 使用 nmtui 配置 wifi 连接
nmtui
应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui
连接到 wifi 网络。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 Space 选择并取消选择复选框。
步骤
如果您不知道要在连接中使用的网络设备名称,显示可用的设备:
# nmcli device status DEVICE TYPE STATE CONNECTION wlp2s0 wifi unavailable -- ...
启动
nmtui
:# nmtui
-
选择
Edit a connection
,并按 Enter。 -
按
Add
按钮。 -
从网络类型列表中选择
Wi-Fi
,然后按 Enter 。 - 可选:为要创建的 NetworkManager 配置文件输入一个名称。
-
在
Device
字段中输入网络设备名称。 -
在
SSID
字段中输入 Wi-Fi 网络的名称,即服务集标识符(SSID)。 -
将
Mode
字段设为默认值,Client
。 选择
Security
字段,按 Enter,然后从列表中设置网络的验证类型。根据您选择的验证类型,
nmtui
会显示不同的字段。- 填写与验证类型相关的字段。
如果 Wi-Fi 网络需要静态 IP 地址:
-
按协议旁边的
Automatic
按钮,然后从显示的列表中选择Manual
。 -
按您要配置的协议旁边的
Show
按钮,来显示其他字段并填写它们。
-
按协议旁边的
按
OK
按钮来创建并自动激活新连接。-
按
Back
按钮返回到主菜单。 -
选择
Quit
,然后按 Enter 来关闭nmtui
应用程序。
验证
显示活跃连接:
# nmcli connection show --active NAME ID TYPE DEVICE Office 2501eb7e-7b16-4dc6-97ef-7cc460139a58 wifi wlp0s20f3
如果输出列出了您创建的 wifi 连接,则连接会活跃。
Ping 主机名或 IP 地址:
# ping -c 3 example.com
10.6. 使用 nm-connection-editor 配置 wifi 连接
您可以使用 nm-connection-editor
应用程序为无线网络创建连接配置集。在此应用程序中,您可以配置 RHEL 支持的所有 wifi 网络验证类型。
默认情况下,NetworkManager 为连接配置集启用自动连接功能,并在有可用时自动连接到保存的网络。
先决条件
- 在主机上安装了 wifi 设备。
- 如果存在硬件交换机,启用 wifi 设备。
流程
打开终端窗口并输入:
# nm-connection-editor
- 点击 + 按钮来添加一个新的连接。
-
选择
Wi-Fi
连接类型,再点 Create。 - 可选:为连接配置集设置名称。
可选:在
General
选项卡中配置网络配置集无法自动连接。如果取消激活这个功能,则必须总是手动连接到网络,例如使用
GNOME 设置
或 GNOME 系统菜单。-
在
Wi-Fi
选项卡中,在SSID
字段中输入服务设置标识符 (SSID)。 在
Wi-Fi Security
选项卡中,为网络选择身份验证类型,如WPA3 Personal
,然后输入密码。根据所选安全性,应用程序会显示其他字段。相应地填充它们。详情请参阅 wifi 网络管理员。
-
在 IPv4 选项卡上配置
IPv4
设置,并在 IPv6 选项卡上配置IPv6
设置。 -
点击
Save
。 -
关闭
Network Connections
窗口。
验证
打开顶栏右侧的系统菜单,验证 wifi 网络是否已连接:
如果网络出现在列表中,它已被连接。
Ping 主机名或 IP 地址:
# ping -c 3 example.com
10.7. 使用 network RHEL 系统角色使用 802.1X 网络身份验证配置 wifi 连接
使用 RHEL 系统角色,您可以自动创建 Wi-Fi 连接。例如,您可以使用 Ansible playbook 为 wlp1s0
接口远程添加无线连接配置集。创建的配置集使用 802.1X 标准将客户端验证到 Wi-Fi 网络。该 playbook 将连接配置集配置为使用 DHCP。要配置静态 IP 设置,相应地调整 ip
字典中的参数。
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
- 网络支持 802.1X 网络身份验证。
-
您已在受管节点上安装了
wpa_supplicant
软件包。 - DHCP 位于受管节点的网络中。
control 节点上存在 TLS 身份验证所需的以下文件:
-
客户端密钥存储在
/srv/data/client.key
文件中。 -
客户端证书存储在
/srv/data/client.crt
文件中。 -
CA 证书存储在
/srv/data/ca.crt
文件中。
-
客户端密钥存储在
流程
创建包含以下内容的 playbook 文件,如
~/enable-802.1x.yml
:--- - name: Configure a wifi connection with 802.1X authentication hosts: managed-node-01.example.com tasks: - name: Copy client key for 802.1X authentication copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0400 - name: Copy client certificate for 802.1X authentication copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - block: - import_role: name: linux-system-roles.network vars: network_connections: - name: Configure the Example-wifi profile interface_name: wlp1s0 state: up type: wireless autoconnect: yes ip: dhcp4: true auto6: true wireless: ssid: "Example-wifi" key_mgmt: "wpa-eap" ieee802_1x: identity: "user_name" eap: tls private_key: "/etc/pki/tls/client.key" private_key_password: "password" private_key_password_flags: none client_cert: "/etc/pki/tls/client.pem" ca_cert: "/etc/pki/tls/cacert.pem" domain_suffix_match: "example.com"
运行 playbook:
# ansible-playbook ~/enable-802.1x.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
10.8. 使用 nmcli 在现有配置集中使用 802.1X 网络身份验证配置 wifi 连接
使用 nmcli
工具,您可以将客户端配置为向网络进行身份验证。例如,您可以在名为 wlp1s0
的 NetworkManager wifi 连接配置文件中使用 Microsoft Challenge-Handshake Authentication Protocol 版本 2 (MSCHAPv2)配置保护扩展验证协议(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
参数设为0x1
。有了这个设置,在具有 GNOME 桌面环境或运行nm-applet
的服务器上,NetworkManager 从这些服务中检索密码。在其他情况下,NetworkManager 会提示输入密码。如果客户端需要验证验证器的证书,请将连接配置文件中的
802-1x.ca-cert
参数设为 CA 证书的路径:# nmcli connection modify wlp1s0 802-1x.ca-cert /etc/pki/ca-trust/source/anchors/ca.crt
注意为了安全起见,红帽建议使用验证器的证书,以使客户端能够验证验证器的身份。
激活连接配置集:
# nmcli connection up wlp1s0
验证
- 访问需要网络身份验证的网络上的资源。
其他资源
- 管理 wifi 连接
-
nm-settings(5)
手册页 -
nmcli(1)
手册页
10.9. 手动设置无线规范域
在 RHEL 上,udev
规则执行 setregdomain
工具来设置无线规范域。然后,实用程序为内核提供此信息。
默认情况下,setregdomain
会尝试自动决定国家代码。如果此操作失败,则无线规范域设置可能会出错。要临时解决这个问题,您可以手动设置国家代码。
手动设置规范域将禁用自动检测。因此,如果您稍后在不同的国家/地区使用计算机,之前配置的设置可能不再正确。在这种情况下,删除 /etc/sysconfig/regdomain
文件以切回到自动检测,或使用此流程再次更新规范域设置。
流程
可选:显示当前规范域设置:
# 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 ...
其他资源
-
setregdomain(1)
手册页 -
iw(8)
手册页 -
Specification.bin(5)
手册页 - ISO 3166 国家代码
第 11 章 将 RHEL 配置为 wifi 接入点
在具有 wifi 设备的主机上,您可以使用 NetworkManager 将这个主机配置为接入点。然后,无线客户端可以使用访问点连接到 RHEL 主机或网络中的服务。
当您配置接入点时,NetworkManager 会自动:
-
配置
dnsmasq
服务来为客户端提供 DHCP 和 DNS 服务 - 启用 IP 转发
-
添加
nftables
防火墙规则来伪装来自 wifi 设备的流量并配置 IP 转发
11.1. 确定 wifi 设备是否支持访问点模式
要使用 wifi 设备作为接入点,该设备必须支持此功能。您可以使用 nmcli
实用程序确定硬件支持访问点模式。
前提条件
- 在主机上安装了 wifi 设备。
流程
列出 wifi 设备来识别应提供访问点的 wifi 设备:
# nmcli device status | grep wifi wlp0s20f3 wifi disconnected --
验证该设备是否支持访问点模式:
# nmcli -f WIFI-PROPERTIES.AP device show wlp0s20f3 WIFI-PROPERTIES.AP: yes
11.2. 将 RHEL 配置为 WPA2 或 WPA3 个人访问令牌
Wi-Fi Protected Access 2 (WPA2) 和 Wi-Fi Protected Access 3 (WPA3) 个人在无线网络中提供安全验证方法。用户可以使用预共享密钥 (PSK) 连接到访问点。
前提条件
- wifi 设备支持在接入点模式下运行。
- wifi 设备没有使用。
- 主机可以访问互联网。
流程
安装
dnsmasq
和NetworkManager-wifi
软件包:# yum install dnsmasq NetworkManager-wifi
NetworkManager 使用
dnsmasq
服务为访问点的客户端提供 DHCP 和 DNS 服务。创建初始访问点配置:
# nmcli device wifi hotspot ifname wlp0s20f3 con-name Example-Hotspot ssid Example-Hotspot password "password"
此命令在
wlp0s20f3
设备(提供 WPA2 和 WPA3 个人访问令牌)上创建一个连接配置集。无线网络的名称,Service Set Identifier (SSID) 是Example-Hotspot
,并使用预共享密钥密码
。可选:将访问点配置为只支持 WPA3:
# nmcli connection modify Example-Hotspot 802-11-wireless-security.key-mgmt sae
默认情况下,NetworkManager 使用 IP 地址
10.42.0.1
作为 wifi 设备,并将剩余的10.42.0.0/24
子网的 IP 地址分配给客户端。要配置不同的子网和 IP 地址,请输入:# nmcli connection modify Example-Hotspot ipv4.addresses 192.0.2.254/24
您设置的 IP 地址(本例中为
192.0.2.254
)是 NetworkManager 分配给 wifi 设备的 IP 地址。客户端将此 IP 地址用作默认网关和 DNS 服务器。激活连接配置集:
# nmcli connection up Example-Hotspot
验证
在服务器中:
验证 NetworkManager 是否启动了
dnsmasq
服务,并且服务侦听端口 67 (DHCP) 和 53 (DNS):# ss -tulpn | egrep ":53|:67" udp UNCONN 0 0 10.42.0.1:53 0.0.0.0:* users:(("dnsmasq",pid=55905,fd=6)) udp UNCONN 0 0 0.0.0.0:67 0.0.0.0:* users:(("dnsmasq",pid=55905,fd=4)) tcp LISTEN 0 32 10.42.0.1:53 0.0.0.0:* users:(("dnsmasq",pid=55905,fd=7))
显示
nftables
规则集,以确保 NetworkManager 为来自10.42.0.0/24
子网的流量启用转发和伪装:# nft list ruleset table ip nm-shared-wlp0s20f3 { chain nat_postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.42.0.0/24 ip daddr != 10.42.0.0/24 masquerade } chain filter_forward { type filter hook forward priority filter; policy accept; ip daddr 10.42.0.0/24 oifname "wlp0s20f3" ct state { established, related } accept ip saddr 10.42.0.0/24 iifname "wlp0s20f3" accept iifname "wlp0s20f3" oifname "wlp0s20f3" accept iifname "wlp0s20f3" reject oifname "wlp0s20f3" reject } }
在带有 wifi 适配器的客户端中:
显示可用网络列表:
# nmcli device wifi IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 00:53:00:88:29:04 Example-Hotspot Infra 11 130 Mbit/s 62 ▂▄▆_ WPA3 ...
-
连接到
Example-Hotspot
无线网络。请参阅管理 Wi-Fi 连接。 对远程网络或互联网中的主机发出 ping 以验证连接是否正常工作:
# ping -c 3 www.redhat.com
其他资源
- 确定 wifi 设备是否支持访问点模式
-
nm-settings(5)
手册页
第 12 章 更改主机名
系统的主机名是系统本身的名称。您可在安装 RHEL 时设置名称,之后可以更改它。
12.1. 使用 nmcli 更改主机名
您可以使用 nmcli
工具更新系统主机名。请注意,其他工具可能会使用不同的术语,如静态或持久主机名。
流程
可选:显示当前主机名设置:
# nmcli general hostname old-hostname.example.com
设置新主机名:
# nmcli general hostname new-hostname.example.com
NetworkManager 自动重启
systemd-hostnamed
来激活新主机名。但是,如果您不想重启主机,则需要以下手动操作:重启在服务启动时仅读取主机名的所有服务:
# systemctl restart <service_name>
- 活跃的 shell 用户必须重新登录才能使更改生效。
验证
显示主机名:
# nmcli general hostname new-hostname.example.com
12.2. 使用 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
来激活新主机名。但是,如果您不想重启主机,则需要以下手动操作:重启在服务启动时仅读取主机名的所有服务:
# systemctl restart <service_name>
- 活跃的 shell 用户必须重新登录才能使更改生效。
验证
显示主机名:
# hostnamectl status --static new-hostname.example.com
其他资源
-
hostnamectl(1)
-
systemd-hostnamed.service(8)
第 13 章 RHEL 中支持旧的网络脚本
默认情况下,RHEL 使用 NetworkManager 配置和管理网络连接,/usr/sbin/ifup
和 /usr/sbin/ifdown
脚本使用 NetworkManager 来处理 /etc/sysconfig/network-scripts/
目录中的 ifcfg
文件。
旧脚本在 RHEL 8 中已弃用,并将在以后的 RHEL 主要版本中被删除。如果您仍然使用旧的网络脚本,例如,因为您从较早的版本升级到 RHEL 8,红帽建议将您的配置迁移至 NetworkManager。
13.1. 安装旧的网络脚本
如果您需要使用弃用的网络脚本,而不是使用 NetworkManager 来处理网络配置,您可以安装它们。在这种情况下,/usr/sbin/ifup
和 /usr/sbin/ifdown
脚本链接到管理网络配置的已弃用的 shell 脚本。
流程
安装
network-scripts
软件包:# yum install network-scripts
第 14 章 端口镜像
网络管理员可以使用端口镜像复制从一个网络设备传输到另一个网络设备的入站和出站网络流量。管理员使用端口镜像来监控网络流量,并收集网络流量,用于:
- 调试网络问题并调整网络流
- 检查并分析网络流量,来对网络问题进行故障排除
- 检测入侵
14.1. 使用 nmcli 对网络接口进行镜像
您可以使用 NetworkManager 配置端口镜像。以下流程将流量从 enp1s0
镜像到 enp7s0
,方法是添加流量控制 (tc
) 规则并过滤到 enp1s0
网络接口。
先决条件
- 一个镜像网络流量的网络接口。
流程
添加您要镜像网络流量的网络连接配置集:
# nmcli connection add type ethernet ifname enp1s0 con-name enp1s0 autoconnect no
将
prio
qdisc
附加到带有10:
handle 的出口(传出)流量的enp1s0
:# nmcli connection modify enp1s0 +tc.qdisc "root prio handle 10:"
在没有子项的情况下附加
prio
qdisc
可允许附加过滤器。为入口流量添加
qdisc
,使用ffff:
handle:# nmcli connection modify enp1s0 +tc.qdisc "ingress handle ffff:"
添加以下过滤器,以匹配入口和出口
qdiscs
上的数据包,并将其镜像到enp7s0
:# nmcli connection modify enp1s0 +tc.tfilter "parent ffff: matchall action mirred egress mirror dev enp7s0" # nmcli connection modify enp1s0 +tc.tfilter "parent 10: matchall action mirred egress mirror dev enp7s0"
matchall
过滤器与所有数据包匹配,mirred
操作会将数据包重定向到目的地。激活连接:
# nmcli connection up enp1s0
验证
安装
tcpdump
工具:# yum install tcpdump
显示目标设备上镜像的流量 (
enp7s0
):# tcpdump -i enp7s0
其他资源
第 15 章 配置 NetworkManager 以忽略某些设备
默认情况下,NetworkManager 管理除回送(lo
)设备以外的所有设备。但是,您可以将 NetworkManager 配置为 非受管设备
,以忽略某些设备。使用这个设置,您可以手动管理这些设备,例如使用脚本。
15.1. 永久将设备配置为网络管理器(NetworkManager)中非受管设备
您可以根据以下条件将设备永久配置为 非受管
,如接口名称、MAC 地址或设备类型。
要临时将网络设备配置为 unmanaged
,请参阅 在 NetworkManager 中临时将设备配置为非受管。
步骤
可选:显示要识别您要设置为
非受管
的设备或 MAC 地址的设备列表:# 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/99-unmanaged-devices.conf
文件:要将特定接口配置为非受管接口,请添加:
[keyfile] unmanaged-devices=interface-name:enp1s0
要将具有特定 MAC 地址的设备配置为非受管,请添加:
[keyfile] unmanaged-devices=mac:52:54:00:74:79:56
要将特定类型的所有设备配置为 unmanaged,请添加:
[keyfile] unmanaged-devices=type:ethernet
要将多个设备设置为非受管,请使用分号分隔
unmanaged-devices
参数中的条目:重新载入
NetworkManager
服务:# systemctl reload NetworkManager
验证
显示设备列表:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unmanaged -- ...
enp1s0
设备旁边的unmanaged
状态表示 NetworkManager 没有管理该设备。
其他资源
-
NetworkManager.conf(5)
man page
15.2. 将设备临时配置为在 NetworkManager 中不被管理
您可以将设备临时配置为 非受管
。
可以使用这个方法用于特定目的,如测试。要永久将网络设备配置为 unmanaged
,请参阅 在 NetworkManager 中永久将设备配置为非受管。
步骤
可选:显示设备列表,以便识别您要将其设置为
unmanaged
的设备:# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet disconnected -- ...
将
enp1s0
设备设置为unmanaged
状态:# nmcli device set enp1s0 managed no
验证
显示设备列表:
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unmanaged -- ...
enp1s0
设备旁边的unmanaged
状态表示 NetworkManager 没有管理该设备。
其他资源
-
NetworkManager.conf(5)
man page
第 16 章 配置网络设备以接受来自所有 MAC 地址的流量
网络设备通常会拦截和读取编程的控制器接收的数据包。您可以在虚拟交换机或端口组层面上,将网络设备配置为接受来自所有 MAC 地址的流量。
您可以使用这个网络模式来:
- 诊断网络连接问题
- 出于安全原因监控网络活动
- 拦截传输中的私有数据或网络中的入侵
您可以为除 InfiniBand
以外的任何类型的网络设备启用此模式。
16.1. 临时将设备配置为接受所有流量
您可以使用 ip
工具临时将网络设备配置为接受所有流量,而不考虑 MAC 地址。
步骤
可选:显示网络接口以标识您要接收所有流量的接口:
# ip address show 1: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 98:fa:9b:a4:34:09 brd ff:ff:ff:ff:ff:ff ...
修改设备以启用或禁用此属性:
为
enp1s0
启用accept-all-mac-addresses
模式:# ip link set enp1s0 promisc on
为
enp1s0
禁用accept-all-mac-addresses
模式:# ip link set enp1s0 promisc off
验证
验证
accept-all-mac-addresses
模式是否已启用:# ip link show enp1s0 1: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether 98:fa:9b:a4:34:09 brd ff:ff:ff:ff:ff:ff
设备描述中的
PROMISC
标志表示启用了该模式。
16.2. 使用 nmcli 永久配置网络设备来接受所有流量
您可以使用 nmcli
实用程序永久配置网络设备来接受所有流量,而不考虑 MAC 地址。
步骤
可选:显示网络接口以标识您要接收所有流量的接口:
# ip address show 1: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 98:fa:9b:a4:34:09 brd ff:ff:ff:ff:ff:ff ...
如果没有任何连接,您可以创建一个新的连接。
修改网络设备以启用或禁用此属性。
为
enp1s0
启用ethernet.accept-all-mac-addresses
模式:# nmcli connection modify enp1s0 ethernet.accept-all-mac-addresses yes
为
enp1s0
禁用accept-all-mac-addresses
模式:# nmcli connection modify enp1s0 ethernet.accept-all-mac-addresses no
应用更改,重新激活连接:
# nmcli connection up enp1s0
验证
验证是否启用了
ethernet.accept-all-mac-addresses
模式:# nmcli connection show enp1s0 ... 802-3-ethernet.accept-all-mac-addresses:1 (true)
802-3-ethernet.accept-all-mac-addresses: true
表示该模式已启用。
16.3. 使用 nmstatectl 永久配置网络设备来接受所有流量
您可以使用 nmstatectl
工具永久将网络设备配置为接受所有流量,而不考虑 MAC 地址。
先决条件
-
nmstate
软件包已安装。 -
用于配置设备的
enp1s0.yml
文件可用。
步骤
编辑
enp1s0
连接的现有enp1s0.yml
文件,并将以下内容添加到其中:--- interfaces: - name: enp1s0 type: ethernet state: up accept -all-mac-address: true
应用网络设置:
# nmstatectl apply ~/enp1s0.yml
验证
验证是否启用了
802-3-ethernet.accept-all-mac-addresses
模式:# nmstatectl show enp1s0 interfaces: - name: enp1s0 type: ethernet state: up accept-all-mac-addresses: true ...
802-3-ethernet.accept-all-mac-addresses: true
表示该模式已启用。
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory
第 17 章 为使用带有 FreeRADIUS 后端的 hostapd 的 LAN 客户端设置 802.1x 网络身份验证服务
IEEE 802.1X 标准定义了安全身份验证和授权方法,以保护网络不接受未授权的客户端。使用 hostapd
服务和 FreeRADIUS,您可以在您的网络中提供网络访问控制(NAC)。
在本文档中,RHEL 主机充当一个网桥,以使用现有的网络连接不同的客户端。但是,RHEL 主机只授权认证的客户端可以访问网络。

17.1. 前提条件
全新安装 FreeRADIUS.
如果
freeradius
软件包已安装,请删除/etc/raddb/
目录,卸载,然后再次安装该软件包。不要使用yum reinstall
命令重新安装软件包,因为/etc/raddb/
目录中的权限和符号链接会不同。
17.2. 在验证器中设置网桥
网桥是一个链路层设备,它根据 MAC 地址表在主机和网络之间转发流量。如果将 RHEL 设置为 802.1X 验证器,请将要在其上执行身份验证的接口和 LAN 接口添加到网桥。
前提条件
- 服务器有多个以太网接口。
步骤
创建网桥接口:
# nmcli connection add type bridge con-name br0 ifname br0
将太网接口分配给网桥:
# nmcli connection add type ethernet slave-type bridge con-name br0-port1 ifname enp1s0 master br0 # nmcli connection add type ethernet slave-type bridge con-name br0-port2 ifname enp7s0 master br0 # nmcli connection add type ethernet slave-type bridge con-name br0-port3 ifname enp8s0 master br0 # nmcli connection add type ethernet slave-type bridge con-name br0-port4 ifname enp9s0 master br0
启用网桥以转发 LAN(EAPOL)数据包上的可扩展验证协议:
# nmcli connection modify br0 group-forward-mask 8
配置连接以自动激活端口:
# nmcli connection modify br0 connection.autoconnect-slaves 1
激活连接:
# nmcli connection up br0
验证
显示作为特定网桥端口的以太网设备的链接状态:
# ip link show master br0 3: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff ...
验证
br0
设备上是否启用了 EAPOL 数据包的转发:# cat /sys/class/net/br0/bridge/group_fwd_mask 0x8
如果命令返回
0x8
,则启用了转发。
其他资源
-
nm-settings(5)
手册页
17.3. FreeRADIUS 的证书要求
对于安全的 FreeRADIUS 服务,您需要 TLS 证书来满足不同的目的:
用于加密连接到服务器的 TLS 服务器证书。使用信任的证书颁发机构(CA)来发布证书。
服务器证书要求将扩展密钥使用(EKU)字段设为
TLS Web Server Authentication
。由同一 CA 为扩展身份验证协议传输层安全(EAP-TLS)发布的客户端证书。EAP-TLS 提供基于证书的身份验证,并默认启用。
客户端证书需要其 EKU 字段设为
TLS Web Client Authentication
。
要安全连接,请使用您公司的 CA 或创建自己的 CA 来为 FreeRADIUS 发布证书。如果使用公共 CA,则您允许其验证用户,并为 EAP-TLS 发布客户端证书。
17.4. 在 FreeRADIUS 服务器上,出于测试目的创建一组证书
出于测试目的,freeradius
软件包会在 /etc/raddb/certs/
目录中安装脚本和配置文件,以创建自己的证书颁发机构(CA)并发布证书。
如果您使用默认配置,这些脚本生成的证书会在 60 天后过期,密钥使用不安全的密码("whatever")。但是,您可以自定义 CA、服务器和客户端配置。
执行此流程后,会创建本文档稍后所需要的以下文件:
-
/etc/raddb/certs/ca.pem
: CA 证书 -
/etc/raddb/certs/server.key
: 服务器证书的私钥 -
/etc/raddb/certs/server.pem
: 服务器证书 -
/etc/raddb/certs/client.key
: 客户端证书的私钥 -
/etc/raddb/certs/client.pem
: 客户端证书
前提条件
-
freeradius
软件包已安装。
流程
进入
/etc/raddb/certs/
目录:# cd /etc/raddb/certs/
可选:在
/etc/raddb/certs/ca.cnf
文件中自定义 CA 配置:... [ req ] default_bits = 2048 input_password = ca_password output_password = ca_password ... [certificate_authority] countryName = US stateOrProvinceName = North Carolina localityName = Raleigh organizationName = Example Inc. emailAddress = admin@example.org commonName = "Example Certificate Authority" ...
可选:在
/etc/raddb/certs/server.cnf
文件中自定义服务器配置:... [ CA_default ] default_days = 730 ... [ req ] distinguished_name = server default_bits = 2048 input_password = key_password output_password = key_password ... [server] countryName = US stateOrProvinceName = North Carolina localityName = Raleigh organizationName = Example Inc. emailAddress = admin@example.org commonName = "Example Server Certificate" ...
可选:在
/etc/raddb/certs/client.cnf
文件中自定义客户端配置:... [ CA_default ] default_days = 365 ... [ req ] distinguished_name = client default_bits = 2048 input_password = password_on_private_key output_password = password_on_private_key ... [client] countryName = US stateOrProvinceName = North Carolina localityName = Raleigh organizationName = Example Inc. emailAddress = user@example.org commonName = user@example.org ...
创建证书:
# make all
将
/etc/raddb/certs/server.pem
文件中的组更改为radiusd
:# chgrp radiusd /etc/raddb/certs/server.pem
其他资源
-
/etc/raddb/certs/README.md
17.5. 配置 FreeRADIUS 以使用 EAP 安全地验证网络客户端
FreeRADIUS 支持通过不同的扩展验证协议(EAP)的方法。但是,对于安全网络,请配置 FreeRADIUS 以仅支持以下安全 EAP 身份验证方法:
- EAP-TLS(传输层安全)使用安全 TLS 连接来验证使用证书的客户端。要使用 EAP-TLS,需要每个网络客户端的 TLS 客户端证书,以及服务器的服务器证书。请注意,同样的证书颁发机构(CA)必须已发布了证书。始终使用您自己的 CA 来创建证书,因为您使用的 CA 发布的所有客户端证书都可以向 FreeRADIUS 服务器进行身份验证。
- EAP-TTLS(隧道传输层安全)使用安全 TLS 连接,并使用密码认证协议(PAP)或挑战握手身份验证协议(CHAP)等机制来验证客户端。要使用 EAP-TTLS,您需要一个 TLS 服务器证书。
- EAP-PEAP(受保护的身份验证协议)使用安全 TLS 连接作为外部身份验证协议来设置隧道。验证器验证 RADIUS 服务器的证书。之后,请求方通过使用 Microsoft 挑战握手身份验证协议版本 2(MS-CHAPv2)或其他方法加密的隧道来进行身份验证。
默认的 FreeRADIUS 配置文件充当文档,并描述了所有参数和指令。如果要禁用某些特性,请注释掉它们,而不是删除配置文件中的相应部分。这可让您保留配置文件和包含的文档的结构。
前提条件
-
freeradius
软件包已安装。 -
/etc/raddb/
目录中的配置文件保持不变,就像freeradius
软件包提供的那样。 服务器上存在以下文件:
-
FreeRADIUS 主机的 TLS 私钥:
/etc/raddb/certs/server.key
-
FreeRADIUS 主机的 TLS 服务器证书:
/etc/raddb/certs/server.pem
-
TLS CA 证书:
/etc/raddb/certs/ca.pem
如果您将文件存储在不同的位置或者它们有不同的名称,请在
/etc/raddb/mods-available/eap
文件中相应地设置private_key_file
、certificate_file
和ca_file
参数。-
FreeRADIUS 主机的 TLS 私钥:
流程
如果带有 Diffie-Hellman(DH)参数的
/etc/raddb/certs/dh
不存在,就创建一个。例如,要创建带有 2048 位素数的 DH 文件,请输入:# openssl dhparam -out /etc/raddb/certs/dh 2048
为了安全起见,请不要使用小于 2048 位素数的 DH 文件。根据位数,文件的创建可能需要几分钟。
使用 DH 参数对 TLS 私钥、服务器证书、CA 证书和文件设置安全权限:
# chmod 640 /etc/raddb/certs/server.key /etc/raddb/certs/server.pem /etc/raddb/certs/ca.pem /etc/raddb/certs/dh # chown root:radiusd /etc/raddb/certs/server.key /etc/raddb/certs/server.pem /etc/raddb/certs/ca.pem /etc/raddb/certs/dh
编辑
/etc/raddb/mods-available/eap
文件:在
private_key_password
参数中设置私钥的密码:eap { ... tls-config tls-common { ... private_key_password = key_password ... } }
根据您的环境,将
eap
指令中的default_eap_type
参数设为您使用的主要 EAP 类型:eap { ... default_eap_type = ttls ... }
对于安全环境,请仅使用
ttls
、tls
或peap
。注释掉
md5
指令,以禁用不安全的 EAP-MD5 身份验证方法:eap { ... # md5 { # } ... }
请注意,在默认的配置文件中,其他不安全的 EAP 身份验证方法默认被注释掉了。
编辑
/etc/raddb/sites-available/default
文件,然后注释掉eap
以外的所有身份验证方法:authenticate { ... # Auth-Type PAP { # pap # } # Auth-Type CHAP { # chap # } # Auth-Type MS-CHAP { # mschap # } # mschap # digest ... }
这只会启用 EAP,并禁用纯文本身份验证方法。
编辑
/etc/raddb/clients.conf
文件:在
localhost
和localhost_ipv6
客户端指令中设置安全密码:client localhost { ipaddr = 127.0.0.1 ... secret = client_password ... } client localhost_ipv6 { ipv6addr = ::1 secret = client_password }
如果远程主机上的 RADIUS 客户端(如网络验证器)应能够访问 FreeRADIUS 服务,请为它们添加相应的客户端指令:
client hostapd.example.org { ipaddr = 192.0.2.2/32 secret = client_password }
ipaddr
参数接受 IPv4 和 IPv6 地址,您可以使用可选的无类别域间路由(CIDR)表示法来指定范围。但是,在这个参数中您只能设置一个值。例如,若要授予对 IPv4 和 IPv6 地址的访问权限,请添加两个客户端指令。为客户端指令使用一个描述性名称,如主机名或一个描述 IP 范围在哪里使用的词语。
如果要使用 EAP-TTLS 或 EAP-PEAP,请将用户添加到
/etc/raddb/users
文件中:example_user Cleartext-Password := "user_password"
对于应使用基于证书的身份验证(EAP-TLS)的用户,不要添加任何条目。
验证配置文件:
# radiusd -XC ... Configuration appears to be OK
启用并启动
radiusd
服务:# systemctl enable --now radiusd
故障排除
停止
radiusd
服务:# systemctl stop radiusd
以 debug 模式启动该服务:
# radiusd -X ... Ready to process requests
-
在 FreeRADIUS 主机上执行验证测试,如
验证
部分中所述。
后续步骤
- 禁用不再需要身份验证方法,以及您不使用的其他功能。
17.6. 在有线网络中将 hostapd 配置为验证器
主机访问点守护进程(hostapd
)服务可在有线网络中充当验证器,来提供 802.1X 身份验证。为此,hostapd
服务需要一个用来验证客户端的 RADIUS 服务器。
hostapd
服务提供集成的 RADIUS 服务器。但是,使用集成的 RADIUS 服务器只用于测试目的。对于生产环境,请使用 FreeRADIUS 服务器,它支持其他特性,如不同的身份验证方法和访问控制。
hostapd
服务不与流量平面交互。该服务仅充当身份验证器。例如,使用脚本或服务,该脚本或服务使用 hostapd
控制接口、根据身份验证事件的结果来允许或拒绝流量。
先决条件
-
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 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 # =========================== # Local IP address used as NAS-IP-Address own_ip_addr=192.0.2.2 # Unique NAS-Identifier within scope of RADIUS server nas_identifier=hostapd.example.org # RADIUS authentication server auth_server_addr=192.0.2.1 auth_server_port=1812 auth_server_shared_secret=client_password # RADIUS accounting server acct_server_addr=192.0.2.1 acct_server_port=1813 acct_server_shared_secret=client_password
有关此配置中使用的参数的详情,请查看
/usr/share/doc/hostapd/hostapd/hostapd.conf
示例配置文件中的描述。启用并启动
hostapd
服务:# systemctl enable --now hostapd
故障排除
停止
hostapd
服务:# systemctl stop hostapd
以 debug 模式启动该服务:
# hostapd -d /etc/hostapd/hostapd.conf
-
在 FreeRADIUS 主机上执行验证测试,如
验证
部分中所述。
其它资源
-
hostapd.conf(5)
手册页 -
/usr/share/doc/hostapd/hostapd.conf
file
17.7. 针对 FreeRADIUS 服务器或验证器测试 EAP-TTLS 身份验证
要测试在隧道传输层安全(EAP-TTLS)上使用可扩展身份验证协议(EAP-TTLS)的身份验证是否按预期工作,请运行此流程:
- 设置 FreeRADIUS 服务器后
-
将
hostapd
服务设为 802.1X 网络身份验证验证器后。
此流程中使用的测试工具的输出提供有关 EAP 通信的其他信息,并帮助您调试问题。
先决条件
当您要验证:
FreeRADIUS 服务器:
-
hostapd
软件包提供的eapol_test
工具已安装。 - 您在其上运行此流程的客户端已在 FreeRADIUS 服务器的客户端数据库中被授权。
-
-
由同命软件包提供的验证器
wpa_supplicant
工具已安装。
-
您在
/etc/pki/tls/certs/ca.pem
文件中存储了证书颁发机构(CA)证书。
步骤
使用以下内容创建
/etc/wpa_supplicant/wpa_supplicant-TTLS.conf
文件: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="example_user" password="user_password" # CA certificate to validate the RADIUS server's identity ca_cert="/etc/pki/tls/certs/ca.pem" }
要向以下进行身份验证:
FreeRADIUS 服务器,请输入:
# eapol_test -c /etc/wpa_supplicant/wpa_supplicant-TTLS.conf -a 192.0.2.1 -s client_password ... EAP: Status notification: remote certificate verification (param=success) ... CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully ... SUCCESS
-a
选项定义了 FreeRADIUS 服务器的 IP 地址,而-s
选项指定您要在其上运行 FreeRADIUS 服务器的客户端配置中命令的主机的密码。验证器,请输入:
# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-TTLS.conf -D wired -i enp0s31f6 ... enp0s31f6: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully ...
-i
选项指定wpa_supplicant
通过 LAN(EAPOL)数据包发送扩展验证协议的网络接口名称。若要了解更多调试信息,请将
-d
选项传给命令。
其他资源
-
/usr/share/doc/wpa_supplicant/wpa_supplicant.conf
file
17.8. 针对 FreeRADIUS 服务器或验证器测试 EAP-TLS 身份验证
要测试使用可扩展身份验证协议(EAP)传输层安全(EAP-TLS)的身份验证是否按预期工作,请执行以下流程:
- 设置 FreeRADIUS 服务器后
-
将
hostapd
服务设为 802.1X 网络身份验证验证器后。
此流程中使用的测试工具的输出提供有关 EAP 通信的其他信息,并帮助您调试问题。
先决条件
当您要验证:
FreeRADIUS 服务器:
-
hostapd
软件包提供的eapol_test
工具已安装。 - 您在其上运行此流程的客户端已在 FreeRADIUS 服务器的客户端数据库中被授权。
-
-
由同命软件包提供的验证器
wpa_supplicant
工具已安装。
-
您在
/etc/pki/tls/certs/ca.pem
文件中存储了证书颁发机构(CA)证书。 - 发布客户端证书的 CA 与发布 FreeRADIUS 服务器的服务器证书的 CA 是同一个。
-
您将客户端证书存储在
/etc/pki/tls/certs/client.pem
文件中。 -
将客户端的私钥存储在
/etc/pki/tls/private/client.key
中
流程
使用以下内容创建
/etc/wpa_supplicant/wpa_supplicant-TLS.conf
文件:ap_scan=0 network={ eap=TLS eapol_flags=0 key_mgmt=IEEE8021X identity="user@example.org" client_cert="/etc/pki/tls/certs/client.pem" private_key="/etc/pki/tls/private/client.key" private_key_passwd="password_on_private_key" # CA certificate to validate the RADIUS server's identity ca_cert="/etc/pki/tls/certs/ca.pem" }
要向以下进行身份验证:
FreeRADIUS 服务器,请输入:
# eapol_test -c /etc/wpa_supplicant/wpa_supplicant-TLS.conf -a 192.0.2.1 -s client_password ... EAP: Status notification: remote certificate verification (param=success) ... CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully ... SUCCESS
-a
选项定义了 FreeRADIUS 服务器的 IP 地址,而-s
选项指定您要在其上运行 FreeRADIUS 服务器的客户端配置中命令的主机的密码。验证器,请输入:
# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-TLS.conf -D wired -i enp0s31f6 ... enp0s31f6: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully ...
-i
选项指定wpa_supplicant
通过 LAN(EAPOL)数据包发送扩展验证协议的网络接口名称。若要了解更多调试信息,请将
-d
选项传给命令。
其他资源
-
/usr/share/doc/wpa_supplicant/wpa_supplicant.conf
file
17.9. 根据 hostapd 验证事件阻止和允许流量
hostapd
服务不与流量平面交互。该服务仅充当身份验证器。但是,您可以编写一个脚本,根据身份验证事件的结果来允许或拒绝流量。
此流程不受支持,没有企业级的解决方案。它只演示如何通过评估由 hostapd_cli
检索的事件来阻止或允许流量。
当 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
服务器上执行这此流程。
先决条件
-
hostapd
服务已配置,服务已准备好对客户端进行身份验证。
流程
使用以下内容创建
/usr/local/bin/802-1x-tr-mgmt
文件:#!/bin/sh if [ "x$1" == "xblock_all" ] then nft delete table bridge tr-mgmt-br0 2>/dev/null || true nft -f - << EOF table bridge tr-mgmt-br0 { 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 "br0" jump accesscontrol } } EOF echo "802-1x-tr-mgmt Blocking all traffic through br0. Traffic for given host will be allowed after 802.1x authentication" elif [ "x$1" == "xallow_all" ] then nft delete table bridge tr-mgmt-br0 echo "802-1x-tr-mgmt Allowed all forwarding again" fi case ${2:-NOTANEVENT} in AP-STA-CONNECTED | CTRL-EVENT-EAP-SUCCESS | CTRL-EVENT-EAP-SUCCESS2) nft add element bridge tr-mgmt-br0 allowed_macs { $3 } echo "$1: Allowed traffic from $3" ;; AP-STA-DISCONNECTED | CTRL-EVENT-EAP-FAILURE) nft delete element bridge tr-mgmt-br0 allowed_macs { $3 } echo "802-1x-tr-mgmt $1: Denied traffic from $3" ;; esac
使用以下内容创建
/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=-/bin/sh -c '/usr/sbin/tc qdisc del dev %i ingress > /dev/null 2>&1' ExecStartPre=-/bin/sh -c '/usr/sbin/tc qdisc del dev %i clsact > /dev/null 2>&1' ExecStartPre=/usr/sbin/tc qdisc add dev %i clsact ExecStartPre=/usr/sbin/tc filter add dev %i ingress pref 10000 protocol 0x888e matchall action ok index 100 ExecStartPre=/usr/sbin/tc filter add dev %i ingress pref 10001 protocol all matchall action drop index 101 ExecStart=/usr/sbin/hostapd_cli -i %i -a /usr/local/bin/802-1x-tr-mgmt ExecStopPost=-/usr/sbin/tc qdisc del dev %i clsact [Install] WantedBy=multi-user.target
重新载入 systemd:
# systemctl daemon-reload
启用并启动接口名称
hostapd
正在侦听的802-1x-tr-mgmt
服务:# systemctl enable --now 802-1x-tr-mgmt@br0.service
验证
通过客户端向网络进行身份验证。请参阅:
其他资源
-
systemd.service(5)
手册页
第 18 章 使用证书保存在文件系统上的 802.1X 标准来向网络验证 RHEL 客户端
管理员通常使用基于 IEEE 802.1X 标准的基于端口的网络访问控制(NAC)来保护网络不受未授权 LAN 和 Wi-Fi 客户端的影响。
18.1. 使用 nmcli 在现有以太网连接中配置 802.1X 网络身份验证
使用 nmcli
工具,您可以将客户端配置为向网络进行身份验证。例如,在名为 enp1s0
的现有 NetworkManager 以太网连接配置文件中配置 TLS 身份验证,以向网络进行身份验证。
先决条件
- 网络支持 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
文件中。
-
存储的客户端密钥位于
-
wpa_supplicant
软件包已安装。
步骤
将扩展验证协议(EAP)设置为
tls
,将路径设置为客户端证书和密钥文件:# 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/certs/certs/client.key
请注意,您必须在一个命令中设置
802-1x.eap
、802-1x.client-cert
和802-1x.private-key
参数。设置 CA 证书的路径:
# nmcli connection modify enp1s0 802-1x.ca-cert /etc/pki/tls/certs/ca.crt
设置证书中使用的用户的身份:
# nmcli connection modify enp1s0 802-1x.identity user@example.com
另外,还可将该密码存储在配置中:
# nmcli connection modify enp1s0 802-1x.private-key-password password
重要默认情况下,NetworkManager 在
/etc/sysconfig/network-scripts/keys-connection_name
文件中以明文形式保存密码,该文件只对root
用户可读。但是,在配置文件中清除文本密码会有安全隐患。要提高安全性,请将
802-1x.password-flags
参数设为0x1
。有了这个设置,在具有 GNOME 桌面环境或运行nm-applet
的服务器上,NetworkManager 从这些服务中检索密码。在其他情况下,NetworkManager 会提示输入密码。激活连接配置集:
# nmcli connection up enp1s0
验证
- 访问需要网络身份验证的网络上的资源。
其他资源
- 配置以太网连接
-
nm-settings(5)
手册页 -
nmcli(1)
手册页
18.2. 使用 nmstatectl 配置带有 802.1X 网络身份验证的静态以太网连接
使用 nmstate
工具,您可以创建一个使用 802.1X 标准的以太网连接来验证客户端。例如,为 enp1s0
接口添加具有以下设置的以太网连接:
-
静态 IPv4 地址 -
192.0.2.1
和/24
子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
-
使用
TLS
可扩展身份验证协议(EAP)进行 802.1X 网络身份验证.
nmstate
库只支持 TLS
EAP 方法。
先决条件
- 网络支持 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
文件中。
-
存储的客户端密钥位于
步骤
创建一个 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 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-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
将设置应用到系统:
# nmstatectl apply ~/create-ethernet-profile.yml
验证
- 访问需要网络身份验证的网络上的资源。
18.3. 使用 network RHEL 系统角色使用 802.1X 网络身份验证配置静态以太网连接
使用 network
RHEL 系统角色,您可以自动创建使用 802.1X 标准的以太网连接来验证客户端。例如,通过运行 Ansible playbook 为 enp1s0
接口远程添加以太网连接:
-
静态 IPv4 地址 -
192.0.2.1
和/24
子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
-
使用
TLS
可扩展身份验证协议(EAP)进行 802.1X 网络身份验证.
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中
- 网络支持 802.1X 网络身份验证。
- 受管节点使用 NetworkManager。
control 节点上存在 TLS 身份验证所需的以下文件:
-
客户端密钥存储在
/srv/data/client.key
文件中。 -
客户端证书存储在
/srv/data/client.crt
文件中。 -
证书颁发机构(CA)证书存储在
/srv/data/ca.crt
文件中。
-
客户端密钥存储在
步骤
创建包含以下内容的 playbook 文件,如
~/enable-802.1x.yml
:--- - name: Configure an Ethernet connection with 802.1X authentication hosts: managed-node-01.example.com tasks: - name: Copy client key for 802.1X authentication copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0600 - name: Copy client certificate for 802.1X authentication copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - include_role: name: rhel-system-roles.network vars: network_connections: - name: enp1s0 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 ieee802_1x: identity: user_name eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "password" client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: example.com state: up
运行 playbook:
# ansible-playbook ~/enable-802.1x.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
第 19 章 管理默认网关设置
默认网关是在没有其他路由与数据包的目的地匹配时转发网络数据包的路由器。在本地网络中,默认网关通常是与距离互联网有一跳的主机。
19.1. 使用 nmcli 在现有连接上设置默认网关
在大多数情况下,管理员在创建连接时设置默认网关,例如,使用 nmcli 配置带有静态 IP 地址的以太网连接。
在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以对以前使用 nmcli
工具创建的连接设置或更新默认网关设置。
先决条件
- 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
-
如果用户在物理控制台中登录,用户权限就足够了。否则,用户必须具有
root
权限。
步骤
设置默认网关的 IP 地址。
例如,要将
example
连接上的默认网关的 IPv4 地址设为192.0.2.1
:# nmcli connection modify example ipv4.gateway "192.0.2.1"
例如,要将
example
连接上的默认网关的 IPv6 地址设为2001:db8:1::1
:# nmcli connection modify example ipv6.gateway "2001:db8:1::1"
重启网络连接以使更改生效。例如,要使用命令行重启
example
连接:# nmcli connection up example
警告所有目前使用这个网络连接的连接在重启过程中暂时中断。
(可选)验证路由是否活跃。
显示 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
19.2. 使用 nmcli 交互模式在现有连接上设置默认网关
在大多数情况下,管理员在创建连接时设置默认网关,如使用 nmcli 互动编辑器配置带有静态 IP 地址的以太网连接
在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以使用 nmcli
工具的交互模式在之前创建的连接上设置或更新默认网关设置。
先决条件
- 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
-
如果用户在物理控制台中登录,用户权限就足够了。否则,该用户必须具有
root
权限。
步骤
为所需的连接打开
nmcli
交互模式。例如,要为 example 连接打开nmcli
交互模式:# nmcli connection edit example
设置默认网关。
例如,要将
example
连接上的默认网关的 IPv4 地址设为192.0.2.1
:nmcli> set ipv4.gateway 192.0.2.1
例如,要将
example
连接上的默认网关的 IPv6 地址设为2001:db8:1::1
:nmcli> set ipv6.gateway 2001:db8:1::1
另外,还可验证默认网关是否正确设置:
nmcli> print ... ipv4.gateway: 192.0.2.1 ... ipv6.gateway: 2001:db8:1::1 ...
保存配置:
nmcli> save persistent
重启网络连接以使更改生效:
nmcli> activate example
警告所有目前使用这个网络连接的连接在重启过程中暂时中断。
保留
nmcli
交互模式:nmcli> quit
(可选)验证路由是否活跃。
显示 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
19.3. 使用 nm-connection-editor 在现有连接上设置默认网关
在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以使用 nm-connection-editor
应用程序在之前创建的连接上设置或更新默认网关设置。
先决条件
- 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
步骤
打开一个终端,输入
nm-connection-editor
:# nm-connection-editor
- 选择要修改的连接,并点击 gear wheel 图标编辑现有连接。
设置 IPv4 默认网关。例如,要将连接上的默认网关的 IPv4 地址设为
192.0.2.1
:-
打开
IPv4 Settings
选项卡。 在网关地址所在的 IP 范围旁边的
gateway
字段中输入地址:
-
打开
设置 IPv6 默认网关。例如,要将连接上默认网关的 IPv6 地址设为
2001:db8:1::1
:-
打开
IPv6
选项卡。 在网关地址所在的 IP 范围旁边的
gateway
字段中输入地址:
-
打开
- 点击 确定。
- 点击 Save。
重启网络连接以使更改生效。例如,要使用命令行重启
example
连接:# nmcli connection up example
警告所有目前使用这个网络连接的连接在重启过程中暂时中断。
(可选)验证路由是否活跃。
显示 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
19.4. 使用 control-center 在现有连接上设置默认网关
在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以使用 control-center
应用程序在之前创建的连接上设置或更新默认网关设置。
先决条件
- 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
-
连接的网络配置在
control-center
应用程序中打开。
步骤
设置 IPv4 默认网关。例如,要将连接上的默认网关的 IPv4 地址设为
192.0.2.1
:-
打开
IPv4
选项卡。 在网关地址所在的 IP 范围旁边的
gateway
字段中输入地址:
-
打开
设置 IPv6 默认网关。例如,要将连接上默认网关的 IPv6 地址设为
2001:db8:1::1
:-
打开
IPv6
选项卡。 在网关地址所在的 IP 范围旁边的
gateway
字段中输入地址:
-
打开
- 点应用。
返回到
Network
窗口,通过将连接的按钮切换为 Off ,然后返回到 On 来禁用并重新启用连接,以使更改生效。警告所有目前使用这个网络连接的连接在重启过程中暂时中断。
(可选)验证路由是否活跃。
显示 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
19.5. 使用 nmstatectl 在现有连接上设置默认网关
在大多数情况下,管理员在创建连接时设置默认网关。但是,您也可以使用 nmstatectl
工具设置或更新网络连接的默认网关设置。
先决条件
- 至少需要在设置默认网关的连接上配置一个静态 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
将设置应用到系统:
# nmstatectl apply ~/set-default-gateway.yml
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory
19.6. 使用 network RHEL 系统角色在现有连接上设置默认网关
您可以使用 network
RHEL 系统角色来设置默认网关。
当您运行使用 network
RHEL 系统角色的剧本时,如果设置的值与剧本中指定的名称不匹配,则系统角色会覆盖具有相同名称的现有的连接配置文件。因此,始终在剧本中指定网络连接配置文件的整个配置,即使 IP 配置已经存在。否则,角色会将这些值重置为默认值。
根据它是否已存在,流程使用以下设置创建或更新 enp1s0
连接配置文件:
-
静态 IPv4 地址 -
198.51.100.20
,子网掩码为/24
-
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
198.51.100.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
198.51.100.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
步骤
创建包含以下内容的 playbook 文件,如
~/ethernet-connection.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP and default gateway include_role: name: 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
运行 playbook:
# ansible-playbook ~/ethernet-connection.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
19.7. 使用旧的网络脚本在现有连接中设置默认网关
在大多数情况下,管理员在创建连接时设置默认网关。但是,在使用旧的网络脚本时,您还可以在之前创建的连接上设置或更新默认网关设置。
前提条件
-
NetworkManager
软件包未安装,或者NetworkManager
服务被禁用。 -
network-scripts
软件包已安装。
流程
将
/etc/sysconfig/network-scripts/ifcfg-enp1s0
文件中的GATEWAY
参数设为192.0.2.1
:GATEWAY=192.0.2.1
在
/etc/sysconfig/network-scripts/route-enp0s1
文件中添加default
条目:default via 192.0.2.1
重启网络:
# systemctl restart network
19.8. NetworkManager 如何管理多个默认网关
在某些情况下,您可能需要在主机上设置多个默认网关。但是,为了避免异步路由问题,同一协议的每个默认网关都需要单独的指标值。请注意,RHEL 只使用到设置成最低指标的默认网关的连接。
您可以使用以下命令为连接的 IPv4 和 IPv6 网关设置指标:
# nmcli connection modify connection-name ipv4.route-metric value ipv6.route-metric value
不要为多个连接配置集中的同一协议设置相同的指标值以避免路由问题。
如果您设置了没有指标值的默认网关,则 NetworkManager 会自动根据接口类型设置指标值。为此,NetworkManager 将这个网络类型的默认值分配给激活的第一个连接,并根据激活的顺序为同一类型的每一个其他连接设置递增值。例如,如果带有默认网关的两个以太网连接存在,则 NetworkManager 会将路由上的 100
指标设置为您首先激活的连接的默认网关。对于第二个连接,NetworkManager 会设为 101
。
以下是经常使用的网络类型及其默认指标的概述:
连接类型 | 默认指标值 |
---|---|
VPN | 50 |
Ethernet | 100 |
MACsec | 125 |
InfiniBand | 150 |
Bond | 300 |
Team | 350 |
VLAN | 400 |
Bridge | 425 |
TUN | 450 |
Wi-Fi | 600 |
IP tunnel | 675 |
19.9. 配置 NetworkManager 以避免使用特定配置集提供默认网关
您可以配置 NetworkManager 从不使用特定的配置文件来提供默认网关。对于没有连接到默认网关的连接配置集,请按照以下步骤操作。
先决条件
- 没有连接到默认网关的连接的 NetworkManager 连接配置文件存在。
流程
如果连接使用动态 IP 配置,请配置 NetworkManager 不使用该连接作为 IPv4 和 IPv6 连接的默认路由:
# 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 协议的默认路使用网络接口。
19.10. 修复因为多个默认网关导致的意外路由行为
只有在很少情况下(比如使用多路径 TCP 时),在主机上需要多个默认网关。在大多数情况下,您只配置一个默认网关,来避免意外的路由行为或异步路由问题。
要将流量路由到不同的互联网提供商,请使用基于策略的路由,而不是多个默认网关。
先决条件
- 主机使用 NetworkManager 管理网络连接,这是默认设置。
- 主机有多个网络接口。
- 主机配置了多个默认网关。
流程
显示路由表:
对于 IPv4,请输入:
# ip -4 route default via 192.0.2.1 dev enp1s0 proto static metric 101 default via 198.51.100.1 dev enp7s0 proto static metric 102 ...
对于 IPv6,请输入:
# ip -6 route default via 2001:db8:1::1 dev enp1s0 proto static metric 101 pref medium default via 2001:db8:2::1 dev enp7s0 proto static metric 102 pref medium ...
以
default
开头的条目表示默认路由。注意dev
旁边显示的这些条目的接口名称。使用以下命令显示您使用在上一步中识别的接口的 NetworkManager 连接:
# nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp1s0 GENERAL.CONNECTION: Corporate-LAN IP4.GATEWAY: 192.168.122.1 IP6.GATEWAY: 2001:db8:1::1 # nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp7s0 GENERAL.CONNECTION: Internet-Provider IP4.GATEWAY: 198.51.100.1 IP6.GATEWAY: 2001:db8:2::1
在这些示例中,名为
Corporate-LAN
和Internet-Provider
的配置文件设置了默认网关。因为在本地网络中,默认网关通常是距离互联网一跳的主机,所以此流程的剩下部分假设Corporate-LAN
中的默认网关是不正确的。配置 NetworkManager 不使用
Corporate-LAN
连接作为 IPv4 和 IPv6 连接的默认路由:# nmcli connection modify Corporate-LAN ipv4.never-default yes ipv6.never-default yes
请注意,将
ipv4.never-default
和ipv6.never-default
设为yes
,会自动从连接配置文件中删除相应协议默认网关的 IP 地址。激活
Corporate-LAN
连接:# nmcli connection up Corporate-LAN
验证
显示 IPv4 和 IPv6 路由表,并确认每个协议都只有一个默认网关:
对于 IPv4,请输入:
# ip -4 route default via 192.0.2.1 dev enp1s0 proto static metric 101 ...
对于 IPv6,请输入:
# ip -6 route default via 2001:db8:1::1 dev enp1s0 proto static metric 101 pref medium ...
第 20 章 配置静态路由
路由可确保您可以在相互连接的网络间发送和接收流量。在较大环境中,管理员通常配置服务以便路由器可以动态地了解其他路由器。在较小的环境中,管理员通常会配置静态路由,以确保流量可以从一个网络到下一个网络访问。
如果适用所有这些条件,您需要静态路由以在多个网络间获得正常运行的通信:
- 流量必须通过多个网络。
- 通过默认网关的独占流量流不足。
第 20.1 节 “需要静态路由的网络示例” 描述没有配置静态路由时不同网络间的流量流的情况。
20.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 将流量发送到自己的默认网关(Internet)。
数据中心网络中的主机 (
203.0.113.0/24
):- 可以与同一子网中的其他主机通信,因为它们是直接连接的。
-
可以与互联网通信,因为它们的默认网关设置为路由器 1,路由器 1 在网络、数据中心 (
203.0.113.0/24
) 和互联网上均有接口。 -
可以与 Berlin 网络 (
192.0.2.0/24
) 通信,因为它们的默认网关设置为路由器 1,并且路由器 1 在数据中心 (203.0.113.0/24
) 和 Berlin (192.0.2.0/24
) 网络中都存在接口。 -
无法与 Raleigh 网络 (
198.51.100.0/24
) 通信,因为该网络中没有接口。因此,数据中心中的主机 (203.0.113.0/24
) 将流量发送到其默认网关 (路由器 1)。路由器 1 在 Raleigh 网络(198.51.100.0/24
)中没有接口,因此 Router 1 会将这个流量发送到自己的默认网关 (Internet)。
Raleigh 网络中的主机 (
198.51.100.0/24
):- 可以与同一子网中的其他主机通信,因为它们是直接连接的。
-
无法与互联网上的主机通信。因为默认的网关设置,路由器 2 将流量发送到路由器 1。路由器 1 的实际行为取决于反向路径过滤器 (
rp_filter
) 系统控制 (sysctl
) 设置。默认情况下,在 RHEL 中,路由器 1 会丢弃传出流量,而不是将其路由到互联网。但是,无论配置的行为如何,都无法在没有静态路由的情况下进行通信。 -
无法与数据中心网络通信(
203.0.113.0/24
)。由于默认网关设置,传出流量通过路由器 2 到达目的地。但是,对数据包的回复不会到达发送者,因为数据中心网络中的主机(203.0.113.0/24
)将回复发送到其默认网关(Router 1)。然后,路由器 1 将流量发送到互联网。 -
无法与 Berlin 网络通信(
192.0.2.0/24
)。因为默认的网关设置,路由器 2 将流量发送到路由器 1。路由器 1 的实际行为取决于rp_filter
sysctl
设置。默认情况下,在 RHEL 中,路由器 1 会丢弃传出流量,而不是将其发送到 Berlin 网络(192.0.2.0/24
)。但是,无论配置的行为如何,都无法在没有静态路由的情况下进行通信。
除了配置静态路由外,还必须在两个路由器上启用 IP 转发。
20.2. 如何使用 nmcli 命令配置静态路由
要配置静态路由,请使用具有以下语法的 nmcli
工具:
$ nmcli connection modify connection_name ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."
该命令支持以下路由属性:
-
cwnd=n
:设置拥塞窗口(CWND)大小,以数据包数量定义。 -
lock-cwnd=true|false
:定义内核是否可以更新 CWND 值。 -
lock-mtu=true|false
:定义内核是否可以将 MTU 更新为路径 MTU 发现。 -
lock-window=true|false
:定义内核是否可更新 TCP 数据包的最大窗口大小。 -
mtu=n
:设置要与目的地的路径一起使用的最大传输单元(MTU)。 -
onlink=true|false
:定义下一个跃点是否直接附加到此链接,即使它与任何接口前缀都不匹配。 -
scope=n
: 对于 IPv4 路由,此属性设置路由前缀所涵盖的目的地的范围。将值设为整数(0-255)。 -
src=address
:当将流量发送到路由前缀所涵盖的目的地时,将源地址设为首选。 -
table=table_id
:设置应将路由添加到的表的 ID。如果省略此参数,NetworkManager 将使用main
表。 -
tos=n
:设置服务类型(TOS)密钥。将值设为整数(0-255)。 -
type=value
:设置路由类型。NetworkManager 支持unicast
、local
、blackhole
、unreachable
、prohibit
和throw
路由类型。默认为unicast
。 -
window=n
:设置播发到这些目的地的 TCP 的最大窗口大小,以字节为单位。
如果使用 ipv4.routes
子命令,nmcli
会覆盖这个参数的所有当前设置。
要添加一个路由:
$ nmcli connection modify connection_name +ipv4.routes "<route>"
同样,要删除一个特定的路由:
$ nmcli connection modify connection_name -ipv4.routes "<route>"
20.3. 使用 nmcli 配置静态路由
您可以使用 nmcli connection modify
命令将静态路由添加到现有 NetworkManager 连接配置集。
以下流程配置以下路由:
-
到远程
198.51.100.0/24
网络的 IPv4 路由。IP 地址为192.0.2.10
的对应网关可以通过example
连接访问。 -
到远程
2001:db8:2::/64
网络的 IPv6 路由。IP 地址为2001:db8:1::10
的对应网关可以通过example
连接访问。
前提条件
-
example
连接配置集存在,它将此主机配置为与网关在同一 IP 子网中。
流程
将静态 IPv4 路由添加到
example
连接配置集:# nmcli connection modify example +ipv4.routes "198.51.100.0/24 192.0.2.10"
要在一个步骤中设置多个路由,使用逗号分隔单个路由传递给该命令。例如,要将路由添加到
198.51.100.0/24
和203.0.113.0/24
网络,它们都通过192.0.2.10
网关路由,请输入:# nmcli connection modify example +ipv4.routes "198.51.100.0/24 192.0.2.10, 203.0.113.0/24 192.0.2.10"
将静态 IPv6 路由添加到
example
连接配置集:# nmcli connection modify example +ipv6.routes "2001:db8:2::/64 2001:db8:1::10"
重新激活连接:
# nmcli connection up example
验证
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
显示 IPv6 路由:
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
其他资源
-
nmcli(1)
手册页 -
nm-settings-nmcli(5)
man page
20.4. 使用 nmtui 配置静态路由
nmtui
应用程序为 NetworkManager 提供了一个基于文本的用户界面。您可以使用 nmtui
在没有图形界面的主机上配置静态路由。
例如,以下流程将路由添加到 192.0.2.0/24
网络,该网络使用运行在 198.51.100.1
上的网关,可通过现有的连接配置文件到达该网络。
在 nmtui
中:
- 使用光标键导航。
- 选择一个按钮并按 Enter 键。
- 使用 Space 选择并取消选择复选框。
前提条件
- 网络已配置。
- 静态路由的网关必须在接口上直接访问。
- 如果用户在物理控制台中登录,用户权限就足够了。否则,命令需要 root 权限。
步骤
启动
nmtui
:# nmtui
-
选择
Edit a connection
,并按 Enter。 - 选择您可通过其到达目的地网络的下一跳的连接配置文件,然后按 Enter 。
-
根据它是 IPv4 还是 IPv6 路由,按协议配置区旁边的
Show
按钮。 按
Routing
旁边的Edit
按钮。这将打开一个新窗口,您可在其中配置静态路由:按
Add
按钮,并填写:- 目的网络,包括无类别域间路由(CIDR)格式的前缀
- 下一跳的 IP 地址
- 指标值,如果您向同一网络添加多个路由,并且希望根据效率对路由进行优先排序
- 对您要添加的每个路由重复上一步,且通过此连接配置文件可达。
按
OK
按钮返回到具有连接设置的窗口。图 20.1. 没有指标的静态路由的示例
-
按
OK
按钮返回到nmtui
主菜单。 -
选择
Activate a connection
,并按 Enter。 选择您编辑的连接配置文件,然后按 Enter 两次来停用并再次激活它。
重要如果您通过使用您要重新激活的连接配置文件的远程连接(如 SSH)来运行
nmtui
,请跳过这一步。在这种情况下,如果您在nmtui
中停用了它,连接将被终止,因此您无法再次激活它。要避免这个问题,请使用nmcli connection connection_profile_name up
命令来在上述场景中重新激活连接。-
按
Back
按钮返回到主菜单。 -
选择
Quit
,然后按 Enter 来关闭nmtui
应用程序。
验证
验证路由是否处于活跃状态:
$ ip route ... 192.0.2.0/24 via 198.51.100.1 dev example proto static metric 100
20.5. 使用 control-center 配置静态路由
您可以在 GNOME 中使用 control-center
,来将静态路由添加到网络连接配置中。
以下流程配置以下路由:
-
到远程
198.51.100.0/24
网络的 IPv4 路由。对应的网关的 IP 地址192.0.2.10
。 -
到远程
2001:db8:2::/64
网络的 IPv6 路由。对应的网关具有 IP 地址2001:db8:1::10
。
前提条件
- 网络已配置。
- 此主机与网关位于同一个 IP 子网中。
-
连接的网络配置在
control-center
应用程序中打开。请参阅使用 nm-connection-editor 配置以太网连接。
流程
在
IPv4
标签页中:-
可选:点
IPv4
选项卡的Routes
部分中的 On 按钮来禁用自动路由,使其只使用静态路由。如果启用了自动路由,Red Hat Enterprise Linux 将使用静态路由和从 DHCP 服务器接收的路由。 输入 IPv4 路由的地址、子网掩码、网关和可选的指标值:
-
可选:点
在
IPv6
标签页中:-
可选:点
IPv4
选项卡的Routes
部分中的 On 按钮来禁用自动路由,使其只使用静态路由。 输入 IPv6 路由的地址、子网掩码、网关和可选的指标值:
-
可选:点
- 点应用。
返回到
Network
窗口,通过将连接的按钮切换为 Off ,然后返回到 On 来禁用并重新启用连接,以使更改生效。警告重启连接会破坏那个接口的连接。
验证
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
显示 IPv6 路由:
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
20.6. 使用 nm-connection-editor 配置静态路由
您可以使用 nm-connection-editor
应用程序将静态路由添加到网络连接配置中。
以下流程配置以下路由:
-
到远程
198.51.100.0/24
网络的 IPv4 路由。IP 地址为192.0.2.10
的对应网关可以通过example
连接访问。 -
到远程
2001:db8:2::/64
网络的 IPv6 路由。IP 地址为2001:db8:1::10
的对应网关可以通过example
连接访问。
前提条件
- 网络已配置。
- 此主机与网关位于同一个 IP 子网中。
流程
打开一个终端,输入
nm-connection-editor
:$ nm-connection-editor
-
选择
example
连接配置集,并点齿轮图标编辑现有连接。 在
IPv4 设置
标签页中:- 点击 路由 按钮。
点击 添加 按钮并输入地址、子网掩码、网关以及可选的指标值。
- 点击 确定。
在
IPv6 设置
标签页中:- 点击 路由 按钮。
点击 添加 按钮并输入地址、子网掩码、网关以及可选的指标值。
- 点击 确定。
- 点击 Save。
重启网络连接以使更改生效。例如,要使用命令行重启
example
连接:# nmcli connection up example
验证
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
显示 IPv6 路由:
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
20.7. 使用 nmcli 互动模式配置静态路由
您可以使用 nmcli
工具的交互模式,将静态路由添加到网络连接配置中。
以下流程配置以下路由:
-
到远程
198.51.100.0/24
网络的 IPv4 路由。IP 地址为192.0.2.10
的对应网关可以通过example
连接访问。 -
到远程
2001:db8:2::/64
网络的 IPv6 路由。IP 地址为2001:db8:1::10
的对应网关可以通过example
连接访问。
前提条件
-
example
连接配置集存在,它将此主机配置为与网关在同一 IP 子网中。
流程
为
example
连接打开nmcli
交互模式:# nmcli connection edit example
添加静态 IPv4 路由:
nmcli> set ipv4.routes 198.51.100.0/24 192.0.2.10
添加静态 IPv6 路由:
nmcli> set ipv6.routes 2001:db8:2::/64 2001:db8:1::10
(可选)验证路由是否已正确添加到配置中:
nmcli> print ... ipv4.routes: { ip = 198.51.100.0/24, nh = 192.0.2.10 } ... ipv6.routes: { ip = 2001:db8:2::/64, nh = 2001:db8:1::10 } ...
ip
属性显示要路由的网络,nh
属性显示网关(下一跳)。保存配置:
nmcli> save persistent
重启网络连接:
nmcli> activate example
保留
nmcli
交互模式:nmcli> quit
验证
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
显示 IPv6 路由:
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
其他资源
-
nmcli(1)
手册页 -
nm-settings-nmcli(5)
man page
20.8. 使用 nmstatectl 配置静态路由
您可以使用 nmstatectl
工具将静态路由添加到网络连接配置中。
以下流程配置以下路由:
-
到远程
198.51.100.0/24
网络的 IPv4 路由。IP 地址为192.0.2.10
的对应网关可以通过enp1s0
接口访问。 -
到远程
2001:db8:2::/64
网络的 IPv6 路由。IP 地址为2001:db8:1::10
的对应网关可以通过enp1s0
接口访问。
前提条件
-
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
将设置应用到系统:
# nmstatectl apply ~/add-static-route-to-enp1s0.yml
验证
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
显示 IPv6 路由:
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
其他资源
-
nmstatectl(8)
手册页 -
/usr/share/doc/nmstate/examples/
directory
20.9. 使用 network RHEL 系统角色配置静态路由
您可以使用 network
RHEL 系统角色配置静态路由。
当您运行使用 network
RHEL 系统角色的剧本时,如果设置的值与剧本中指定的名称不匹配,则系统角色会覆盖具有相同名称的现有的连接配置文件。因此,始终在剧本中指定网络连接配置文件的整个配置,即使 IP 配置已经存在。否则,角色会将这些值重置为默认值。
根据它是否已存在,流程使用以下设置创建或更新 enp7s0
连接配置文件:
-
静态 IPv4 地址 -
192.0.2.1
和/24
子网掩码 -
静态 IPv6 地址 -
2001:db8:1::1
和/64
子网掩码 -
IPv4 默认网关 -
192.0.2.254
-
IPv6 默认网关 -
2001:db8:1::fffe
-
IPv4 DNS 服务器 -
192.0.2.200
-
IPv6 DNS 服务器 -
2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
静态路由:
-
198.51.100.0/24
,网关为192.0.2.10
-
2001:db8:2::/64
,网关为2001:db8:1::10
-
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
步骤
创建包含以下内容的 playbook 文件,如
~/add-static-routes.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP and additional routes include_role: name: 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: - 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
运行 playbook:
# ansible-playbook ~/add-static-routes.yml
验证
在受管节点上:
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp7s0
显示 IPv6 路由:
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp7s0 metric 1024 pref medium
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
20.10. 使用旧的网络脚本以键-值格式创建静态路由配置文件
旧的网络脚本支持以 key-value 格式设置静态路由。
以下步骤配置 IPv4 路由到远程 198.51.100.0/24
网络。IP 地址为 192.0.2.10
的对应网关可以通过 enp1s0
接口访问。
旧的网络脚本只支持静态 IPv4 路由的键值格式。对于 IPv6 路由,请使用 ip
命令格式。请参阅在使用旧的网络脚本时,通过 ip-command-format 来创建静态路由配置文件。
前提条件
- 静态路由的网关必须在接口上直接访问。
-
NetworkManager
软件包未安装,或者NetworkManager
服务被禁用。 -
network-scripts
软件包已安装。 -
network
服务已启用。
流程
将静态 IPv4 路由添加到
/etc/sysconfig/network-scripts/route-enp0s1
文件中:ADDRESS0=198.51.100.0 NETMASK0=255.255.255.0 GATEWAY0=192.0.2.10
-
ADDRESS0
变量定义第一个路由条目的网络。 -
NETMASK0
变量定义第一个路由条目的子网掩码。 GATEWAY0
变量定义到远程网络的网关的 IP 地址或第一个路由条目的主机。如果您添加多个静态路由,请增加变量名称的数量。请注意,每个路由的变量都必须按顺序编号。例如,
ADDRESS0
、ADDRESS1
、ADDRESS3
,等等。
-
重启网络:
# systemctl restart network
验证
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
故障排除
显示
network
单元的日志条目 :# journalctl -u network
以下是可能的错误信息及其原因:
-
Error: Nexthop has invalid gateway
: 在route-enp1s0
文件中指定一个没有与此路由器相同的子网中的 IPv4 网关地址。 -
RTNETLINK answers: No route to host
: 在route6-enp1s0
文件中指定一个没有与此路由器相同的子网中的 IPv6 网关地址。 -
Error: Invalid prefix for given prefix length
:您可以使用远程网络中的 IP 地址(而非网络地址)在route-enp1s0
文件中指定远程网络。
-
其他资源
-
/usr/share/doc/network-scripts/sysconfig.txt
file
20.11. 在使用旧的网络脚本时,使用 ip-command-format 创建静态路由配置文件
旧的网络脚本支持设置静态路由。
以下流程配置以下路由:
-
到远程
198.51.100.0/24
网络的 IPv4 路由。IP 地址为192.0.2.10
的对应网关可以通过enp1s0
接口访问。 -
到远程
2001:db8:2::/64
网络的 IPv6 路由。IP 地址为2001:db8:1::10
的对应网关可以通过enp1s0
接口访问。
网关(下一跳)的 IP 地址必须与您在其上配置静态路由的主机位于同一个 IP 子网中。
此流程中的示例使用 ip
-command 格式的配置条目。
前提条件
- 静态路由的网关必须在接口上直接访问。
-
NetworkManager
软件包未安装,或者NetworkManager
服务被禁用。 -
network-scripts
软件包已安装。 -
network
服务已启用。
流程
将静态 IPv4 路由添加到
/etc/sysconfig/network-scripts/route-enp1s0
文件中:198.51.100.0/24 via 192.0.2.10 dev enp1s0
始终指定远程网络的网络地址,如
198.51.100.0
。在远程网络中设置 IP 地址,如198.51.100.1
会导致网络脚本添加此路由。将静态 IPv6 路由添加到
/etc/sysconfig/network-scripts/route6-enp1s0
文件中:2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0
重启
network
服务 :# systemctl restart network
验证
显示 IPv4 路由:
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
显示 IPv6 路由:
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
故障排除
显示
network
单元的日志条目 :# journalctl -u network
以下是可能的错误信息及其原因:
-
Error: Nexthop has invalid gateway
: 在route-enp1s0
文件中指定一个没有与此路由器相同的子网中的 IPv4 网关地址。 -
RTNETLINK answers: No route to host
: 在route6-enp1s0
文件中指定一个没有与此路由器相同的子网中的 IPv6 网关地址。 -
Error: Invalid prefix for given prefix length
:您可以使用远程网络中的 IP 地址(而非网络地址)在route-enp1s0
文件中指定远程网络。
-
其它资源
-
/usr/share/doc/network-scripts/sysconfig.txt
file
第 21 章 配置基于策略的路由以定义其他路由
默认情况下,RHEL 中的内核决定使用路由表根据目标地址转发网络数据包。基于策略的路由允许您配置复杂的路由场景。例如,您可以根据各种条件来路由数据包,如源地址、数据包元数据或协议。
在使用 NetworkManager 的系统上,只有 nmcli
工具支持设置路由规则,并将路由分配给特定的表。
21.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
子网相连。
-
-
内部工作站子网中的主机使用
10.0.0.1
作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp8s0
网络接口。 -
服务器子网中的主机使用
203.0.113.1
作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp9s0
网络接口。 -
firewalld
服务已启用,并处于活动状态。
步骤
将网络接口配置为供应商 A:
# 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
命令创建 NetworkManager 连接配置文件。该命令使用以下选项:-
type
ethernet
:定义连接类型为以太网。 -
con-name
connection_name
:设置配置文件的名称。使用有意义的名称以避免混淆。 -
ifname
network_device
:设置网络接口。 -
ipv4.method
manual
: 允许配置静态 IP 地址。 -
ipv4.addresses
IP_address/subnet_mask
:设置 IPv4 地址和子网掩码。 -
ipv4.gateway
IP_address
:设置默认网关地址。 -
ipv4.dns
IP_of_DNS_server
:设置 DNS 服务器的 IPv4 地址。 -
connection.zone
firewalld_zone
:将网络接口分配给定义的firewalld
区域。请注意,firewalld
会为分配给external
区域的接口自动启用伪装。
-
将网络接口配置为供应商 B:
# 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 external
此命令使用
ipv4.routes
参数而不是ipv4.gateway
来设置默认网关。这需要将这个连接的默认网关分配给不同于默认的路由表(5000
)。当连接被激活时,NetworkManager 会自动创建这个新的路由表。将网络接口配置为内部工作站子网:
# nmcli connection add type ethernet con-name Internal-Workstations ifname enp8s0 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.routes "10.0.0.0/24 table=5000" ipv4.routing-rules "priority 5 from 10.0.0.0/24 table 5000" connection.zone trusted
此命令使用
ipv4.routes
参数将静态路由添加到 ID 为5000
的路由表中。10.0.0.0/24
子网的这个静态路由使用到供应商 B 的本地网络接口的 IP 地址(192.0.2.1
)来作为下一跳。另外,命令使用
ipv4.routing-rules
参数来添加优先级为5
的路由规则,该规则将来自10.0.0.0/24
子网的流量路由到表5000
。低的值具有更高的优先级。请注意,
ipv4.routing-rules
参数的语法与ip rule add
命令中的语法相同,但ipv4.routing-rules
总是需要指定优先级。将网络接口配置为服务器子网:
# nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trusted
验证
在内部工作站子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 10.0.0.1 (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.1 (192.0.2.1) 0.884 ms 1.066 ms 1.248 ms ...
命令的输出显示路由器通过
192.0.2.1
,即提供商 B 的网络来发送数据包。
在服务器子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 203.0.113.1 (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...
命令的输出显示路由器通过
198.51.100.2
,即供应商 A 的网络来发送数据包。
故障排除步骤
在 RHEL 路由器中:
显示规则列表:
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup default
默认情况下,RHEL 包含表
local
、main
和default
的规则。显示表
5000
中的路由:# ip route list table 5000 0.0.0.0/0 via 192.0.2.2 dev enp1s0 proto static metric 100 10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
显示接口和防火墙区:
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
验证
external
区是否启用了伪装:# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
其他资源
-
nm-settings(5)
手册页 -
nmcli(1)
手册页 - 是否可以在 RHEL 中使用 NetworkManager 设置基于策略的路由?
21.2. 使用 network RHEL 系统角色将特定子网的流量路由到不同的默认网关
您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。例如,您可以将 RHEL 配置为默认路由将所有流量路由到互联网供应商 A 的路由器。但是,从内部工作站子网接收的流量路由到供应商 B。
要远程和在多个节点上配置基于策略的路由,您可以使用 RHEL network
系统角色。在 Ansible 控制节点上执行此步骤。
此流程假设以下网络拓扑:
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。
-
受管节点使用
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
子网相连。
-
-
内部工作站子网中的主机使用
10.0.0.1
作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp8s0
网络接口。 -
服务器子网中的主机使用
203.0.113.1
作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp9s0
网络接口。
流程
创建包含以下内容的 playbook 文件,如
~/pbr.yml
:--- - name: Configuring policy-based routing hosts: managed-node-01.example.com tasks: - name: Routing traffic from a specific subnet to a different default gateway include_role: name: 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 zone: external - name: Internal-Workstations interface_name: enp8s0 type: ethernet autoconnect: True ip: address: - 10.0.0.1/24 route: - network: 10.0.0.0 prefix: 24 table: 5000 routing_rule: - priority: 5 from: 10.0.0.0/24 table: 5000 state: up zone: trusted - name: Servers interface_name: enp9s0 type: ethernet autoconnect: True ip: address: - 203.0.113.1/24 state: up zone: trusted
运行 playbook:
# ansible-playbook ~/pbr.yml
验证
在内部工作站子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 10.0.0.1 (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.1 (192.0.2.1) 0.884 ms 1.066 ms 1.248 ms ...
命令的输出显示路由器通过
192.0.2.1
,即提供商 B 的网络来发送数据包。
在服务器子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 203.0.113.1 (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...
命令的输出显示路由器通过
198.51.100.2
,即供应商 A 的网络来发送数据包。
在使用 RHEL 系统角色配置的 RHEL 路由器上:
显示规则列表:
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup default
默认情况下,RHEL 包含表
local
、main
和default
的规则。显示表
5000
中的路由:# ip route list table 5000 0.0.0.0/0 via 192.0.2.2 dev enp1s0 proto static metric 100 10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
显示接口和防火墙区:
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
验证
external
区是否启用了伪装:# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
其它资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件
21.3. 使用旧网络脚本时,涉及基于策略的路由的配置文件概述
如果您使用旧的网络脚本而不是 NetworkManager 配置网络,您也可以配置基于策略的路由。
使用 network-scripts
软件包提供的旧网络脚本来配置网络已在 RHEL 8 中被弃用。红帽建议您使用 NetworkManager 配置基于策略的路由。例如,请参阅使用 nmcli 将特定子网的流量路由到不同的默认网关。
使用旧的网络脚本时,以下配置文件会涉及基于策略的路由:
/etc/sysconfig/network-scripts/route-interface
:此文件定义 IPv4 路由。使用table
选项来指定路由表。例如:192.0.2.0/24 via 198.51.100.1 table 1 203.0.113.0/24 via 198.51.100.2 table 2
-
/etc/sysconfig/network-scripts/route6-interface
:此文件定义 IPv6 路由。 /etc/sysconfig/network-scripts/rule-interface
:此文件定义内核将流量路由到特定路由表的 IPv4 源网络的规则。例如:from 192.0.2.0/24 lookup 1 from 203.0.113.0/24 lookup 2
-
/etc/sysconfig/network-scripts/rule6-interface
:此文件定义内核将流量路由到特定路由表的 IPv6 源网络的规则。 /etc/iproute2/rt_tables
:如果您想要使用名称而不是数字来引用特定的路由表,这个文件定义了映射。例如:1 Provider_A 2 Provider_B
其他资源
-
ip-route(8)
手册页 -
ip-rule(8)
手册页
21.4. 使用旧的网络脚本将特定子网的流量路由到不同的默认网关
您可以使用基于策略的路由为来自特定子网的流量配置不同的默认网关。例如,您可以将 RHEL 配置为默认路由将所有流量路由到互联网供应商 A 的路由器。但是,从内部工作站子网接收的流量路由到供应商 B。
使用 network-scripts
软件包提供的旧网络脚本来配置网络已在 RHEL 8 中被弃用。只有在主机上使用旧的网络脚本而不是 NetworkManager 时,才按照以下步骤操作。如果您使用 NetworkManager 管理网络设置,请参阅使用 nmcli 将特定子网的流量路由到不同的默认网关。
该流程假设以下网络拓扑:
旧的网络脚本会按照字母顺序处理配置文件。因此,您必须为配置文件命名,确保当依赖接口需要时,用于其他接口的规则和路由的接口会被启动。要实现正确的顺序,这个流程使用 ifcfg-*
、route-*
和 rules-*
文件中的数字。
前提条件
-
NetworkManager
软件包未安装,或者NetworkManager
服务被禁用。 -
network-scripts
软件包已安装。 要在流程中设置的 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
子网相连。
-
-
内部工作站子网中的主机使用
10.0.0.1
作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp8s0
网络接口。 -
服务器子网中的主机使用
203.0.113.1
作为默认网关。在此流程中,您可以将这个 IP 地址分配给路由器的enp9s0
网络接口。 -
firewalld
服务已启用,并处于活动状态。
流程
通过创建包含以下内容的
/etc/sysconfig/network-scripts/ifcfg-1_Provider-A
文件将网络接口的配置添加给提供商 A:TYPE=Ethernet IPADDR=198.51.100.1 PREFIX=30 GATEWAY=198.51.100.2 DNS1=198.51.100.200 DEFROUTE=yes NAME=1_Provider-A DEVICE=enp7s0 ONBOOT=yes ZONE=external
配置文件使用以下参数:
-
TYPE
=Ethernet
:定义连接类型为以太网。 -
IPADDR
=IP_address
:设置 IPv4 地址。 -
PREFIX
=subnet_mask
:设置子网掩码。 -
GATEWAY
=IP_address
:设置默认网关地址。 -
DNS1
=IP_of_DNS_server
:设置 DNS 服务器的 IPv4 地址。 -
DEFROUTE
=yes|no
:定义连接是否为默认路由。 -
NAME
=connection_name
:设置连接配置文件的名称。使用有意义的名称以避免混淆。 -
DEVICE
=network_device
:设置网络接口。 -
ONBOOT
=yes
:定义 RHEL 在系统引导时启动此连接。 -
ZONE
=firewalld_zone
:将网络接口分配给定义的firewalld
区域。请注意,firewalld
会为分配给external
区域的接口自动启用伪装。
-
为供应商 B 添加网络接口配置:
使用以下内容创建
/etc/sysconfig/network-scripts/ifcfg-2_Provider-B
文件:TYPE=Ethernet IPADDR=192.0.2.1 PREFIX=30 DEFROUTE=no NAME=2_Provider-B DEVICE=enp1s0 ONBOOT=yes ZONE=external
请注意,这个接口的配置文件不包含默认的网关设置。
将
2_Provider-B
连接的网关分配给单独的路由表。因此,使用以下内容创建/etc/sysconfig/network-scripts/route-2_Provider-B
文件:0.0.0.0/0 via 192.0.2.2 table 5000
此条目将通过这个网关路由的所有子网的网关和流量分配给表
5000
。
为内部工作站子网创建网络接口配置:
使用以下内容创建
/etc/sysconfig/network-scripts/ifcfg-3_Internal-Workstations
文件:TYPE=Ethernet IPADDR=10.0.0.1 PREFIX=24 DEFROUTE=no NAME=3_Internal-Workstations DEVICE=enp8s0 ONBOOT=yes ZONE=internal
为内部工作站子网添加路由规则配置。因此,使用以下内容创建
/etc/sysconfig/network-scripts/rule-3_Internal-Workstations
文件:pri 5 from 10.0.0.0/24 table 5000
此配置定义了优先级为
5
的路由规则,该规则将来自10.0.0.0/24
子网的所有流量路由到表5000
。低的值具有更高的优先级。使用以下内容创建
/etc/sysconfig/network-scripts/route-3_Internal-Workstations
文件,以将静态路由添加到 ID 为5000
的路由表:10.0.0.0/24 via 192.0.2.1 table 5000
此静态路由定义 RHEL 将从
10.0.0.0/24
子网到本地网络接口的 IP 的流量发送给提供商 B (192.0.2.1
)。这个接口是到路由表5000
,并用作下一跳。
通过创建包含以下内容的
/etc/sysconfig/network-scripts/ifcfg-4_Servers
文件来将网络接口的配置添加到服务器子网中:TYPE=Ethernet IPADDR=203.0.113.1 PREFIX=24 DEFROUTE=no NAME=4_Servers DEVICE=enp9s0 ONBOOT=yes ZONE=internal
重启网络:
# systemctl restart network
验证
在内部工作站子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 10.0.0.1 (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.1 (192.0.2.1) 0.884 ms 1.066 ms 1.248 ms ...
命令的输出显示路由器通过
192.0.2.1
,即提供商 B 的网络来发送数据包。
在服务器子网的 RHEL 主机上:
安装
traceroute
软件包:# yum install traceroute
使用
traceroute
工具显示到互联网上主机的路由:# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 203.0.113.1 (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...
命令的输出显示路由器通过
198.51.100.2
,即供应商 A 的网络来发送数据包。
故障排除步骤
在 RHEL 路由器中:
显示规则列表:
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup default
默认情况下,RHEL 包含表
local
、main
和default
的规则。显示表
5000
中的路由:# ip route list table 5000 default via 192.0.2.2 dev enp1s0 10.0.0.0/24 via 192.0.2.1 dev enp1s0
显示接口和防火墙区:
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 internal interfaces: enp8s0 enp9s0
验证
external
区是否启用了伪装:# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
其他资源
- 使用旧网络脚本时,涉及基于策略的路由的配置文件概述
-
ip-route(8)
手册页 -
ip-rule(8)
手册页 -
/usr/share/doc/network-scripts/sysconfig.txt
file
第 22 章 创建 dummy 接口
作为 Red Hat Enterprise Linux 用户,您可以创建并使用 dummy 网络接口进行调试和测试。dummy 接口提供了一个设备来路由数据包而无需实际传送数据包。它可让您创建使用网络管理器(NetworkManager)管理的其他回送设备,使不活跃 SLIP(Serial Line Internet Protocol)地址类似本地程序的实际地址。
22.1. 使用 nmcli 使用 IPv4 和 IPv6 地址创建 dummy 接口
您可以创建一个带有各种设置的 dummy 接口,如 IPv4 和 IPv6 地址。创建接口后,NetworkManager 会自动将其分配给默认的 public
firewalld
区域。
流程
使用静态 IPv4 和 IPv6 地址创建一个名为
dummy0
的 dummy 接口:# nmcli connection add type dummy ifname dummy0 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv6.method manual ipv6.addresses 2001:db8:2::1/64
注意要配置没有 IPv4 和 IPv6 地址的 dummy 接口,请将
ipv4.method
和ipv6.method
参数设置为disabled
。否则,IP 自动配置失败,NetworkManager 会取消激活连接并删除该设备。
验证
列出连接配置集:
# nmcli connection show NAME UUID TYPE DEVICE dummy-dummy0 aaf6eb56-73e5-4746-9037-eed42caa8a65 dummy dummy0
其它资源
-
nm-settings(5)
手册页
第 23 章 使用 nmstate-autoconf 自动配置使用 LLDP 的网络状态
网络设备可以使用链路层发现协议(LLDP),来在 LAN 中公告其身份、功能和邻居。nmstate-autoconf
工具可使用此信息来自动配置本地网络接口。
nmstate-autoconf
工具仅作为技术预览提供。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些预览可让用户早期访问将来的产品功能,让用户在开发过程中测试并提供反馈意见。
如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。
23.1. 使用 nmstate-autoconf 来自动配置网络接口
nmstate-autoconf
工具使用 LLDP 来识别连接到交换机的接口的 VLAN 设置来配置本地设备。
此流程假设以下场景,以及交换机使用 LLDP 广播 VLAN 设置:
-
RHEL 服务器的
enp1s0
和enp2s0
接口连接到使用 VLAN ID100
和 VLAN 名称prod-net
配置的交换机端口。 -
RHEL 服务器的
enp3s0
接口连接到使用 VLAN ID200
和 VLAN 名称mgmt-net
配置的交换机端口。
然后,nmstate-autoconf
工具使用此信息来在服务器上创建以下接口:
-
bond100
-enp1s0
和enp2s0
作为端口的绑定接口。 -
prod-net
- 在 VLAN ID 为100
的bond100
上面的 VLAN 接口。 -
mgmt-net
- 在 VLAN ID 为200
的enp3s0
上面的 VLAN 接口
如果您将多个网络接口连接到 LLDP 用来广播同一 VLAN ID 的不同交换机的端口,则 nmstate-autoconf
会用这些接口来创建一个绑定,并在其上配置通用 VLAN ID。
先决条件
-
nmstate
软件包已安装。 - 网络交换机上启用了 LLDP。
- 以太网接口已启用。
步骤
在以太网接口上启用 LLDP:
创建包含以下内容的 YAML 文件,如
~/enable-lldp.yml
:interfaces: - name: enp1s0 type: ethernet lldp: enabled: true - name: enp2s0 type: ethernet lldp: enabled: true - name: enp3s0 type: ethernet lldp: enabled: true
将设置应用到系统:
# nmstatectl apply ~/enable-lldp.yml
使用 LLDP 配置网络接口:
可选,启动一个空运行来显示并验证
nmstate-autoconf
生成的 YAML 配置:# nmstate-autoconf -d enp1s0,enp2s0,enp3s0 --- interfaces: - name: prod-net type: vlan state: up vlan: base-iface: bond100 id: 100 - name: mgmt-net type: vlan state: up vlan: base-iface: enp3s0 id: 200 - name: bond100 type: bond state: up link-aggregation: mode: balance-rr port: - enp1s0 - enp2s0
使用
nmstate-autoconf
根据从 LLDP 接收的信息来生成配置,并将设置应用到系统:# nmstate-autoconf enp1s0,enp2s0,enp3s0
验证
显示单个接口的设置:
# nmstatectl show <interface_name>
其他资源
-
nmstate-autoconf (8)
手册页
第 24 章 使用 LLDP 来调试网络配置问题
您可以使用链路层发现协议(LLDP)来调试拓扑中的网络配置问题。这意味着 LLDP 可以报告与其他主机或路由器以及交换机的配置不一致。
24.1. 使用 LLDP 信息调试不正确的 VLAN 配置
如果您将交换机端口配置为使用特定的 VLAN ,而主机没有收到这些 VLAN 数据包,则您可以使用链路层发现协议(LLDP)来调试问题。在没有收到数据包的主机上执行这个流程。
先决条件
-
nmstate
软件包已安装。 - 交换机支持 LLDP。
- LLDP 在邻居设备上已启用。
步骤
使用以下内容创建
~/enable-LLDP-enp1s0.yml
文件:interfaces: - name: enp1s0 type: ethernet lldp: enabled: true
使用
~/enable-LLDP-enp1s0.yml
文件来在接口enp1s0
上启用 LLDP:# nmstatectl apply ~/enable-LLDP-enp1s0.yml
显示 LLDP 信息:
# nmstatectl show enp1s0 - name: enp1s0 type: ethernet state: up ipv4: enabled: false dhcp: false ipv6: enabled: false autoconf: false dhcp: false lldp: enabled: true neighbors: - - type: 5 system-name: Summit300-48 - type: 6 system-description: Summit300-48 - Version 7.4e.1 (Build 5) 05/27/05 04:53:11 - type: 7 system-capabilities: - MAC Bridge component - Router - type: 1 _description: MAC address chassis-id: 00:01:30:F9:AD:A0 chassis-id-type: 4 - type: 2 _description: Interface name port-id: 1/1 port-id-type: 5 - type: 127 ieee-802-1-vlans: - name: v2-0488-03-0505 vid: 488 oui: 00:80:c2 subtype: 3 - type: 127 ieee-802-3-mac-phy-conf: autoneg: true operational-mau-type: 16 pmd-autoneg-cap: 27648 oui: 00:12:0f subtype: 1 - type: 127 ieee-802-1-ppvids: - 0 oui: 00:80:c2 subtype: 2 - type: 8 management-addresses: - address: 00:01:30:F9:AD:A0 address-subtype: MAC interface-number: 1001 interface-number-subtype: 2 - type: 127 ieee-802-3-max-frame-size: 1522 oui: 00:12:0f subtype: 4 mac-address: 82:75:BE:6F:8C:7A mtu: 1500
验证输出,以确保设置与您预期的配置匹配。例如,连接到交换机的接口的 LLDP 信息显示此主机连接的交换机端口使用 VLAN ID
448
:- type: 127 ieee-802-1-vlans: - name: v2-0488-03-0505 vid: 488
如果
enp1s0
接口的网络配置使用不同的 VLAN ID,请相应地进行修改。
其他资源
第 25 章 手动创建密钥文件格式的 NetworkManager 配置文件
NetworkManager 支持以密钥文件格式存储的配置文件。但是,默认情况下,如果您使用 NetworkManager 工具(如 nmcli
、network
RHEL 系统角色或 nmstate
API)来管理配置文件,NetworkManager 仍然使用 ifcfg
格式的配置文件。
在下一个主 RHEL 版本中,密钥文件格式将为默认。
25.1. NetworkManager 配置文件的密钥文件格式
NetworkManager 在磁盘上存储连接配置文件时,使用 INI 样式的密钥文件格式。
密钥文件格式的以太网连接配置文件示例:
[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 设置名称,如 nm-settings(5)
和 nm-settings-keyfile(5)
手册页中所述。该部分中的每一个键值对是手册页设置规范中列出的一个属性。
NetworkManager 密钥文件中的大部分变量都具有一对一映射。这意味着 NetworkManager 属性以相同的名称和格式的变量存储在密钥文件中。不过,也有例外情况,主要是为了使密钥文件语法更易于阅读。有关这些例外的列表,请查看 nm-settings-keyfile(5)
手册页。
出于安全考虑,由于连接配置文件可以包含敏感信息,如私钥和密语,NetworkManager 仅使用 root
拥有的配置文件,并且仅可由 root
读和写。
根据连接配置文件的目的,将其保存在以下目录中:
-
/etc/NetworkManager/system-connections/
:持久配置文件的位置。如果您使用 NetworkManager API 修改持久配置文件,NetworkManager 会在此目录中写并覆盖文件。 -
/run/NetworkManager/system-connections/
:用于在重启系统时自动删除的临时配置文件。 -
/usr/lib/NetworkManager/system-connections/
:用于预先部署的不可变的配置文件。当您使用 NetworkManager API 编辑此类配置文件时,NetworkManager 会将此配置文件复制到持久性存储或临时存储中。
NetworkManager 不会自动从磁盘重新加载配置文件。当您以密钥文件格式创建或更新连接配置文件时,请使用 nmcli connection reload
命令告知 NetworkManager 这些变化。
25.2. 以密钥文件格式创建 NetworkManager 配置文件
您可以手动创建密钥文件格式的 NetworkManager 连接配置集。
手动创建或更新配置文件可能会导致意外或无法正常工作的网络配置。红帽建议您使用 NetworkManager 工具,如 nmcli
、网络
RHEL 系统角色或 nmstate
API 来管理 NetworkManager 连接。
步骤
如果您为硬件接口(如以太网)创建了一个配置文件,请显示此接口的 MAC 地址:
# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:53:00:8f:fa:66 brd ff:ff:ff:ff:ff:ff
创建连接配置文件。例如,对于使用 DHCP 的以太网设备的连接配置文件,请使用以下内容创建
/etc/NetworkManager/system-connections/example.nmconnection
文件:[connection] id=example_connection type=ethernet autoconnect=true [ipv4] method=auto [ipv6] method=auto [ethernet] mac-address=00:53:00:8f:fa:66
注意您可以使用任何以
.nmconnection
为后缀的文件名。但是,当您稍后使用nmcli
命令来管理连接时,您必须在引用此连接时使用id
变量中设置的连接名称。当省略id
变量时,请使用不带.nmconnection
的文件名来引用此连接。对配置文件设置权限,以便只有
root
用户可以读和更新它:# chown root:root /etc/NetworkManager/system-connections/example.nmconnection # chmod 600 /etc/NetworkManager/system-connections/example.nmconnection
重新加载连接配置文件:
# nmcli connection reload
验证 NetworkManager 是否从配置文件读取配置文件:
# nmcli -f NAME,UUID,FILENAME connection NAME UUID FILENAME example-connection 86da2486-068d-4d05-9ac7-957ec118afba /etc/NetworkManager/system-connections/example.nmconnection ...
如果命令未显示新添加的连接,请验证文件权限和您在文件中使用的语法是否正确。
可选:如果您将配置文件中的
autoconnect
变量设为false
,请激活连接:# nmcli connection up example_connection
验证
显示连接配置文件:
# nmcli connection show example_connection
显示接口的 IP 设置:
# ip address show enp1s0
其他资源
-
nm-settings-keyfile(5)
25.3. 将 NetworkManager 配置集从 ifcfg 迁移到 keyfile 格式
您可以使用 nmcli connection migrate
命令将现有 ifcfg
连接配置集迁移到 keyfile 格式。这样,所有连接配置集都将使用一个位置,并以首选格式使用。
先决条件
-
您有
ifcfg
格式的连接配置集,采用/etc/sysconfig/network-scripts/
目录中。
步骤
迁移连接配置集:
# nmcli connection migrate Connection 'enp1s0' (43ed18ab-f0c4-4934-af3d-2b3333948e45) successfully migrated. Connection 'enp2s0' (883333e8-1b87-4947-8ceb-1f8812a80a9b) successfully migrated. ...
验证
另外,您可以验证您是否成功迁移了所有连接配置集:
# nmcli -f TYPE,FILENAME,NAME connection TYPE FILENAME NAME ethernet /etc/NetworkManager/system-connections/enp1s0.nmconnection enp1s0 ethernet /etc/NetworkManager/system-connections/enp2s0.nmconnection enp2s0 ...
其他资源
-
nm-settings-keyfile(5)
-
nm-settings-ifcfg-rh(5)
-
nmcli(1)
25.4. 使用 nmcli 在离线模式中创建密钥文件连接配置集
红帽建议您使用 NetworkManager 工具,如 nmcli
、network
RHEL 系统角色或 nmstate
API 来管理 NetworkManager 连接。但是,您也可以使用 nmcli --offline connection add
命令以离线模式创建不同的连接配置集。
脱机模式可确保 nmcli
在没有 NetworkManager
服务的情况下运行,以通过标准输出生成 keyfile 连接配置集。此功能在以下情况中很有用:
- 您需要创建需要预先部署的连接配置集。例如在容器镜像中,或者作为 RPM 软件包。
-
您需要在
NetworkManager
服务不可用的环境中创建连接配置集。例如,您需要使用chroot
实用程序。或者,当您想通过 Kickstart%post
脚本创建或修改 RHEL 系统的网络配置时。
您可以创建以下连接配置集类型:
- 静态以太网连接
- 动态以太网连接
- 网络绑定
- 网桥
- VLAN 或任何支持的连接类型
手动创建或更新配置文件可能会导致意外或无法正常工作的网络配置。
先决条件
-
NetworkManager
服务已停止。
步骤
以 keyfile 格式创建新连接配置集。例如,对于不使用 DHCP 的以太网设备的连接配置文件,请运行类似的
nmcli
命令:# nmcli --offline connection add type ethernet con-name Example-Connection ipv4.addresses 192.0.2.1/24 ipv4.dns 192.0.2.200 ipv4.method manual > /etc/NetworkManager/system-connections/output.nmconnection
注意使用
con-name
键指定的连接名称被保存到生成的配置集的id
变量中。当您使用nmcli
命令稍后管理这个连接时,请按如下所示指定连接:-
如果没有省略
id
变量,请使用连接名称,如Example-Connection
。 -
当没有使用
id
变量时,请使用没有.nmconnection
后缀的文件名,如output
。
-
如果没有省略
对配置文件设置权限,以便只有
root
用户可以读和更新它:# chmod 600 /etc/NetworkManager/system-connections/output.nmconnection # chown root:root /etc/NetworkManager/system-connections/output.nmconnection
启动
NetworkManager
服务:# systemctl start NetworkManager.service
可选:如果您将配置文件中的
autoconnect
变量设为false
,请激活连接:# nmcli connection up Example-Connection
验证
验证
NetworkManager
服务是否正在运行:# systemctl status NetworkManager.service ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-08-03 13:08:32 CEST; 1min 40s ago Docs: man:NetworkManager(8) Main PID: 7138 (NetworkManager) Tasks: 3 (limit: 22901) Memory: 4.4M CGroup: /system.slice/NetworkManager.service └─7138 /usr/sbin/NetworkManager --no-daemon Aug 03 13:08:33 example.com NetworkManager[7138]: <info> [1659524913.3600] device (vlan20): state change: secondaries -> activated (reason 'none', sys-iface-state: 'assume') Aug 03 13:08:33 example.com NetworkManager[7138]: <info> [1659524913.3607] device (vlan20): Activation: successful, device activated. ...
验证 NetworkManager 是否可以从配置文件中读取配置集:
# nmcli -f TYPE,FILENAME,NAME connection TYPE FILENAME NAME ethernet /etc/NetworkManager/system-connections/output.nmconnection Example-Connection ethernet /etc/sysconfig/network-scripts/ifcfg-enp1s0 enp1s0 ...
如果输出没有显示新创建的连接,请验证密钥文件权限和您所用的语法是否正确。
显示连接配置文件:
# nmcli connection show Example-Connection connection.id: Example-Connection connection.uuid: 232290ce-5225-422a-9228-cb83b22056b4 connection.stable-id: -- connection.type: 802-3-ethernet connection.interface-name: -- connection.autoconnect: yes ...
其他资源
-
nmcli(1)
-
nm-settings-keyfile(5)
- NetworkManager 配置文件的密钥文件格式
- 使用 nmcli 配置带有静态 IP 地址的以太网连接
- 使用 nmcli 配置带有动态 IP 地址的以太网连接
- 使用 nmcli 配置 VLAN 标记
- 使用 nmcli 配置网络桥接
- 使用 nmcli 配置网络绑定
第 26 章 systemd 网络目标和服务
NetworkManager 在系统引导过程中配置网络。但是,当使用远程 root(/)引导时,例如,如果 root 目录存储在 iSCSI 设备上,网络设置会在 RHEL 启动之前在初始 RAM 磁盘(initrd
)中应用。例如,如果在内核命令行中使用 rd.neednet=1
指定网络配置,或者指定配置来挂载远程文件系统,那么网络设置将在 initrd
上应用。
在应用网络设置时,RHEL 使用 network
和 network-online
目标和 NetworkManager-wait-online
服务。另外,如果这些服务无法动态重新加载,您可以将 systemd
服务配置为在网络完全可用后启动。
26.1. network 和 network-online systemd target 的不同
systemd 维护 network
和 network-online
目标单元。特殊单元,如 NetworkManager-wait-online.service
,具有 WantedBy=network-online.target
和 Before=network-online.target
参数。如果启用了,这些单元将启动 network-online.target
,并延迟要达到的目标,直到建立了某种形式的网络连接。它们会延迟 network-online
目标,直到网络连接了。
network-online
目标启动一个服务,这会对进一步执行增加更长的延迟。systemd 会自动使用这个目标单元的 Wants
和 After
参数来向所有 System V(SysV) init
脚本服务单元添加依赖项,这些服务单元具有一个指向 $network
工具的 Linux Standard Base(LSB)头。LSB 头是 init
脚本的元数据。您可以使用它指定依赖项。这与 systemd
目标类似。
network
目标不会显著延迟引导进程的执行。到达 network
目标意味着,负责设置网络的服务已启动。但并不意味着已经配置了一个网络设备。这个目标在关闭系统的过程中非常重要。例如,如果您在引导过程中有一个排在 network
目标之后的服务,则这个依赖关系在关闭过程中会反过来。在服务停止后,网络才会断开连接。远程网络文件系统的所有挂载单元都会自动启动 network-online
目标单元,并在其之后排序。
network-online
目标单元只在系统启动过程中有用。系统完成引导后,这个目标不会跟踪网络的在线状态。因此,您无法使用 network-online
来监控网络连接。这个目标提供了一个一次性系统启动概念。
26.2. NetworkManager-wait-online 概述
同步传统网络脚本会遍历所有配置文件来设置设备。它们应用所有与网络相关的配置并确保网络在线。
NetworkManager-wait-online
服务会等待要配置的网络的超时时间。这个网络配置涉及插入以太网设备、扫描 Wi-Fi 设备等。NetworkManager 会自动激活配置为自动启动的适当配置集。因 DHCP 超时或类似事件导致自动激活失败,网络管理器(NetworkManager)可能会在一定时间内处于忙碌状态。根据配置,NetworkManager 会重新尝试激活同一配置集或不同的配置集。
当启动完成后,所有配置集都处于断开连接的状态,或被成功激活。您可以配置配置集来自动连接。以下是一些参数示例,这些参数设定超时或者在连接被视为活跃时定义:
-
connection.wait-device-timeout
- 设置用来检测设备的驱动程序的超时时间 -
ipv4.may-fail
和ipv6.may-fail
- 使用一个 IP 地址系列设置激活,或者一个特定的地址系列是否必须已完成配置。 -
ipv4.gateway-ping-timeout
- 延迟激活。
其他资源
-
nm-settings(5)
手册页
26.3. 将 systemd 服务配置为在网络已启动后再启动
Red Hat Enterprise Linux 在 /usr/lib/systemd/system/
目录中安装 systemd
服务文件。此流程为 /etc/systemd/system/service_name.service.d/
中的服务文件创建一个置入段,该文件与 /usr/lib/systemd/system/
中的服务文件一起使用,以便在网络在线后启动特定的 服务。如果置入段中的设置与 /usr/lib/systemd/system/
中服务文件中的设置重叠,则它具有更高的优先级。
步骤
要在编辑器中打开服务文件,请输入:
# systemctl edit service_name
输入以下内容并保存更改:
[Unit] After=network-online.target
重新加载
systemd
服务。# systemctl daemon-reload
第 27 章 Linux 流量控制
Linux 提供管理和操作数据包传输的工具。Linux 流量控制(TC)子系统帮助进行策略、分类、控制以及调度网络流量。TC 还可以通过使用过滤器和动作在分类过程中利用数据包内容分栏。TC 子系统使用排队规则(qdisc
)来达到此目的,这是 TC 架构的基本元素。
调度机制在进入或退出不同的队列前确定或者重新安排数据包。最常见的调度程序是先入先出(FIFO)调度程序。您可以使用 tc
工具临时执行 qdiscs
操作,也可以使用 NetworkManager 永久执行操作。
在 Red Hat Enterprise Linux 中,您可以使用各种方法配置默认队列规则来管理网络接口上的流量。
27.1. 排队规则概述
排队规则(qdiscs
)帮助排队,之后通过网络接口调度流量传输。qdisc
有两个操作:
- 排队请求,以便在以后传输时对数据包进行排队
- 出队请求,以便可以选择其中一个排队的数据包进行即时传输。
每个 qdisc
都有一个 16 位十六进制标识数字,称为 句柄
,带有一个附加的冒号,如 1:
或 abcd:
这个数字被称为 qdisc
主号码。如果 qdisc
有类,则标识符是由两个数字组成的对,主号码在次要号码之前,即 <major>:<minor>
,例如 abcd:1
。次要号码的编号方案取决于 qdisc
类型。有时,编号是系统化的,其中第一类的 ID 为 < <major>:1
,第二类的 ID 为 <major>:2
,等等。一些 qdiscs
允许用户在创建类时随机设置类的次要号码。
- 类
qdiscs
存在不同类型的
qdiscs
,帮助向和从网络接口传输数据包。您可以使用根、父或子类配置qdiscs
。子对象可以被附加的位置称为类。qdisc
中的类是灵活的,始终包含多个子类或一个子类qdisc
。不禁止包含类qdisc
本身的类,这有助于实现复杂的流量控制场景。类
qdiscs
本身不存储任何数据包。相反,它们根据特定于qdisc
的标准,将排队和出队请求传到它们其中的一个子类。最后,这个递归数据包传递最终结束保存数据包的位置(在出现排队时从中提取)。- 无类别
qdiscs
-
有些
qdiscs
不包含子类,它们称为无类别qdiscs
。与类qdiscs
相比,无类别qdiscs
需要较少的自定义。通常情况下,将它们附加到接口就足够了。
其他资源
-
tc(8)
手册页 -
tc-actions (8)
手册页
27.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
- 配置的链路容量已满的次数 -
sent
- 出队的数量
-
27.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_len 0 old_flows_len 0
更新现有的
qdisc
:# sysctl -w net.core.default_qdisc=pfifo_fast
要应用更改,请重新加载网络驱动程序:
# rmmod 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 ....
27.4. 使用 tc 工具临时设置网络接口的当前 qdisk
您可以更新当前的 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
27.5. 使用 NetworkManager 永久设置网络接口的当前 qdisk
您可以更新 NetworkManager 连接当前的 qdisc
值。
步骤
可选:查看当前的
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 ----------------
其他资源
-
nm-settings(5)
手册页
27.6. RHEL 中可用的 qdiscs
每个 qdisc
解决唯一的与网络相关的问题。以下是 RHEL 中可用的 qdiscs
列表。您可以使用以下任何一个 qdisc
来根据您的网络要求来塑造网络流量。
表 27.1. RHEL 中的可用调度程序
qdisc 名称 | 包含在 | 卸载支持 |
---|---|---|
异步传输模式(ATM) |
| |
基于类的队列 |
| |
基于信用的塑造程序 |
| 是 |
CHOose 和 Keep 用于有响应的流量,CHOose 和 Kill 用于没有响应的流量(CHOKE) |
| |
受控的延迟(CoDel) |
| |
轮循(DRR) |
| |
Differentiated Services marker (DSMARK) |
| |
Enhanced Transmission Selection (ETS) |
| 是 |
Fair Queue (FQ) |
| |
Fair Queuing Controlled Delay (FQ_CODel) |
| |
Generalized Random Early Detection (GRED) |
| |
Hierarchical Fair Service Curve (HSFC) |
| |
Heavy-Hitter Filter (HHF) |
| |
Hierarchy Token Bucket (HTB) |
| |
INGRESS |
| 是 |
Multi Queue Priority (MQPRIO) |
| 是 |
Multiqueue (MULTIQ) |
| 是 |
Network Emulator (NETEM) |
| |
Proportional Integral-controller Enhanced (PIE) |
| |
PLUG |
| |
Quick Fair Queueing (QFQ) |
| |
Random Early Detection (RED) |
| 是 |
Stochastic Fair Blue (SFB) |
| |
Stochastic Fairness Queueing (SFQ) |
| |
Token Bucket Filter (TBF) |
| 是 |
Trivial Link Equalizer (TEQL) |
|
qdisc
卸载需要对 NIC 的硬件和驱动程序的支持。
其他资源
-
tc(8)
手册页
第 28 章 多路径 TCP 入门
传输控制协议 (TCP) 可确保通过互联网可靠地提供数据,并自动调整其带宽以响应网络负载。多路径 TCP (MPTCP) 是原始 TCP 协议 (single-path) 的扩展。MPTCP 支持传输连接同时在多个路径中运行,并为用户端点设备带来网络连接冗余。
28.1. 了解 MPTCP
多路径 TCP (MPTCP) 协议允许在连接端点间同时使用多个路径。协议设计提高了连接稳定性,与单一路径 TCP 相比也带来了其他好处。
在 MPTCP 术语中,链接被视为路径。
以下是使用 MPTCP 的一些优点:
- 它允许一个连接同时使用多个网络接口。
- 如果连接绑定到链路速度,则使用多个链接可能会增加连接的吞吐量。请注意,如果连接绑定到 CPU,则使用多个链路会导致连接性能下降。
- 它提高对链接故障的恢复能力。
有关 MPTCP 的详情,我们强烈推荐您查阅 附加资源。
28.2. 准备 RHEL 启用 MPTCP 支持
默认情况下,RHEL 中禁用 MPTCP 支持。启用 MPTCP,以便支持此特性的应用程序可以使用它。此外,您必须配置用户空间应用程序,以便在那些应用程序默认具有 TCP 套接字时强制使用 MPTCP 套接字。
您可以使用 sysctl
工具启用 MPTCP 支持,并使用 SystemTap
脚本为系统范围的应用程序启用 MPTCP 准备 RHEL。
前提条件
安装以下软件包:
-
systemtap
-
iperf3
流程
在内核中启用 MPTCP 套接字:
# echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
验证内核中是否启用了 MPTCP:
# sysctl -a | grep mptcp.enabled net.mptcp.enabled = 1
使用以下内容创建
mptcp-app.stap
文件:#!/usr/bin/env stap %{ #include <linux/in.h> #include <linux/ip.h> %} /* RSI contains 'type' and RDX contains 'protocol'. */ function mptcpify () %{ if (CONTEXT->kregs->si == SOCK_STREAM && (CONTEXT->kregs->dx == IPPROTO_TCP || CONTEXT->kregs->dx == 0)) { CONTEXT->kregs->dx = IPPROTO_MPTCP; STAP_RETVALUE = 1; } else { STAP_RETVALUE = 0; } %} probe kernel.function("__sys_socket") { if (mptcpify() == 1) { printf("command %16s mptcpified\n", execname()); } }
强制用户空间应用程序创建 MPTCP 套接字而不是 TCP 套接字:
# stap -vg mptcp-app.stap
注意:此操作会影响命令之后启动的所有 TCP 套接字。在使用 Ctrl+C 中断上述命令后,应用将继续使用 TCP 套接字。
另外,要允许 MPTCP 只用于特定的应用程序,您可以使用以下内容修改
mptcp-app.stap
文件: