使用 nmcli 从 Linux 命令行管理网络连接

通过 nmcli 直接从 Linux 命令行利用 NetworkManager 工具的强大功能。
134 位读者喜欢这篇文章。
Business woman on laptop sitting in front of window

图片来源:Mapbox Uncharted ERG, CC-BY 3.0 US

nmcli 命令让您可以直接从 Linux 命令行利用 NetworkManager 工具的强大功能。它是 NetworkManager 软件包的组成部分,它使用应用程序编程接口 (API) 来访问 NetworkManager 的功能。

nmcli 于 2010 年发布,取代了其他配置网络接口和连接的模式,例如 ifconfig。因为它是一个命令行界面 (CLI) 工具,旨在用于终端窗口和脚本,所以它非常适合在没有图形用户界面 (GUI) 的系统上工作的系统管理员。

ncmli 语法

nmcli 命令接受选项(用于修改 nmcli 的行为)、(用于告知 nmcli 您想要使用其哪些功能)和操作(用于告知它您想要它执行的操作)

$ nmcli <options> <section> <action>

共有八个节,每个节都与一组特定的网络操作相关

  • 帮助 提供关于 ncmcli 命令和用法的帮助。
  • 通用 检索 NetworkManager 的状态和全局配置。
  • 网络 提供命令来查询网络连接的状态以及启用或禁用连接。
  • 无线电 提供命令来查询 WiFi 网络连接的状态以及启用或禁用连接。
  • 监视器 提供命令来监视 NetworkManager 活动并观察网络连接的状态更改。
  • 连接 提供命令来启动和停止网络接口,添加新连接以及删除现有连接。
  • 设备 主要用于修改与设备相关的参数(例如,接口名称)或使用现有连接来连接设备。
  • 密钥 将 nmcli 注册为 NetworkManager 密钥代理,以侦听密钥消息。这很少需要,因为 nmcli 在连接到网络时会自动执行此操作。

简单示例

作为第一个检查,验证 NetworkManager 是否正在运行并且 nmcli 可以与之通信

$ nmcli general
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

侦察通常是管理系统的第一步。要列出所有内存中和磁盘上的网络连接配置文件

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

此命令使用 connection 节中的 show 操作。

此示例中使用的测试机正在运行 Ubuntu 20.04。它安装了三个网络适配器:enp0s3enp0s8enp0s9

连接管理

了解 nmcli 的命名法非常重要。网络连接是保存有关连接所有信息的东西。您可以将其视为网络配置。连接封装了与连接相关的所有信息,包括数据链路层IP 地址信息。那是 OSI 网络模型 中的第 2 层和第 3 层。

当您在 Linux 上配置网络时,您通常配置最终将绑定到网络设备的连接,这些设备是安装在计算机中的网络接口。当设备使用连接时,该连接被认为是活动启动。活动的反义词是非活动停止

添加网络连接

ncmli 命令允许您快速创建网络连接,并同时指定其配置的元素。要使用有线连接 2、enp0s8 添加新连接,您需要使用 sudo

$ sudo nmcli connection add type ethernet ifname enp0s8
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully added.

type 选项请求 以太网 连接,而 ifname(接口名称)选项指定您希望连接使用的网络接口设备。

检查发生了什么

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  --  

您的新连接 ethernet-enp0s8 已创建。其通用唯一标识符 (UUID) 已分配,连接类型为以太网。使用 up 命令后跟连接名称(或 UUID)使其激活

$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

再次检查您的活动连接

$ nmcli connection show --active
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

您的新连接 ethernet-enp0s8 现在已激活并绑定到 enp0s8 网络接口设备。

调整连接

ncmli 命令可以轻松调整现有连接的参数。也许您想将一个网络接口从动态主机配置协议 (DHCP) 切换到静态 IP 地址。

假设您的新连接需要固定的 IP 地址 192.168.4.26。要实现这一点,您需要发出两个命令。一个用于设置 IP 地址,另一个用于将连接获取 IP 地址的方法设置为 manual

$ nmcli connection modify ethernet-enp0s8 ipv4.address 192.168.4.26/24
$ nmcli connection modify ethernet-enp0s8 ipv4.method manual

请记住指定子网掩码。在此测试网络上,它是 255.255.255.0,或 无类别域间路由 (CIDR) 中的 /24

为了使您的更改生效,您需要重启连接,方法是停止它并重新启动它。第一个命令停止连接,第二个命令重新启动它

$ nmcli connection down ethernet-enp0s8
Connection 'ethernet-enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

如果您想将连接设置为使用 DHCP,请使用 auto 而不是 manual

$ nmcli connection modify ethernet-enp0s8 ipv4.method auto

设备管理

nmcli 命令的 device 节中的命令允许您管理安装在计算机上的网络接口。

检查设备状态

要快速检查所有网络接口的状态

$ nmcli device status
DEVICE  TYPE      STATE      CONNECTION         
enp0s3  ethernet  connected  Wired connection 1
enp0s8  ethernet  connected  ethernet-enp0s8    
enp0s9  ethernet  connected  Wired connection 3
lo      loopback  unmanaged  --   

显示设备详细信息

要检查网络接口的详细信息,请使用 device 节中的 show 操作。如果您不提供设备名称,则会检索并显示所有设备的详细信息。您可以向上和向下滚动和翻页以查看它们。

看看 enp0s8,您的新连接正在使用的设备。验证正在使用的 IP 地址是否是您之前请求的地址

$ nmcli device show enp0s8
GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:81:16:20
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ethernet-enp0s8
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.4.26/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.4.0/24, nh = 0.0.0.0, mt = 103
IP6.ADDRESS[1]:                         fe80::6d70:90de:cb83:4491/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 103
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

响应非常详细。除其他外,它显示

  • 网络接口名称,在本例中是 enp0s8,它是由 udev 分配的。
  • 网络连接类型,在本例中是物理以太网连接。
  • 设备的 媒体访问控制 (MAC) 地址,用于在网络上标识设备。
  • 最大传输单元,它是可以在单个事务中传输的最大协议数据单元的大小。任何大于此值的内容都将拆分为多个数据包。
  • 此设备当前已连接
  • 使用此设备的连接名称ethernet-enp0s8
  • 使用此设备的连接的 IP 地址。如请求的那样,它设置为 192.168.4.26/24

其他信息与应用于此连接的默认路由和网关设置有关,具体取决于它连接到的网络。

nmcli 的交互式编辑器

虽然 nmcli 是一个命令行工具,但它包含一个基本的交互式编辑器。edit 操作将在您指定的连接上打开交互式编辑器

$ nmcli connection edit ethernet-enp0s8

它显示少量帮助文本,然后显示 nmcli 命令提示符

===| nmcli interactive connection editor |===

Editing existing '802-3-ethernet' connection: 'ethernet-enp0s8'

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 并按 Enter 键,nmcli 将列出与连接关联的所有属性。有很多属性。您可以向上和向下滚动浏览列表

===============================================================================
                 Connection profile details (ethernet-enp0s8)
===============================================================================
connection.id:                          ethernet-enp0s8
connection.uuid:                        09d26960-25a0-440f-8b20-c684d7adc2f5
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp0s8
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1593967212
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --

将您的连接改回使用 DHCP。键入 goto ipv4 并按 Enter

nmcli> goto ipv4
You may edit the following properties: method, dns, dns-search, dns-options, dns-priority, addresses, gateway, routes, route-metric, route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, dad-timeout
nmcli ipv4>

您要更改的属性是 method。键入 set method auto 并按 Enter

nmcli ipv4> set method auto
Do you also want to clear 'ipv4.addresses'? [yes]:

如果您希望连接清除静态 IP 地址,请按 Enter 键。要保留它,请键入 no 并按 Enter 键。如果您认为将来可能会再次使用它,则可以保留它。即使具有存储的静态 IP 地址,如果 method 设置为 auto,它也将使用 DHCP。

键入 save 以保存您的更改

nmcli ipv4> save
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully updated.
nmcli ipv4>

键入 quit 以退出 nmcli 交互式编辑器。如果您不想退出,请键入 back 以返回到主级别,并继续使用编辑器。

nmcli 还有更多功能

浏览交互式编辑器,看看有多少设置以及每个设置有多少属性。交互式编辑器是一个简洁的工具,但对于简洁的单行命令或在脚本中使用 nmcli,您需要常规的命令行版本。

现在您已经掌握了基础知识,请查看 nmcli 手册页,了解它可以提供的其他功能。

接下来阅读什么
Dave McKay Headshot
Dave McKay 在工业界首次使用计算机是在穿孔纸带流行的时代,此后他一直在编程。他对计算机的使用早于 PC 的诞生和 Unix 的公开发布。他使用各种语言进行编程,从 6502 汇编到 Lisp,再从 Forth 到 C#。

1 条评论

嗨,
非常感谢
非常有用的文章

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.