NetworkManager之连接管理
概念
网络连接,是计算机网络中的一个基本概念,它涉及到不同设备之间的通信协议、数据传输方法以及安全措施。通过网络连接,不同的网络设备可以共享资源和信息,实现有效的通信。
而在NetworkManager服务中,也有连接对象这个概念,它是对网络连接配置的抽象,包含了NetworkManager用来管理网络设备连接的所有必要信息。通过对这些连接对象的管理,用户可以轻松地切换网络配置、连接到不同的网络,以及调整网络设置以满足不同的网络需求。
使用
语法
从子命令数量可以看出,连接管理在nm中是一个重要部分。
Usage: nmcli connection { COMMAND | help }
COMMAND := { show | up | down | add | modify | clone | edit | delete | monitor | reload | load | import | export }
show [--active] [--order <order spec>]
show [--active] [id | uuid | path | apath] <ID> ...
up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file <file with passwords>]
down [id | uuid | path | apath] <ID> ...
add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- ([+|-]<setting>.<property> <value>)+]
modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+
clone [--temporary] [id | uuid | path ] <ID> <new name>
edit [id | uuid | path] <ID>
edit [type <new_con_type>] [con-name <new_con_name>]
delete [id | uuid | path] <ID>
monitor [id | uuid | path] <ID> ...
reload
load <filename> [ <filename>... ]
import [--temporary] type <type> file <file to import>
export [id | uuid | path] <ID> [<output file>]
show 用法
用于显示网络连接的信息。
查看所有网络连接
不带任何参数的 nmcli connection show
命令会列出系统中所有的网络连接配置,无论它们当前是否活动。这包括了连接的名称、UUID、类型(如以太网或Wi-Fi)、以及使用该连接的设备名称。
语法
nmcli connection show
示例
[root@donkey ~]# nmcli connection show
NAME UUID TYPE DEVICE
enp1s0 f088cef4-1eb5-42c6-b9c4-0a6c3cd0474d ethernet enp1s0
enp2s0 82ab9388-220b-43fc-a9b7-d80ab6bbaa75 ethernet --
在这个例子中,enp1s0 是一个活动的以太网连接,而enp2s0,enp3s0和enp4s0是配置了但当前未使用的连接。
查看活动的网络连接
使用 --active 参数,命令只会列出当前活动的网络连接,即那些正在被设备使用的连接。
语法
nmcli connection show [--active]
- --active:可选参数,仅显示当前处于活动状态(已连接)的连接。如果不指定该参数,会显示所有连接,包括未激活的。
示例
[root@donkey ~]# nmcli connection show --active
NAME UUID TYPE DEVICE
enp1s0 f088cef4-1eb5-42c6-b9c4-0a6c3cd0474d ethernet enp1s0
这个命令只会显示像 enp1s0 这样当前正在使用的连接。
按特定顺序显示连接
通过 --order 参数,用户可以指定连接显示的顺序。例如,可以按照连接类型或名称排序。
语法
nmcli connection show [--order <order spec>]
- --order <order spec> 可选参数,指定显示连接的排序方式。<order spec> 是一个逗号分隔的字符串,每一项都是 <字段名>[:<方向>] 的格式:
- <字段名>:可以是 name、uuid、type、device、active 等连接属性。
- <方向>:可以是 asc(升序,默认)或 desc(降序)。
示例
[root@donkey ~]# nmcli connection show --order name # 按升序排序(默认)
NAME UUID TYPE DEVICE
enp1s0 f088cef4-1eb5-42c6-b9c4-0a6c3cd0474d ethernet enp1s0
enp2s0 82ab9388-220b-43fc-a9b7-d80ab6bbaa75 ethernet --
enp3s0 16fb0e28-9b3d-4f7a-a446-18c23913b5b5 ethernet --
enp4s0 f5f0963b-dc23-408e-9e11-56a05db66878 ethernet --
[root@donkey ~]# nmcli connection show --order -name # 按降序排序
NAME UUID TYPE DEVICE
enp4s0 f5f0963b-dc23-408e-9e11-56a05db66878 ethernet --
enp3s0 16fb0e28-9b3d-4f7a-a446-18c23913b5b5 ethernet --
enp2s0 82ab9388-220b-43fc-a9b7-d80ab6bbaa75 ethernet --
enp1s0 f088cef4-1eb5-42c6-b9c4-0a6c3cd0474d ethernet enp1s0
【注意】 在查询类型前面加上 + 号或不加,按升序展示,加上 - 号按降序排序。
up 用法
用于激活(连接)指定的网络连接配置文件的命令。这个命令可以通过多种方式指定要激活的连接,包括使用连接的ID、UUID或路径。此外,它还允许用户指定接口名称(ifname)、接入点的BSSID(ap)、服务提供商名称(nsp),以及包含密码的文件(passwd-file)。
通过特定标识激活网络设备上的连接
语法
nmcli connection up [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>] [passwd-file <file with passwords>]
ifname - specifies the device to active the connection on
ap - specifies AP to connect to (only valid for Wi-Fi)
nsp - specifies NSP to connect to (only valid for WiMAX)
passwd-file - file with password(s) required to activate the connection
示例
- 激活指定ID的网络连接
[root@donkey ~]# nmcli connection up id enp1s0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15)
- 激活指定UUID的网络连接
[root@donkey ~]# nmcli connection up uuid f088cef4-1eb5-42c6-b9c4-0a6c3cd0474d
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/16)
【说明】 很多标识如网络ID(即网络连接查看输出中的NAME),UUID等都可通过命令 nmcli connection show
获取。
- 激活指定DBus路径的网络连接(不常用)
这种方法不常用,因为大多数情况使用连接的名称(ID)或UUID更方便。DBus路径是一个更技术性的标识符,通常在程序或脚本中使用,而不是在日常的命令行操作中。
- 激活指定网络接口的网络连接
[root@donkey ~]# nmcli connection up id enp1s0 ifname enp1s0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/19)
【说明】ifname 即网络接口意思。
- 激活指定网络接口的网络连接(wify)
nmcli connection up id HomeWiFi ifname wlan0 ap 00:1A:2B:3C:4D:5E
【说明】ap参数作用是如果存在多个同名wify网络时,通过指定BSSID(Wi-Fi网络的物理地址,通常以MAC地址的形式出现)来确保连接到正确的网络。
- 激活带密码认证的网络连接(主要用于wify)
nmcli connection up id HomeWiFi passwd-file /home/user/wifi-passwords.txt
【说明】passwd-file 选项允许用户将Wi-Fi密码存储在一个文件中,而不是在命令行中直接输入。这样做可以提高安全性,避免密码在命令历史中被保存,同时也提高了便利性,特别是对于需要自动化连接网络的脚本和程序来说,同时也支持其他需要认证网络连接类型。
down 用法
用于断开或停用指定的网络连接。
通过特定标识断开网络连接
语法
nmcli connection down [id | uuid | path | apath] <ID> ...
示例
- 通过连接名称断开网络连接
[root@myhost ~]# nmcli connection down id enp2s0
Connection 'enp2s0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/18)
- 通过UUID断开网络连接
[root@myhost ~]# nmcli connection down uuid 8c6fd7b1-ab62-a383-5b96-46e083e04bb1
Connection 'enp2s0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/19)
- 通过当前活动连接的DBus路径断开网络连接。
[root@myhost ~]# nmcli connection down apath /org/freedesktop/NetworkManager/ActiveConnection/20
Connection 'enp2s0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/20)
add 用法
用于创建新的网络连接配置文件。
语法与参数
nmcli connection add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- ([+|-]<setting>.<property> <value>)+]
- COMMON_OPTIONS:适用于添加所有类型网络连接时都可能会用到的选项。这些选项不依赖于特定的连接类型。
- type <type>:指定网络连接的类型(如ethernet、wifi、vpn等)。
- ifname <interface name> | "*":指定网络连接应该使用的接口名称。
- con-name <name>:指定新连接的名称。
- autoconnect yes|no:设置网络连接是否应该自动激活。
- save yes|no:设置是否应该将新连接保存到磁盘上。
- master <master (ifname, or connection UUID or name)>:指定新连接的主连接(用于桥接或绑定)。
- slave-type <master connection type>:指定从属连接的类型(如果新连接是从属连接)。
- TYPE_SPECIFIC_OPTIONS:设置与以太网相关的特定参数。
- mac <mac-address>:指定网络接口的MAC地址。
- mtu <mtu>:设置网络接口的最大传输单元(MTU)大小。
- cloned-mac <cloned MAC address>:指定克隆的MAC地址。
- mode infrastructure|ap|adhoc :定义Wi-Fi网络的工作模式,这个选项主要有infrastructure、ap(接入点模式)、和adhoc三个值。
- SLAVE_OPTIONS:用于配置从属(slave)连接的选项,常见于桥接(bridge)、绑定(bonding)或团队(team)配置中。
- bridge 网桥,它可以将多个网络接口连接在一起,使它们在网络层面上表现得就像一个单一的接口。
- team 网络组,这是一种将多个网络接口组合在一起以提供冗余或增加吞吐量的技术,可以有多个从属接口,这些接口共同工作以实现网络组的目标。
- IP_OPTIONS:用于配置网络连接的IP设置的选项。
- ip4 <IPv4 address>:设置IPv4地址和子网掩码。
- ip6 <IPv6 address>:设置IPv6地址和前缀长度。
- gw4 <IPv4 gateway>:设置IPv4默认网关。
- gw6 <IPv6 gateway>:设置IPv6默认网关。
- [-- ([+|-]<setting>.<property> <value>)+]:用于直接设置或修改NetworkManager配置文件中的特定设置和属性。
- [+|-]:用于指示是添加(+)还是删除(-)后面指定的设置或属性。
- <setting>:NetworkManager的配置文件中的一个设置部分,例如connection、ipv4、ipv6、wifi等。
- <property>:指定的设置部分中的一个具体属性,例如autoconnect、method、ssid等。
- <value>:这是你想要为指定的属性设置的值。
示例
- 添加一个新的以太网连接
[root@donkey ~]# nmcli connection add type ethernet con-name "enp0s31" ifname enp0s3
Connection 'enp0s31' (9dcfb502-a952-4101-9df8-1f325c58bc11) successfully added.
[root@donkey ~]# nmcli connection show
NAME UUID TYPE DEVICE
enp0s3 f46fbf15-e922-442b-9195-322f1359b749 ethernet enp0s3
enp0s31 9dcfb502-a952-4101-9df8-1f325c58bc11 ethernet --
- 添加一个静态IP的以太网连接
[root@donkey ~]# nmcli connection add type ethernet con-name "enp0s312" ifname eth0 ip4 192.168.31.20/24 gw4 192.168.31.1 ipv4.dns "8.8.8.8"
Connection 'enp0s312' (dc736346-f291-4c6b-8c46-e12376b19754) successfully added.
[root@donkey ~]# nmcli connection show
NAME UUID TYPE DEVICE
enp0s3 f46fbf15-e922-442b-9195-322f1359b749 ethernet enp0s3
enp0s31 9dcfb502-a952-4101-9df8-1f325c58bc11 ethernet --
enp0s312 dc736346-f291-4c6b-8c46-e12376b19754 ethernet --
- 添加一个以太网连接并设置自动连接
[root@donkey ~]# nmcli connection add type ethernet con-name "enp0s313" ifname enp0s3 autoconnect yes
Connection 'enp0s313' (cf7230ef-4ca3-486e-ab7b-6f495e6a2236) successfully added.
modify 用法
用于修改现有的NetworkManager网络连接配置。
语法
nmcli connection modify [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+
- [id | uuid | path]:指定了修改命令的目标连接的标识方式,可以通过连接的ID(名称)、UUID或DBus路径来指定要修改的连接。
- <ID>:选择的标识方式对应的具体值,例如连接的名称、UUID或DBus路径。
- ([+|-]<setting>.<property> <value>)+:指定要修改的设置、属性和新值。
示例
- 修改指定连接IPv4方法为自动(DHCP)
[root@donkey ~]# nmcli connection modify id enp0s3 ipv4.method auto
[root@donkey ~]# nmcli connection show enp0s3 | grep ipv4.method
ipv4.method: auto
- 修改指定连接添加dns服务
[root@donkey ~]# nmcli connection modify id enp0s3 +ipv4.dns "8.8.4.4"
[root@donkey ~]# nmcli c s enp0s3 | grep ipv4.dns
ipv4.dns: 8.8.4.4
- 修改指定连接删除dns服务
[root@donkey ~]# nmcli connection modify id enp0s3 -ipv4.dns "8.8.4.4"
[root@donkey ~]# nmcli c s enp0s3 | grep ipv4.dns
ipv4.dns: --
clone 用法
用于复制一个现有的网络连接配置并创建一个新的配置。
语法
nmcli connection clone [--temporary] [id | uuid | path] <ID> <new name>
- [--temporary]:可选参数,如果使用,新克隆的连接将不会被永久保存,而是仅在当前会话中存在。当关闭会话或重启系统时,这个临时连接将会消失。
- [id | uuid | path]:指定了要克隆的现有连接的标识方式,例如通过连接的ID(名称)、UUID或DBus路径来指定要克隆的连接。
- <ID>:选择的标识方式对应的具体值,例如连接的名称、UUID或DBus路径。
- <new name>:新克隆出的网络连接的名称。
示例
- 创建指定网络连接拷贝
[root@donkey ~]# nmcli connection clone id enp0s3 enp0s3-copy
enp0s3 (f46fbf15-e922-442b-9195-322f1359b749) cloned as enp0s3-copy (878c23e3-500f-47bf-b73f-dc0032747af2).
- 创建指定网络连接一个临时的拷贝
[root@donkey ~]# nmcli connection clone --temporary id enp0s3 enp0s3-copy2
enp0s3 (f46fbf15-e922-442b-9195-322f1359b749) cloned as enp0s3-copy2 (831c4a82-a142-43dc-bcf4-1e69c9ab43b4).
edit 用法
以交互方式编辑网络连接
语法
nmcli connection edit [id | uuid | path] <ID>
- [id | uuid | path]:指定了要编辑的现有连接的标识方式。
- <ID>\:选择的标识方式对应的具体值。
示例
以交互方式编辑连接enp1s0,执行该命令后,nmcli会进入一个交互式会话,可以使用不同的命令来查看和修改连接的属性。
[root@donkey ~]# nmcli c e id enp1s0
===| nmcli interactive connection editor |===
Editing existing '802-3-ethernet' connection: 'enp1s0'
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.
You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli> print
===============================================================================
Connection profile details (enp1s0)
===============================================================================
connection.id: enp1s0
connection.uuid: f088cef4-1eb5-42c6-b9c4-0a6c3cd0474d
...
nmcli> quit
交互命令示例:
- print:显示当前连接的所有设置和属性。
- set
. :修改指定的设置和属性。 - save:保存对连接所做的更改。
- activate:激活连接以测试更改。
- quit:退出编辑会话。
- discard:放弃所有未保存的更改。
以交互方式创建网络连接
语法
nmcli connection edit [type <new connection type>] [con-name <new connection name>]
- [type <new connection type>]:指定要添加的新连接的类型,常见的类型有
- ethernet - 有线以太网连接
- wifi - 无线 Wi-Fi 连接
- bridge - 网桥连接
- bond - 绑定连接
- vlan - VLAN 连接
- vpn - VPN 连接
- [con-name <new connection name>]:指定新连接的名称。
示例
新增名为 test 的新以太网连接。
[root@donkey ~]# nmcli connection edit type ethernet con-name test
===| nmcli interactive connection editor |===
Adding a new '802-3-ethernet' connection
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.
You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli> set ipv4.method manual
nmcli> set ipv4.addresses 192.168.1.112/24
nmcli> set ipv4.gateway 192.168.1.253
nmcli> save
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] no
nmcli> quit
The connection is not saved. Do you really want to quit? (yes/no) [no] yes
【注意】新增保存成功后,还要执行 nmcli connection up 命令来激活该连接。
delete 用法
用于删除一个网络连接配置。
语法
nmcli connection delete [id | uuid | path] <ID>
- [id | uuid | path]:指定了要编辑的现有连接的标识类型。
- <ID>:选择的标识方式对应的具体值。
示例
删除一个名称为enp01s0-test的连接。
[root@donkey ~]# nmcli connection delete id enp01s0-test
Connection 'enp01s0-test' (47ed0c3d-3737-4729-8175-65f44b225b19) successfully deleted.
【注意】
- 如果要删除的连接当前处于活动状态,需要先使用 nmcli connection down 命令将其停用,然后才能删除。
- 无法使用该命令删除硬件设备(如以太网卡),只能删除连接配置。
- 如果连接标识符有歧义,可以明确指定id、uuid或path关键字消除歧义。
monitor 用法
用于监视指定网络连接的状态变化。
语法
nmcli connection monitor [id | uuid | path] <ID>
- [id | uuid | path]:指定了要编辑的现有连接的标识类型。
- <ID>:选择的标识方式对应的具体值。
示例
监视指定名称的网络连接,当连接状态发生变化时,就会输出一行相应的信息,可以使用 Ctrl+C 终止监视。
root@donkey ~]# nmcli connection monitor id enp0s31
如果没有指定任何连接,该命令会监视所有连接配置文件,当所有被监视的连接都消失时,该命令会自动终止
root@donkey ~]# nmcli connection monitor
reload 用法
用于重新加载 NetworkManager 的连接配置文件,即/etc/NetworkManager/system-connections/ 目录下的连接配置文件。
语法
nmcli connection reload
【注意】
- 修改 /etc/NetworkManager/system-connections/ 下的文件需要root权限;
- 重新加载配置文件不会立即应用更改,需要重新激活相应的连接。
- 使用 nmcli connection edit 或 modify 命令修改连接配置后,无需手动 reload,因为这些命令会自动重新加载配置。
load 用法
用于从指定的文件中加载一个或多个网络连接配置。
语法
nmcli connection load <filename> [<filename>...]
- <filename> [<filename>...]:要加载的一个或多个连接配置文件的路径和文件名,可以使用绝对路径或相对路径,如果文件在当前工作目录下,可以直接指定文件名。
import 用法
用于从指定文件导入一个网络连接配置。
语法
nmcli connection import [--temporary] type <type> file <file to import>
- --temporary:可选参数,指定导入的连接为临时连接,临时连接不会保存到磁盘,只在当前会话中有效,重启 NetworkManager 或系统后就会消失。如果不指定该参数,导入的连接会持久化保存。
- type <type>:指定要导入的连接类型,比如ethernet、wifi、vpn等。
- file <file to import>:指定要导入的连接配置文件的路径和文件名。可以使用绝对路径或相对路径。
【注意】
- 导入的配置文件必须是有效的 NetworkManager 连接配置文件,通常以 .nmconnection 为扩展名。
- 如果导入的连接与现有的某个连接同名,会覆盖现有的连接配置。
与 load 命令差异
- import 命令要求指定连接类型,而 load 命令会自动检测类型。
- import 命令支持导入为临时连接,而 load 命令只能导入持久化连接。
export 用法
语法
nmcli connection export [id | uuid | path] <ID> [<output file>]
- [id | uuid | path]:指定了要编辑的现有连接的标识类型。
- <ID>:选择的标识方式对应的具体值。
- [<output file>]:可选参数,指定导出配置的目标文件路径和文件名。如果省略,配置数据会直接打印到标准输出。
示例
[root@localhost ~]# nmcli connection export id enp0s3 /tmp/enp0s3.nmconnection
Error: the connection is not VPN.
【注意】
- 目前只有 VPN 连接支持导出。
- 导出的配置文件使用 .nmconnection 扩展名。