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
命令 (推荐)¶
用户不仅可以在纯命令行模式下配置网络,还可以使用交互式命令配置网络。
nmcli connection
¶
nmcli connection
命令可以显示、删除、添加、修改、编辑、启动、停止等。
有关具体用法,请参考 nmcli connection add --help
、nmcli connection edit --help
、nmcli 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
信息
通过nmcli
或nmtui
进行的操作是永久保存的,而不是临时的。
链路聚合¶
有些使用多个网卡进行链路聚合。在早期,使用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.conf
和man 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 |
---|---|
id | con-name的别名,其值为字符串。 |
uuid | 通用唯一标识符,其值为字符串。 |
type | 连接类型,其值可以是ethernet、bluetooth、vpn、vlan等。您可以使用man nmcli 查看所有支持的类型。 |
interface-name | 此连接绑定的网络接口名称,其值为字符串。 |
timestamp | Unix时间戳,以秒为单位。此处的值为自1970年1月1日以来的秒数。 |
autoconnect | 系统启动时是否自动启动。值为布尔类型。 |
ethernet 标题名称可以包含这些常见的键值对
键名 | description |
---|---|
mac-address | MAC物理地址。 |
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 |
作者:田思礼
贡献者:史蒂文·斯宾塞