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-script/ 目录下的网卡配置文件,也可以使用 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
设备管理器根据接口类型为网卡命名
- 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]
- 以 # 开头和空行被视为注释。
- 用方括号 [] 括起来的是节 (section),它声明了一个标题,其下方是包含的具体键值对。每个声明的标题及其键值对构成了一个语法段。
- 任何以 .nmconnection 结尾的文件都可以被 NetworkManager 使用。
connection 节名称可以包含这些通用键值对:
键名 | 描述 |
---|---|
id | con-name 的别名,其值为字符串。 |
uuid | 通用唯一标识符,其值为字符串。 |
type | 连接类型,其值可以是 ethernet, bluetooth, vpn, vlan 等。你可以使用 man nmcli 查看所有支持的类型。 |
interface-name | 此连接绑定的网络接口的名称,其值为字符串。 |
timestamp | Unix 时间戳,单位为秒。此处的值是自 1970 年 1 月 1 日以来的秒数。 |
autoconnect | 系统启动时是否自动启动。其值为布尔类型。 |
ethernet 节名称可以包含这些通用键值对:
键名 | 描述 |
---|---|
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 节名称可以包含这些通用键值对:
键名 | 描述 |
---|---|
addresses | 分配的 IP 地址。 |
gateway | 接口的网关 (下一跳)。 |
dns | 使用的域名服务器。 |
method | 获取 IP 的方法。其值为字符串类型。其值可以是: auto, disabled, link-local, manual, shared。 |
作者:李天赐
贡献者:Steven Spencer