linux-command-06 nmcli

linux-command-06 nmcli

概念解析

Nmcli

  NetworkManager command line tool 基于会话的网络管理。在CentOS7中默认使用NetworkManager守护进程来监控和管理网络设置。

  nmcli是命令行的NetworkManager工具,会自动把配置写到/etc/sysconfig/network-scripts/目录下面。NetworkManager最初由 Redhat 公司开发,现在由 GNOME 管理。

  CentOS7之前的网络管理是通过ifcfg文件配置管理接口(device),而现在是通过NetworkManager服务管理连接(connection)。一个接口(device)可以有多个连接(connection),但是同时只允许一个连接(connection)处于激活(active)状态。

  简单理解就是,一个连接就是(connection)就是/etc/sysconfig/network-scripts/目录下的一个配置文件,接口(device)是物理设备,一个物理设置可以拥有多个配置文件,但只能有一个配置文件属于使用(active)状态;配置文件的生成与使用状态均由NetworkManager控制。

  当然,依旧支持ifcfg文件配置管理网络,但不推荐

区分:

  • 设备 – 正在使用的网络接口
  • 连接 – 一组配置设置,对于一个单一的设备可以有多个连接,可以在连接之间切换。

实例解析

1.显示所有网络连接

1
2
3
4
[root@node4 ~]# nmcli connection show 
NAME UUID TYPE DEVICE
ens33 cf2ef9f2-6e2f-4d89-9b73-b0d9bcf57990 ethernet ens33
[root@node4 ~]#

可以看到只有一个连接,就是物理网卡ens33所用连接

2.显示活动网络连接(active状态)

1
2
3
4
[root@node4 ~]# nmcli connection show -active
NAME UUID TYPE DEVICE
ens33 cf2ef9f2-6e2f-4d89-9b73-b0d9bcf57990 ethernet ens33
[root@node4 ~]#

3.显示某连接的详情(按空格翻页,按ctrl+z退出)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@node4 ~]# nmcli connection show ens33
connection.id: ens33
connection.uuid: cf2ef9f2-6e2f-4d89-9b73-b0d9bcf57990
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: ens33
connection.autoconnect: 是
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.auth-retries: -1
connection.timestamp: 1555898135
connection.read-only: 否
connection.permissions: --
connection.zone: public
connection.master: --
connection.slave-type: --
connection.autoconnect-slaves: -1 (default)
connection.secondaries: --
connection.gateway-ping-timeout: 0
connection.metered: 未知
connection.lldp: default
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: --
802-3-ethernet.auto-negotiate: 否
802-3-ethernet.mac-address: --
802-3-ethernet.cloned-mac-address: --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist: --

[2]+ 已停止 nmcli connection show ens33
[root@node4 ~]#

4.查看网络设备状态

1
2
3
4
5
[root@node4 ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet 连接的 ens33
lo loopback 未托管 --
[root@node4 ~]#

5.创建新的连接,名称不能随便起,这里叫“dhcp”,表示用的是dhcp协议。

1
2
3
4
5
6
7
[root@node4 ~]# nmcli connection add con-name "dhcp" type ethernet ifname ens33
连接“abc”(18a4d225-0d61-455a-9837-19d86df4e632) 已成功添加。
[root@node4 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 cf2ef9f2-6e2f-4d89-9b73-b0d9bcf57990 ethernet ens33
dhcp 18a4d225-0d61-455a-9837-19d86df4e632 ethernet --
[root@node4 ~]#

以上参数解析

1
2
3
4
5
6
7
connection add – 添加新的连接
con-name – 连接名,同时也是该连接使用的协议名
type – 设备类型
ifname – 接口名

上面这个命令会使用dhcp协议添加连接,也就是其ip地址由dhcp分配得到。
可以看到dhcp那一行的 DEVICE字段是 -- ,这表示这个连接没有占用设备ens33,也就是该连接未被激活。只有一个连接能处于激活状态,ens33网卡设备现在被ens33连接占用着呢。

查看该连接的配置文件,可以看到BOOTPROTO=dhcp,表示协议类型dhcp。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-dhcp 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=dhcp
UUID=0fa3aa5d-d694-42cf-bc50-426a7cbf3e74
DEVICE=ens33
ONBOOT=yes
[root@node4 ~]#

6.删除名称为“dhcp”的连接

1
2
3
[root@node4 ~]# nmcli con delete dhcp
成功删除连接 'dhcp'(e157a832-7e5d-4292-829e-3e46d8d0c7a0)。
[root@node4 ~]#

7.创建新的连接,名称叫“static”,即协议类型为none,对应的是静态ip地址。

1
2
3
4
5
6
7
[root@node4 ~]# nmcli connection add con-name "static" ifname ens33 autoconnect no type ethernet ip4 192.168.141.133 gw4 192.168.141.1
连接“static”(431b7aae-961e-4ede-a996-188cbabbc936) 已成功添加。
[root@node4 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 cf2ef9f2-6e2f-4d89-9b73-b0d9bcf57990 ethernet ens33
static 431b7aae-961e-4ede-a996-188cbabbc936 ethernet --
[root@node4 ~]#

8.激活ens33网卡的“static”连接,随着本次激活成功,xshell连接也会断开,因为ip地址变成了我们刚刚新建的“static”连接的IP地址了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@node4 ~]# nmcli connection up static 

Socket error Event: 32 Error: 10053.
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(node4) at 10:47:36.

Type `help' to learn how to use Xshell prompt.
[C:\~]$
[C:\~]$ ssh root@192.168.141.133 #现在对新的ip进行连接


Connecting to 192.168.141.133:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Mon Apr 22 07:51:07 2019 from 192.168.141.1
[root@node4 ~]#
[root@node4 ~]# nmcli connection show
NAME UUID TYPE DEVICE
static 431b7aae-961e-4ede-a996-188cbabbc936 ethernet ens33
ens33 cf2ef9f2-6e2f-4d89-9b73-b0d9bcf57990 ethernet --
[root@node4 ~]#

可以看到,现在占用ens33网卡设备的连接以及从原来的“ens33”连接变成了现在的“static”连接了。

  现在ens33网卡有两个连接,那么在/etc/sysconfig/network-scripts/目录下会有这两个连接对应的配置文件。仔细看看ifcfg-static 里面BOOTPROTO=none这一行,说明我们现在采用静态ip的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="cf2ef9f2-6e2f-4d89-9b73-b0d9bcf57990"
DEVICE="ens33"
ONBOOT="yes"
ZONE=
[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-static
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.141.133
PREFIX=32
GATEWAY=192.168.141.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=static
UUID=431b7aae-961e-4ede-a996-188cbabbc936
DEVICE=ens33
ONBOOT=no
[root@node4 ~]#

看着上面ifcfg-static配置文件还缺少dns,于是我们在这里可以给他加上去。先加一个,然后追加一个。

1
2
[root@node4 ~]# nmcli connection modify "static" ipv4.dns 114.114.114.114
[root@node4 ~]# nmcli connection modify "static" +ipv4.dns 8.8.8.8

再次查看ifcfg-static配置文件,可以看到新加的俩dns都在里面了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-static 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.141.133
PREFIX=32
GATEWAY=192.168.141.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=static
UUID=431b7aae-961e-4ede-a996-188cbabbc936
DEVICE=ens33
ONBOOT=no
DNS1=114.114.114.114
DNS2=8.8.8.8
[root@node4 ~]#

现在尝试给static连接追加一个ip地址

  这里注意一下细节,原来只有IPADDR,现在追加了一个就多了一个IPADDR1,再追加则是IPADDR2 。要注意的是,此处没有IPADDR0这一说。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@node4 ~]# nmcli connection modify "static" +ipv4.addresses 192.168.141.134/24
[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-static
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.141.133
PREFIX=32
GATEWAY=192.168.141.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=static
UUID=431b7aae-961e-4ede-a996-188cbabbc936
DEVICE=ens33
ONBOOT=no
DNS1=114.114.114.114
DNS2=8.8.8.8
IPADDR1=192.168.141.134
PREFIX1=24
[root@node4 ~]#

#再次刷新(激活)一下static连接就可以用ip add看到这个新的ip了

[root@node4 ~]# nmcli connection up static
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
[root@node4 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:98:66:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.141.133/32 brd 192.168.141.133 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.141.134/24 brd 192.168.141.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::1285:ca89:dfc2:a732/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@node4 ~]#

命令行和配置文件的对应关系

命令行 配置文件
con-name *** ifcfg-***
ipv4.method manual BOOTPROTO=none
ipv4.method auto BOOTPROTO=dhcp
ipv4.addresses 192.0.2.1/24 IPADDR=192.0.2.1&PREFIX0=24
ipv4.gateway 192.0.2.254 GATEWAY=192.0.2.254
ipv4.dns 8.8.8.8 DNS0=8.8.8.8
ipv4.dns-search example.com DOMAIN=example.com
ipv4.ignore-auto-dns true PEERDNS=no
connection.autoconnect yes ONBOOT=yes
connection.id eth0 NAME=eth0
connection.interface-name eth0 DEVICE=eth0
connection.interface-name eth0 DEVICE=eth0
802-3-ethernet.mac-address . . . HWADDR= . . .

1.举例分析auto和manual区别

例如,我们把“static”连接改为使用dhcp协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@node4 ~]# nmcli connection modify "static" ipv4.method auto
[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-static
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
IPADDR=192.168.141.133
PREFIX=32
GATEWAY=192.168.141.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=static
UUID=431b7aae-961e-4ede-a996-188cbabbc936
DEVICE=ens33
ONBOOT=no
DNS1=114.114.114.114
DNS2=8.8.8.8
IPADDR1=192.168.141.134
PREFIX1=24
[root@node4 ~]#

可以看到BOOTPROTO=dhcp这一行。

现在把“static”连接改回使用none协议(静态ip)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@node4 ~]# nmcli connection modify "static" ipv4.method manual
[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-static
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.141.133
PREFIX=32
GATEWAY=192.168.141.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=static
UUID=431b7aae-961e-4ede-a996-188cbabbc936
DEVICE=ens33
ONBOOT=no
DNS1=114.114.114.114
DNS2=8.8.8.8
IPADDR1=192.168.141.134
PREFIX1=24
[root@node4 ~]#

可以看到BOOTPROTO=none这一行。

2.按照上面的表格添加一个连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@node4 ~]# nmcli connection add con-name "System eth0" ipv4.addresses 192.168.141.139 ipv4.gateway 192.168.141.254 ipv4.method manual ipv4.dns 114.114.114.114 type ethernet ifname ens33 
连接“System eth0”(c5ea01ea-6454-416f-8b85-a02b6806d82d) 已成功添加。
[root@node4 ~]#


[root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-System_eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.141.139
PREFIX=32
GATEWAY=192.168.141.254
DNS1=114.114.114.114
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="System eth0"
UUID=c5ea01ea-6454-416f-8b85-a02b6806d82d
DEVICE=ens33
ONBOOT=yes
[root@node4 ~]#

上面的命令中,没有给ip指定掩码,默认的就是32位掩码。

欢迎打赏,谢谢
------ 本文结束------
0%