跳至内容

NetworkManager 网络配置工具套件

2004 年,Red Hat 启动了 **NetworkManager** 项目,旨在使 Linux 用户更轻松地满足当前网络管理的需求,尤其是无线网络的管理。如今,该项目由 GNOME 管理。NetworkManager 的主页可以在此处找到

官方介绍 - NetworkManager 是一个标准的 Linux 网络配置工具套件。它支持从桌面到服务器和移动设备的各种网络设置,并与流行的桌面环境和服务器配置管理工具完美集成。

该套件主要包含两个命令行工具

  • nmtui. 在图形界面中配置网络。
shell > dnf -y install NetworkManager NetworkManager-tui
shell > nmtui
NetworkManager TUI
编辑连接
激活连接
设置系统主机名
退出
确定
  • nmcli. 使用命令行配置网络,无论是纯命令行还是交互式命令行。
Shell > nmcli connection show
NAME    UUID                                  TYPE      DEVICE
ens160  25106d13-ba04-37a8-8eb9-64daa05168c9  ethernet  ens160

对于 RockyLinux 8.x,我们介绍了如何在本文档中配置其网络。您可以使用 vim 编辑 ** /etc/sysconfig/network-scripts/** 目录中的网卡配置文件,也可以使用 nmcli/nmtui,两者都是可以接受的。

udev 设备管理器命名规则

对于 RockyLinux 9.x,如果您进入 ** /etc/sysconfig/network-scripts/** 目录,会看到一个 **readme-ifcfg-rh.txt** 说明文本,提示您进入 ** /etc/NetworkManager/system-connections/** 目录。

Shell > cd /etc/NetworkManager/system-connections/  && ls
ens160.nmconnection

这里的 ens160 指的是系统中网卡的名称。您可能会想知道为什么名字看起来如此奇怪?这是因为 udev 设备管理器。它支持许多不同的命名方案。默认情况下,会根据固件、拓扑结构和位置信息分配固定名称。它的优势包括

  • 设备名称是完全可预测的。
  • 即使您添加或删除硬件,设备名称也会保持固定,因为不会发生重新枚举。
  • 有缺陷的硬件可以无缝更换。

在 RHEL 9 和相应的社区版本操作系统中,一致的设备命名默认启用。udev 设备管理器将根据以下方案生成设备名称

方案描述示例
1设备名称包含板载设备的固件或 BIOS 提供的索引号。如果此信息不可用或不适用,udev 将使用方案 2。eno1
2设备名称包含固件或 BIOS 提供的 PCI Express (PCIe) 热插拔插槽索引号。如果此信息不可用或不适用,udev 将使用方案 3。ens1
3设备名称包含硬件连接器的物理位置。如果此信息不可用或不适用,udev 将使用方案 5。enp2s0
4设备名称包含 MAC 地址。Red Hat Enterprise Linux 默认不使用此方案,但管理员可以选择使用它。enx525400d5e0fb
5传统的不可预测内核命名方案。如果 udev 无法应用任何其他方案,设备管理器将使用此方案。eth0

udev 设备管理器根据接口类型为 NIC 命名前缀

  • **en** 用于以太网。
  • **wl** 用于无线局域网 (WLAN)。
  • **ww** 用于无线广域网 (WWAN)。
  • **ib**,InfiniBand 网络。
  • **sl**,串行线路互联网协议 (slip)

在前缀中添加一些后缀,例如

  • **o** 板载_索引_编号
  • **s** 热插拔_插槽_索引_编号 **[f]** 功能 **[d]** 设备_ID
  • **x** MAC_地址
  • **[P]** 域号 **p** 总线 **s** 插槽 **[f]** 功能 **[d]** 设备_ID
  • **[P]** 域号 **p** 总线 **s** 插槽 **[f]** 功能 **[u]** USB 端口 **[c]** 配置 **[i]** 接口

您可以使用 man 7 systemd.net-naming-scheme 获取更详细的信息。

用户不仅可以在纯命令行模式下配置网络,还可以使用交互式命令配置网络。

nmcli connection

nmcli connection 命令可以显示、删除、添加、修改、编辑、启动、停止等。

有关具体用法,请参考 nmcli connection add --helpnmcli connection edit --helpnmcli connection modify --help 等等。

例如,要使用纯命令行配置新的 ipv4 静态 IP 连接并自动启动,可以

Shell > nmcli  connection  add  type  ethernet  con-name   CONNECTION_NAME  ifname  NIC_DEVICE_NAME   \
ipv4.method  manual  ipv4.address "192.168.10.5/24"  ipv4.gateway "192.168.10.1"  ipv4.dns "8.8.8.8,114.114.114.114" \
ipv6.method  disabled  autoconnect yes

如果您使用 DHCP 获取 ipv4 地址,可以

Shell > nmcli  connection  add  type ethernet con-name CONNECTION_NAME  ifname  NIC_DEVICE_NAME \
ipv4.method  auto  ipv6.method  disabled  autoconnect  yes

使用上述配置,连接不会被激活。您需要执行以下操作

Shell > nmcli connection up  NIC_DEVICE_NAME

基于现有连接,通过edit关键字进入交互式界面,并进行修改

Shell > nmcli connection  edit  CONNECTION_NAME
nmcli > help

您也可以使用modify关键字直接从命令行修改连接的一个或多个属性。例如

Shell > nmcli connection modify CONNECTION_NAME autoconnect yes ipv6.method dhcp

信息

通过nmclinmtui进行的操作是永久保存的,而不是临时的。

有些使用多个网卡进行链路聚合。在早期,使用bonding技术,有七种工作模式(0~6),并且bond模式最多只能支持两个网卡。后来,teaming技术逐渐被用作替代方案,有五种工作模式,并且team模式可以使用多达八个网卡。bonding和teaming的比较链接可以在此链接找到

例如,bonding的0模式

Shell > nmcli  connection  add  type  bond  con-name  BOND_CONNECTION_NAME   ifname  BOND_NIC_DEVICE_NAME  mode 0
Shell > nmcli  connection  add  type  bond-slave   ifname NIC_DEVICE_NAME1   master  BOND_NIC_DEVICE_NAME
Shell > nmcli  connection  add  type  bond-slave   ifname NIC_DEVICE_NAME2   master  BOND_NIC_DEVICE_NAME

网卡配置

警告

不建议通过vim或其他编辑器进行更改。

您可以通过man 5 NetworkManager.confman 5 nm-settings-nmcli查看更详细的信息。

NetworkManager网卡配置文件的内容是一个init风格的键值文件。例如

Shell > cat /etc/NetworkManager/system-connections/ens160.nmconnection
[connection]
id=ens160
uuid=5903ac99-e03f-46a8-8806-0a7a8424497e
type=ethernet
interface-name=ens160
timestamp=1670056998

[ethernet]
mac-address=00:0C:29:47:68:D0

[ipv4]
address1=192.168.100.4/24,192.168.100.1
dns=8.8.8.8;114.114.114.114;
method=manual

[ipv6]
addr-gen-mode=default
method=disabled

[proxy]
  • 以#开头的行和空行被认为是注释。
  • 用[和]括起来的表示它打算声明的标题,下面包含特定的键值对。每个声明的标题及其键值对构成一个语法段。
  • 任何带有.nmconnection后缀的文件都可以被NetworkManager使用。

connection 标题名称可以包含这些常见的键值对

键名description
idcon-name的别名,其值为字符串。
uuid通用唯一标识符,其值为字符串。
type连接类型,其值可以是ethernet、bluetooth、vpn、vlan等。您可以使用man nmcli查看所有支持的类型。
interface-name此连接绑定的网络接口名称,其值为字符串。
timestampUnix时间戳,以秒为单位。此处的值为自1970年1月1日以来的秒数。
autoconnect系统启动时是否自动启动。值为布尔类型。

ethernet 标题名称可以包含这些常见的键值对

键名description
mac-addressMAC物理地址。
mtu最大传输单元。
auto-negotiate是否自动协商。值为布尔类型。
duplex值可以是half(半双工)、full(全双工)
speed指定网卡的传输速率。100为100Mbit/s。如果auto-negotiate=false,则必须设置speed键和duplex键;如果auto-negotiate=true,则使用协商的速率,这里写入不会生效(这仅适用于BASE-T 802.3规范);当非零时,duplex键必须有值。

ipv4 标题名称可以包含这些常见的键值对

键名description
addresses分配的IP地址
gateway接口的网关(下一跳)
dns正在使用的域名服务器
method获取IP的方法。值为字符串类型。值可以是:auto、disabled、link-local、manual、shared

作者:田思礼

贡献者:史蒂文·斯宾塞