一、概述
经常会遇到在不同的Linux系统中配置网络的时候,修改的配置文件和语法都不一样。这种情况非常不利于运维人员日常对操作系统的维护和管理。为了解决这个问题,NetworkManager工具就应用而生了。通过使用NetworkManager工具,可以实现不同的Linux操作系统中对网络的管理和配置统一。
NetworkManager工具的功能非常好用,甚至在配置时出现语法错误,也不会影响当前网络,因为工具会暂停修改该网络。如果原来的网络配置文件被误删除了,也可以通过NetworkManager工具创建一个和原先参数一样的网络接口,该配置文件就会自动的重新生成。使用NetworkManager工具配置的所有网络配置文件会存放于/etc/NetworkManager/system-connections/目录下。
network-manager接管网络后使用nmcli命令修改网卡的相关配置后都会永久生效(重启网卡后依旧生效)。
二、NetworkManager的命令行工具
nmcli是NetworkManager的一个命令行工具,它提供了使用命令行配置由NetworkManager管理网络连接的方法(nm 代表 NetworkManager,cli 代表 Command-Line)。
2.1 nmcli的常用参数介绍
[root@openeuler2203-01 network-scripts]# nmcli help
Usage: 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
m[onitor] monitor NetworkManager changes
2.2 nmcli genneral
用于显示NetworkManager的一般状态和操作。
常用的命令如下:
显示系统的网络状态
nmcli general status
[root@openeuler2203-01 network-scripts]# nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
[root@openeuler2203-01 network-scripts]# nmcli g s
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
[root@openeuler2203-01 network-scripts]# nmcli gen s
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
还可以显示和修改主机名,命令如下
nmcli general hostname
nmcli genneral hostname newhostname
# 显示主机名
[root@openeuler2203-01 network-scripts]# nmcli general hostname
openeuler2203-01
[root@openeuler2203-01 network-scripts]# nmcli g h
openeuler2203-01
# 修改主机名
[root@openeuler2203-01 network-scripts]# nmcli general hostname openeuler2203
[root@openeuler2203-01 network-scripts]# nmcli general hostname
openeuler2203
[root@openeuler2203-01 network-scripts]#
注意:
修改主机名之后,需要重启NetworkManager来使修改生效。这句话是别人说的,其实不用。只要退出终端连接工具之后,重新登陆之后就能看到主机名成已经修改了。
2.3 nmcli networking
[root@openeuler2203 ~]# nmcli networking help
Usage: nmcli networking { COMMAND | help }
COMMAND := { [ on | off | connectivity ] }
on
off
connectivity [check]
显示NetworkManager是否接管了网络,使用如下命令。如果要使用nmcli来配置和管理网络,必须是NetworkManager接管网络之后才能操作的事情。
# 使用如下命令可以检查NM是否接管了网络
[root@openeuler2203 ~]# nmcli networking
enabled
# 可以看到回显的信息是enabled,说明NM已经接管网络。
# 可以使用以下命令开启或者关闭NM对网络的接管状态
nmcli networking on
nmcli networking off
或者
nmcli n on
nmcli n off
可以通过nmcli networking查看操作系统网络的连接状态
[root@openeuler2203 ~]# nmcli networking connectivity
full
# 网络的状态有五种,下面简单介绍一下
full: 联网
limited: 联网,但是无法上网
portal: 联网,但是需要登陆认证
none: 没网
unknown: 未知
2.4 nmcli connection
命令的语法如下
[root@openeuler2203 ~]# nmcli connection help
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>]
第一个常用的操作,是显示所有的网络连接
[root@openeuler2203 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33
docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0
virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0
说明:
命令的简写nmcli c s或者nmcli c因为show是nmcli connection的默认选项,因此可以省略。
如果只想查看已经启动的或者已经激活的连接,可以使用下面的命令来实现
[root@openeuler2203 ~]# nmcli connection show --active
NAME UUID TYPE DEVICE
ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33
docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0
virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0
# 命令简写
[root@openeuler2203 ~]# nmcli c s -a
NAME UUID TYPE DEVICE
ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33
docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0
virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0
# 启动或者关闭连接的命令如下
nmcli connection up/dwon 设备名
nmcli c up/down 设备名
设备名就是查询结果中DEVICE对应的列。
一般情况下,给一台主机刚安装好操作系统之后,接口设备的连接状态都是正常的,我们经常需要做的操作都是和修改有关的,这里只是简单的介绍一下如何新增一个连接,下面主要说一下如何修改连接。
新增一个连接的命令参考如下:
nmcli c add type 连接类型 选项 选项值
nmcli c a type 连接类型 选项 选项值
[root@openeuler2203-01 ~]# nmcli connection add type ethernet con-name ens199 ifname ens199
Connection 'ens199' (5e08e8ec-e073-4fe7-aa1b-1801f945bdf0) successfully added.
[root@openeuler2203-01 ~]# nmcli c show
NAME UUID TYPE DEVICE
ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33
docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0
virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0
ens199 5e08e8ec-e073-4fe7-aa1b-1801f945bdf0 ethernet --
可以看到命令执行成功,查看连接信息也可以发现多了一个ens199的信息
当然这个新增的连接的当前是没有启动的状态,设备那一列显示的是--
启动设备的名就是nmcli c up 接口的名称
如果要删除一个连接,可以使用如下的命令
nmcli c delete ens199
或者
nmcli c de ens199
注意这里简写的时候,delete不能简写成d,因为会和down冲突。
另外,在创建连接的时候,也可以同时配置好IP地址,网关,网卡的开启自启动的网络配置。
需要特别注意的几个参数还有:
connection.id(别名 con-name):连接名
connection.interface-name(别名 ifname):设备名
connection.autoconnect(别名 autoconnect):是否开机自启,其值只能是 yes 或 no,默认 yes
平常工作中经常用到的是网络连接的配置修改操作
nmcli c modify 设备名 [+ | -]选项 选项值
nmcli c m 设备名 [+ | -]选项 选项值
下面演示一下一些常用的修改示例
nmcli c m ens33 ipv4.address 192.18.43.100/24 # 修改IP地址和子网掩码
nmcli c m ens33 +ipv4.address 192.18.43.200/24 # 添加IP地址
nmcli c m ens33 ipv4.method manual # 修改为静态配置,默认是auto
nmcli c m ens33 ipv4.gateway 192.18.43.1 # 修改默认网关
nmcli c m ens33 ipv4.dns 8.8.8.8 # 修改dns
nmcli c m ens33 connection.autoconnect yes # 开启启动
注意:
修改method之前,需要先修改address
使用空引号""代替选项只,可以将选项设为默认值
有的时候,也有人习惯是去修改网卡配置文件,这就需要考虑修改后如何生效的问题。
我们可以重载一下网卡配置文件来使修改生效,操作命令如下:
nmcli c reload # 或
nmcli c r
nmcli c load ifcfg-ens33 # 或
nmcli c l ifcfg-ens33
## 指定文件
nmcli connection load /etc/sysconfig/network-scripts/ifcfg-ens199
2.5 nmcli device
[root@openeuler2203 ~]# nmcli device help
Usage: nmcli device { COMMAND | help }
COMMAND := { status | show | set | connect | reapply | modify | disconnect | delete | monitor | wifi | lldp }
status
show [<ifname>]
set [ifname] <ifname> [autoconnect yes|no] [managed yes|no]
connect <ifname>
reapply <ifname>
modify <ifname> ([+|-]<setting>.<property> <value>)+
disconnect <ifname> ...
delete <ifname> ...
monitor <ifname> ...
wifi [list [ifname <ifname>] [bssid <BSSID>] [--rescan yes|no|auto]]
wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] [ifname <ifname>]
[bssid <BSSID>] [name <name>] [private yes|no] [hidden yes|no]
wifi hotspot [ifname <ifname>] [con-name <name>] [ssid <SSID>] [band a|bg] [channel <channel>] [password <password>]
wifi rescan [ifname <ifname>] [[ssid <SSID to scan>] ...]
wifi show-password [ifname <ifname>]
lldp [list [ifname <ifname>]]
显示所有网络接口的设备状态
nmcli device status
显示所有设备的详细信息,需要指定设备名
nmcli device show ens33
连接设备或者断开设备的命令如下
nmcli device connect ens33
nmcli device disconnect ens33
更新设备
nmcli device reapply ens33