使用nmcli管理Linux网络地址

admin 2021年11月07日 1,282次浏览

网文地址:http://www.yanjun.pro/?p=48

因为Linux的开源特性,不同的发行版使用的网络配置方式都不一样,所以我们接触不同的系统,就需要记不同的配置方式,有没有一种统一的配置方式呢,那我们就可以使用 network-manager 服务来统一配置方式,这里我们使用 network-manager 的命令行方式 (nmcli) 来管理。

1、概述

nmcli 是 Linux 中(centOS 从7开始支持)用于控制网络管理器的命令行工具,用于创建、显示、编辑、删除、激活和停用网络连接,以及控制和显示网络设备状态。

首先检查系统是否有 network-manager 服务,如果执行 nmcli 成功,说明系统中支持 network-manager,如果系统中没有该服务,需要先安装才能使用。

  • 安装 network-manager 服务

    • Redhat/centOS:sudo yum install network-manager -y
    • Debian/Ubuntu:sudo apt install network-manager -y
  • 启动network-manager服务

    [root@localhost ~]# systemctl enable --now NetworkManager
    
  • 关闭networking管理

    将需要使用 network-manager 管理的接口注释掉

    [root@localhost ~]# vim /etc/network/interfaces
    source /etc/network/interfaces.d/*
    
    # The loopback network interface
    # auto lo
    # iface lo inet loopback
    
    # The primary network interface
    # auto ens1
    # iface ens1 inet dhcp
    
  • 禁用networking服务

    [root@localhost ~]# systemctl stop networking
    [root@localhost ~]# systemctl disable networking
    Synchronizing state of networking.service with SysV service script with /lib/systemd/systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install disable networking
    Removed "/etc/systemd/system/network-online.target.wants/networking.service".
    Removed "/etc/systemd/system/multi-user.target.wants/networking.service".
    
  • 使用network-manager管控网络

    [root@localhost ~]# vim /etc/NetworkManager/NetworkManager.conf
    [main]
    plugins=ifupdown,keyfile
    
    [ifupdown]
    # 将该参数由false修改为true
    managed=true
    
  • 重启network-manager服务

    [root@localhost ~]# systemctl restart NetworkManager
    

2、命令详解

nmcli 语法格式

```
nmcli [OPTIONS...] {help | general | networking | radio | connection | device | agent | monitor} [COMMAND] [ARGUMENTS...]
```

2.1、通用命令(general)

使用此命令显示网络管理器状态和权限。你还可以获取和更改系统主机名,以及网络管理器日志记录级别和域。

2.1.1、语法

nmcli general {status | hostname | permissions | logging} [ARGUMENTS...]

2.1.2、常用参数

  • status: 显示网络管理器的总体状态。当没有为 nmcli general 提供其他命令时,这是默认操作。
  • **hostname [hostname]:**获取并更改系统主机名。如果没有参数,这将打印当前配置的主机名。当传递主机名时,它将被移交给网络管理器,以设置为新的系统主机名。
  • permissions: 显示当前用户对网络管理器可允许的操作权限,如启用和禁用网络、更改Wi-Fi和WWAN状态、修改连接等。
  • logging [level level] [domains domains…] 不带参数时,用于获取网络管理器日志记录级别和域;带参数时,用于修改日志级别和域值。有关可用的级别和域值,请参见NetworkManager.conf(5)。

2.1.3、示例

# 显示网络状态
[root@localhost ~]# nmcli general status
STATE   CONNECTIVITY  WIFI-HW  WIFI    WWAN-HW  WWAN   
已连接   完全           已启用    已启用   已启用    已启用

# 显示主机名
[root@localhost ~]# nmcli general hostname
localhost.localdomain

# 修改主机名
[root@localhost ~]# nmcli general hostname vm_centos7
[root@localhost ~]# nmcli general hostname
vm_centos7

# 显示当前用户对网络管理器可允许的操作权限
[root@vm_centos7 ~]# nmcli general permissions 
PERMISSION                                                        VALUE 
org.freedesktop.NetworkManager.enable-disable-network             是    
org.freedesktop.NetworkManager.enable-disable-wifi                是    
org.freedesktop.NetworkManager.enable-disable-wwan                是    
org.freedesktop.NetworkManager.enable-disable-wimax               是    
。。。

# 显示当前日志级别
[root@vm_centos7 ~]# nmcli general logging
LEVEL  DOMAINS 
INFO   IP4

2.2、网络控制命令(networking)

用于查询网络管理器网络状态、启用、禁用网络

2.2.1、语法

nmcli networking {on | off | connectivity} [ARGUMENTS...]

2.2.2、常用参数

  • on | off: 启用|禁用 网络连接
  • connectivity [check]: 获取网络连接状态
    • none:主机没有连接到任何网络
    • portal:无法到达完整的互联网
    • limited:主机已连接到网络,但访问受限
    • full:主机连接到网络,并具有完全访问
    • unknown:无法找到连接状态

2.2.3、示例

# 启用、禁用网络
[root@vm_centos7 ~]# nmcli networking on
[root@vm_centos7 ~]# nmcli networking off

# 网络链接状态查看
[root@vm_centos7 ~]# nmcli networking connectivity
full

2.3、无线控制命令

显示无线访问启用或禁用

2.3.1、语法

nmcli radio {all | wifi | wwan} [ARGUMENTS...]
2.3.2、常用参数
  • wifi [on | off]: 显示或设置WiFi的状态。如果未提供参数,则显示WiFi状态;
    • on:启用WiFi
    • off:禁用WiFi
  • wwan [on | off]: 显示或设置wwan的状态。如果未提供参数,则显示wwan状态;
    • on:启用wwan
    • off:禁用wwan
  • all [on | off]: 同时显示或设置前面提到的所有无线电开关

2.4、连接管理命令(重点

nmcli connection {show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export} [ARGUMENTS...]

2.4.1、show

显示指定连接的详细信息。默认情况下,会显示静态配置和活动连接数据。当指定 --active 选项时,只显示活动的配置文件。

1、语法
show [--active] [id | uuid | path | apath] ID...
2、示例
[root@vm_centos7 ~]# nmcli connection show 
NAME   UUID                                  TYPE      DEVICE 
ens33  899db7b8-a677-4aec-a63e-981257c89cf2  ethernet  ens33 

2.4.2、up

激活连接。该连接由其名称UUID或数据总线路径标识。如果标识不明确,可以使用关键字标识、uuid或路径。当要求特定设备激活连接时,应给出带有接口名称的ifname选项。如果没有给定标识,则需要一个ifname,并且网络管理器将为给定的ifname激活最佳可用连接。在VPN连接的情况下,ifname选项指定基本连接的设备。ap选项指定在无线连接情况下应该使用什么特定的接入点。

1、语法
up [id | uuid | path] ID [ifname ifname] [ap BSSID] [passwd-file file]
2、常用参数
  • ifname [ifname]:需要激活的接口
  • ap [BSSID]:需要连接到的ap点
  • passwd-file [file]:某些网络在激活过程中可能需要凭据,使用此选项提供这些凭据
3、示例
# 以连接名进行激活
[root@vm_centos7 ~]# nmcli connection up ens33 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)

# 以uuid进行激活
[root@vm_centos7 ~]# nmcli connection up 899db7b8-a677-4aec-a63e-981257c89cf2
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)

# 以文件名激活
[root@vm_centos7 ~]# nmcli connection up filename /etc/sysconfig/network-scripts/ifcfg-ens33

2.4.3、down

停用设备的连接,允许再次激活

1、语法
down [id | uuid | path | apath] ID...
2、常用参数

参考: up 相关参数

2.4.4、modify

在连接配置文件中添加、修改或删除属性。这些属性可以用 nmcli connection show [接口名称 ] 进行获取,然后可以修改、添加或删除属性;若要设置属性,只需指定属性名称后跟值,空值将删除属性值,同一属性添加多个值使用 +,同一属性删除指定值用 - 加上需要删除的IP的索引值(第一个IP的索引为 “0”,往后依此类推 ),有关设置和属性的名称、描述、默认值的完整参考,请参见 nm-settings(5)

1、语法
modify [--temporary] [id | uuid | path]
2、示例
# 添加多个IP
## 查看当前IP
[root@vm_centos7 ~]# nmcli connection show ens33 | grep IP4.ADDRESS
IP4.ADDRESS[1]:                         192.168.137.10/24
## 添加两个IP
[root@vm_centos7 ~]# nmcli connection modify ens33 +ipv4.addresses 192.168.137.20/24
[root@vm_centos7 ~]# nmcli connection modify ens33 +ipv4.addresses 192.168.137.30/24
[root@vm_centos7 ~]# nmcli connection up ens33 
## 查看添加后的IP
[root@vm_centos7 ~]# nmcli connection show ens33 | grep IP4.ADDRESS
IP4.ADDRESS[1]:                         192.168.137.10/24
IP4.ADDRESS[2]:                         192.168.137.20/24
IP4.ADDRESS[3]:                         192.168.137.30/24

# 删除某个IP地址
[root@vm_centos7 ~]# nmcli c modify ens33 -ipv4.addresses 1
[root@vm_centos7 ~]# nmcli connection up ens33 
[root@vm_centos7 ~]# nmcli connection show ens33 | grep IP4.ADDRESS
IP4.ADDRESS[1]:                         192.168.137.10/24
IP4.ADDRESS[2]:                         192.168.137.30/24

2.4.5、add

使用指定的属性创建新连接,详细信息可以使用 nmcli connection add help 查看

1、语法
add [save {yes | no}] {option value | [+|-]setting.property value}...
2、示例
# 创建一个新的连接
[root@vm_centos7 ~]# nmcli connection add con-name ens44 type ethernet autoconnect yes ifname ens44
连接 "ens44" (1b0d88da-3b43-4a20-9c76-d0b325e4a15f) 已成功添加。

2.4.6、edit(常用)

使用交互式编辑器编辑现有连接或添加新连接,交互式编辑器将引导完成连接编辑,并允许通过简单的菜单驱动界面根据需要更改连接参数,编辑器指示可以修改哪些设置和属性,并提供在线帮助

1、语法
edit {[id | uuid | path] ID | [type type] [con-name name] }
2、示例
# 修改ens33的IP地址
## 查看现有IP
[root@vm_centos7 ~]# nmcli connection show ens33 | grep IP4.ADDADDRESS
IP4.ADDRESS[1]:                         192.168.137.10/24
## 修改IP
[root@vm_centos7 ~]# nmcli connection edit ens33 
nmcli> set ipv4.addresses 
输入 "addresses" 值:192.168.137.20/24
nmcli> save
nmcli> activate ens33 
## 再次查看IP(如果不需要两个IP,将其中一个删除即可)
[root@vm_centos7 ~]# nmcli connection show ens33 | grep IP4.ADDADDRESS
IP4.ADDRESS[1]:                         192.168.137.10/24
IP4.ADDRESS[2]:                         192.168.137.20/24