NetworkManager服务(nmcli)

一、简介

NetworkManager服务是管理和监控网络设置的守护进程,是2004年RedHat启动的项目,皆在能够让Linux用户更轻松的处理现代网络需求,尤其是无线网络,能够自动发现网卡并配置IP地址。Centos7之前的版本都是通过network.service管理网络配置。到了Centos7就同时支持network.service和NetworkManager.service(简称NM),相当于在Centos7的一个过渡,默认情况下这2个服务都有开启,但是因为NetworkManager.service当时的兼容性不好,大部分人都会将其关闭。在RHEL 8/Centos 8上已废弃network.service(默认不安装),只能通过NetworkManager进行网络配置。

NetworkManager的作用:

NetworkManager主要管理2个对象: Connection(网卡连接配置) 和 Device(网卡设备),他们之间是多对一的关系,但是同一时刻只能有一个Connection对于Device才生效。

在RHEL 8/Centos 8有三种方法配置网络:

  • 通过nmcli connection add命令配置,会自动生成ifcfg文件。
  • 手动配置ifcfg文件,通过nmcli connection reload来加载生效。
  • 手动配置ifcfg文件,通过传统network.service来加载生效。
NetworkManager在系统中的管理工具为nmcli

二、nmcli简单使用

2.1、nmcli命令的选项与参数

语法:

nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
      -a, --ask                ask for missing parameters
      -c, --colors auto|yes|no            whether to use colors in output
      -e, --escape yes|no            escape columns separators in values
      -f, --fields <field,...>|all|common        specify fields to output
      -g, --get-values <field,...>|all|common    shortcut for -m tabular -t -f
      -h, --help                print this help
      -m, --mode tabular|multiline        output mode
      -o, --overview                overview mode
      -p, --pretty                pretty output
      -s, --show-secrets            allow displaying passwords
      -t, --terse                terse output
      -v, --version                show program version
      -w, --wait <seconds>            set timeout waiting for finishing operations

OBJECT
      g[eneral]    NetworkManager's general status and operations
      n[etworking]    overall networking control
      r[adio]        NetworkManager radio switches
      c[onnection]     NetworkManager's connections
      d[evice]    devices managed by NetworkManager
      a[gent]    NetworkManager secret agent or polkit agent
2.1、general 常规选项

命令格式:nmcli general {status|hostname|permissions|logging}
命令描述:使用此命令可以显示网络管理器状态和权限,你可以获取和更改系统主机名,以及网络管理器日志记录级别和域。

2.1.1、显示网络管理器的整体状态(status

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

2.1.2、获取主机名或该更主机名(hostname

# 查询主机名
$ nmcli general hostname
centos8-nat-168-182-152
# 设置主机名
$ nmcli general hostname centos8-nat-168-182-152-test
$ hostname
centos8-nat-168-182-152-test

2.1.3、显示当前用户对网络管理器可允许的操作权限(permissions

$ nmcli general permissions 
PERMISSION                                                        VALUE 
org.freedesktop.NetworkManager.checkpoint-rollback                yes   
org.freedesktop.NetworkManager.enable-disable-connectivity-check  yes   
org.freedesktop.NetworkManager.enable-disable-network             yes   
org.freedesktop.NetworkManager.enable-disable-statistics          yes   
org.freedesktop.NetworkManager.enable-disable-wifi                yes   
org.freedesktop.NetworkManager.enable-disable-wimax               yes   
org.freedesktop.NetworkManager.enable-disable-wwan                yes   
org.freedesktop.NetworkManager.network-control                    yes   
org.freedesktop.NetworkManager.reload                             yes   
org.freedesktop.NetworkManager.settings.modify.global-dns         yes   
org.freedesktop.NetworkManager.settings.modify.hostname           yes   
org.freedesktop.NetworkManager.settings.modify.own                yes   
org.freedesktop.NetworkManager.settings.modify.system             yes   
org.freedesktop.NetworkManager.sleep-wake                         yes   
org.freedesktop.NetworkManager.wifi.scan                          yes   
org.freedesktop.NetworkManager.wifi.share.open                    yes   
org.freedesktop.NetworkManager.wifi.share.protected               yes  

2.1.4、获取和更改网络管理器日志记录级别和域,没有任何参数当前日志记录级别和域显示(loggin

$ nmcli general logging
LEVEL  DOMAINS                                                                                                                                                                                                                       
INFO   PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,TEAM,CONCHECK,DCB,DISPATCH,AUDIT,SYSTEMD,PROXY 
2.2、networking 网络控制

命令格式:nmcli networking {on|off|connectivity}
命令描述:查询网络管理器网络状态,开启和关闭网络

选项:

 - on: 禁用所有接口
 - off: 开启所有接口
 - connectivity:获取网络状态,可选参数checl告诉网络管理器重新检查连接性,否则显示最近已知的状态。而无需重新检查。(可能的状态如下所示)
	- none: 主机为连接到任何网络
 	- portal: 无法到达完整的互联网
 	- limited: 主机已连接到网络,但无法访问互联网
 	- full: 主机连接到网络,并具有完全访问
 	- unknown: 无法找到连接状态

2.2.1、获取网络状态

$ nmcli networking connectivity
full

2.2.2、重启所有网络接口

$ nmcli networking off && nmcli networking on
2.3、radio 无线限传输控制

命令格式:nmcli radio {all|wifi|wwan}
显示无线开关状态,或启用和禁用开关

2.3.1、显示无线状态

$ nmcli radio all
WIFI-HW  WIFI     WWAN-HW  WWAN    
enabled  enabled  enabled  enabled 
$ nmcli radio wifi
enabled
$ nmcli radio wwan
enabled
2.4、monitor 活动监视器

活动监视器(ACTIVITY MONITOR)
观察网络管理器活动。监视连接的变化状态、设备或连接配置文件。

2.5、connection 连接管理

命令格式:nmcli connection {show|up|down|modify|add|edit|clone|delete|monitor|reload|load|import|export}
这是主要使用的一个功能。

2.5.1、列出活动的连接,或进行排序(+-为升降序)

# 查看所有连接状态
$ nmcli connection show
# 等同于nmcli connection show --order +active
$ nmcli connection show --active
# 以活动的连接进行排序
$ nmcli connection show --order +active
# 将所有连接以名称排序
$ nmcli connection show --order +name
# 将所有连接以类型排序(倒序)
$ nmcli connection show --order -type

2.5.2、查看指定连接的详细信息

$ nmcli con show bond-bond0

2.5.3、激活连接,提供连接名称或uuid进行激活,若未提供,则可以使用ifname指定设备名进行激活(up

# 以连接名进行激活
$ nmcli connection up bond-bond0
# 以uuid进行激活
$ nmcli connection up 3a538589-12b9-4a82-adda-fe3da844510c
# 以设备接口名进行激活
$ nmcli connection up ifname bond0

2.5.4、停用连接,提供连接名或uuid进行停用,若未提供,则可以使用ifname指定设备名进行激活(down

# 以连接名进行激活
$ nmcli connection donw bond-bond0
# 以uuid进行激活
$ nmcli connection down 3a538589-12b9-4a82-adda-fe3da844510c
# 以设备接口名进行激活
$ nmcli connection donw ifname bond0

2.5.5、【修改】这些属性可以用nmcli connection show bond-bond0进行获取,然后可以修改、添加或删除属性,若要设置属性,只需指定属性名称后跟值,空值将删除属性值,同一属性添加多个值使用+。同一属性删除指定值用-加索引(modify

添加多个ip(+ipv4.addresses)

# 添加三个ip
$ nmcli connection modify bond-bond0 +ipv4.addresses 192.168.182.102/24
$ nmcli connection modify bond-bond0 +ipv4.addresses 192.168.182.103/24
$ nmcli connection modify bond-bond0 +ipv4.addresses 192.168.182.104/24
# 查看,查不到。
$ nmcli -f IP4 connection show bond-bond0
IP4.ADDRESS[1]:                         192.168.182.152/24
IP4.GATEWAY:                            192.168.182.2
IP4.ROUTE[1]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.182.2, mt = 300
IP4.DNS[1]:                             8.8.8.8
# 启用配置
$ nmcli connection up bond-bond0
# 再次查看,就可以查到刚才添加的三个ip
$ nmcli -f IP4 connection show bond-bond0
IP4.ADDRESS[1]:                         192.168.182.152/24
IP4.ADDRESS[2]:                         192.168.182.102/24
IP4.ADDRESS[3]:                         192.168.182.103/24
IP4.ADDRESS[4]:                         192.168.182.104/24
IP4.GATEWAY:                            192.168.182.2
IP4.ROUTE[1]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[2]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[3]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[4]:                           dst = 192.168.182.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[5]:                           dst = 0.0.0.0/0, nh = 192.168.182.2, mt = 300
IP4.DNS[1]:                             8.8.8.8

删除指定ip(-ipv4.addresses)

# 删除刚刚添加的三个ip
$ nmcli connection modify bond-bond0 -ipv4.addresses 192.168.182.102/24
$ nmcli connection modify bond-bond0 -ipv4.addresses 192.168.182.103/24
$ nmcli connection modify bond-bond0 -ipv4.addresses 192.168.182.104/24
# 启用配置
$ nmcli connection up bond-bond0
# 查看
$ nmcli -f IP4 connection show bond-bond0

2.5.5、【添加】这是创建一个新的连接,需要指定新创建连接的属性,语法与modify相同(add

# 查看当前所有连接,c是connection的缩写
$ nmcli c show
$ nmcli con add con-name eth1 type ethernet  autoconnect yes ifname ens33
$ nmcli c show
# con-name     连接名称
# type              连接类型
# autoconnect 是否自动连接
# ifname          连接到的设备名称

2.5.6、克隆连接,克隆一个存在的连接,除了连接名称和uuid是新生成的,其他都是一样的(clone

$ nmcli connection clone eth1 eth1_1

2.5.7、【删除】删除连接,这将删除一个连接(delete),con 是connection的缩写

$ nmcli con delete eth1_1

2.5.8、从磁盘加载/重新加载一个或多个连接文件,例如你手动创建了一个/etc/sysconfig/network-scripts/ifcfg-ethx连接文件,你可以将其加载到网络管理器,以便管理。

$ echo -e "TYPE=Ethernet\nNAME=ethx" > /etc/sysconfig/network-scripts/ifcfg-ethx
$ nmcli con show
$ nmcli con load /etc/sysconfig/network-scripts/ifcfg-ethx
$ nmcli connection show

2.5.9、监视连接配置文件活动(monitor)

$ nmcli connection monitor bond-bond0
2.6、device 设备管理

命令格式:nmcli device {status|show|set|connect|reapply|modify|disconnect|delete|monitor|wifi|lldp}
显示和管理设备接口。该选项有很多功能,例如连接wifi,创建热点,扫描无线,邻近发现等,下面仅列出常用选项。详细功能可使用nmcli device help查看。

2.6.1、打印设备状态,如果没有将命令指定给nmcli device,则这是默认操作(status
以下两条命令对等

$ nmcli device status
$ nmcli device

2.6.2、显示所有设备接口的详细信息(show

$ nmcli device show ens33

2.6.3、设置设备属性(set

$ nmcli device set ifname ens33 autoconnect yes

2.6.4、连接设备(connection)。提供一个设备接口,网络管理器将尝试找到一个合适的连接, 将被激活。它还将考虑未设置为自动连接的连接。(默认超时为90s)

$ nmcli dev connect ens33

2.6.5、修改设备上处于活动的设备(modify),但该修改只是临时的,并不会写入文件。(语法与 nmcli connection modify 相同)

$ nmcli device modify ens33 +ipv4.addresses 192.168.100.103/24

2.6.6、断开当前连接的设备(disconnect),防止自动连接。但注意,断开意味着设备停止!但可用 connect 进行连接

$ nmcli device disconnect ens33

2.6.7、删除设备(delete),该命令从系统中删除接口。请注意, 这仅适用于诸如bonds, bridges, teams等软件设备。命令无法删除硬件设备 (如以太网)。超时时间为10秒

$ nmcli device delete bond0

2.6.8、 监视设备活动(monitor)。每当指定的设备更改状态时, 此命令都会打印一行

$ nmcli device monitor bond0
2.7、nmcli 返回状态码

mcli 如果成功退出状态值为0,如果发生错误则返回大于0的值。

0: 成功-指示操作已成功

1: 位置或指定的错误

2: 无效的用户输入,错误的nmcli调用

3: 超时了(请参阅 --wait 选项)

4: 连接激活失败

5: 连接停用失败

6: 断开设备失败

7: 连接删除失败

8: 网络管理器没有运行

10: 连接、设备或接入点不存在

65: 当使用 --complete-args 选项,文件名应遵循。

三、network和NetworkManager之间的区别

network:对网卡的配置
NetworkManager:这个服务由几个部分组成;一个是管理系统网络连接;一个是允许用户管理网络连接的客户端程序,使用它可以更好的管理网络

四、network和NetworkManager两个服务之间冲突解

在CentOS系统上,目前有NetworkManager和network两种网络管理工具。如果两种都配置会引起冲突,而且NetworkManager在网络断开的时候,会清理路由,如果一些自定义的路由,没有加入到NetworkManager的配置文件中,路由就被清理掉,网络连接后需要自定义添加上去。

1)将NetworkManager 服务设置开机不启动

$ chkconfig NetworkManager off

2)将NetwokManager服务关闭

$ systemctl stop NetworkManager

3)重新启动一下network服务

$ systemctl restart network

4)重新加载配置

# 重新加载所有网卡配置
nmcli c reload
# 指定加载
nmcli c reload /etc/sysconfig/network-scripts/ifcfg-ens33
# 重新加载所有网卡配置(可靠,推荐)
nmcli networking off && nmcli networking on
ifdown ens33 && ifup ens33
nmcli con down ens33 && nmcli con up ens33
posted @ 2022-06-22 22:50  大数据老司机  阅读(1592)  评论(0编辑  收藏  举报