使用nmcli控制台实用程序在Linux中管理网络连接

借助nmcli实用程序从Linux命令行充分利用NetworkManager网络管理工具。nmcli







实用程序直接调用API来访问NetworkManager功能。 它出现在2010年,对于许多人来说,它已成为配置网络接口和连接的替代方法。尽管有人仍在使用ifconfig由于nmcli是设计用于终端窗口和脚本的命令行界面(CLI)工具,因此非常适合非GUI系统管理员。







Ncmli命令语法



通常,语法如下所示:



$ nmcli <options> <section> <action>


  • options是定义nmcli细微之处的参数,
  • 部分-定义要使用的实用程序功能,
  • 操作-允许您指定实际需要执行的操作。


共有8个部分,每个部分与一组命令(动作)相关联:



  • 帮助提供有关ncmcli命令及其用法的信息。
  • 常规返回NetworkManager状态和全局配置。
  • 网络连接包括查询网络连接状态和启用/禁用连接的命令。
  • 无线电包括用于查询WiFi连接状态和启用/禁用连接的命令。
  • 监视器包括用于监视NetworkManager活动和监视网络连接状态变化的命令。
  • 连接包括用于管理网络接口,添加新连接和删除现有连接的命令。
  • 设备主要用于更改与设备相关的参数(例如接口名称)或使用现有连接来连接设备。
  • Secret将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


此命令对连接部分使用show操作



测试机器正在运行Ubuntu 20.04。在这种情况下,我们发现了三个有线连接:enp0s3,enp0s8和enp0s9。



连接管理



重要的是要理解,在nmcli中,术语“连接”是指包含有关连接的所有信息的实体。换句话说,它是网络配置。连接封装了所有与连接有关的信息,包括链路层和IP地址信息。这些是OSI网络模型中的第2层和第3层。



在Linux中设置网络时,通常会设置最终将绑定到网络设备的连接,这些设备又是计算机上安装的网络接口。当设备使用连接时,它被认为是活动的或处于活动状态。如果未使用该连接,则该连接无效或已断开。



添加网络连接



ncmli实用程序使您可以快速添加并立即配置连接。例如,要添加有线连接2(带有enp0s8),您需要以超级用户身份运行以下命令:



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


在类型选项中,我们指示这将是以太网连接,而在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命令启动它:



$ 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地址的方法切换为手动:



$ 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),则是s / 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/ActiveC


如果您需要安装DHCP,请使用auto而不是manual:



$ nmcli connection modify ethernet-enp0s8 ipv4.method auto


使用设备



为此,我们使用“设备”部分。



检查设备状态



$ 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  --  


请求设备信息



为此,请使用“设备”部分中的show操作(您必须指定设备名称)。该实用程序通常在几页上显示很多信息。

让我们看看我们的新连接使用的enp0s8接口。让我们确保它使用与之前设置的IP地址完全相同的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。
  • 连接类型:有线以太网连接。
  • 我们看到了设备的MAC地址。
  • 指定的最大传输单位(MTU) -协议可以在不分段的情况下传输的一个数据包的有用数据单位的最大大小。
  • 设备当前已连接
  • 设备正在使用的连接名称为ethernet-enp0s8。
  • 该设备使用我们之前设置的IP地址:192.168.4.26/24。


其他信息与连接的默认路由和网关设置有关。它们是特定于网络的。



交互式nmcli编辑器



Nmcli还具有一个简单的交互式编辑器,在其中某些人可能会更舒适地工作。要运行它,例如对于ethernet-enp0s8连接,请使用edit操作



$ nmcli connection edit ethernet-enp0s8


他也有一点帮助,但是它的大小比控制台版本小:



===| 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>


如果输入打印命令并按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>


然后编写自动设置方法,然后按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退出Interactive nmcli编辑器。如果您改变主意离开,请使用back命令。



这还不是全部



打开nmcli Interactive Editor,查看有多少个设置以及每个设置有多少个属性。交互式编辑器是一个很棒的工具,但是如果要在单行代码或脚本中使用nmcli,则需要常规的命令行版本。



掌握了基础知识之后,请查看nmcli手册页,以了解它还能如何为您提供帮助。






广告



Epic服务器具有强大的AMD EPYC处理器和非常快速的Intel NVMe驱动器的Windows或Linux虚拟服务器赶快订购!






All Articles