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 | [root@node4 ~]# nmcli connection show |
可以看到只有一个连接,就是物理网卡ens33所用连接
2.显示活动网络连接(active状态)
1 | [root@node4 ~]# nmcli connection show -active |
3.显示某连接的详情(按空格翻页,按ctrl+z退出)
1 | [root@node4 ~]# nmcli connection show ens33 |
4.查看网络设备状态
1 | [root@node4 ~]# nmcli device status |
5.创建新的连接,名称不能随便起,这里叫“dhcp”,表示用的是dhcp协议。
1 | [root@node4 ~]# nmcli connection add con-name "dhcp" type ethernet ifname ens33 |
以上参数解析
1 | connection add – 添加新的连接 |
查看该连接的配置文件,可以看到BOOTPROTO=dhcp,表示协议类型dhcp。
1 | [root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-dhcp |
6.删除名称为“dhcp”的连接
1 | [root@node4 ~]# nmcli con delete dhcp |
7.创建新的连接,名称叫“static”,即协议类型为none,对应的是静态ip地址。
1 | [root@node4 ~]# nmcli connection add con-name "static" ifname ens33 autoconnect no type ethernet ip4 192.168.141.133 gw4 192.168.141.1 |
8.激活ens33网卡的“static”连接,随着本次激活成功,xshell连接也会断开,因为ip地址变成了我们刚刚新建的“static”连接的IP地址了。
1 | [root@node4 ~]# nmcli connection up static |
现在ens33网卡有两个连接,那么在/etc/sysconfig/network-scripts/目录下会有这两个连接对应的配置文件。仔细看看ifcfg-static 里面BOOTPROTO=none这一行,说明我们现在采用静态ip的。
1 | [root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 |
看着上面ifcfg-static配置文件还缺少dns,于是我们在这里可以给他加上去。先加一个,然后追加一个。
1 | [root@node4 ~]# nmcli connection modify "static" ipv4.dns 114.114.114.114 |
再次查看ifcfg-static配置文件,可以看到新加的俩dns都在里面了。
1 | [root@node4 ~]# cat /etc/sysconfig/network-scripts/ifcfg-static |
现在尝试给static连接追加一个ip地址
这里注意一下细节,原来只有IPADDR,现在追加了一个就多了一个IPADDR1,再追加则是IPADDR2 。要注意的是,此处没有IPADDR0这一说。
1 | [root@node4 ~]# nmcli connection modify "static" +ipv4.addresses 192.168.141.134/24 |
命令行和配置文件的对应关系
命令行 | 配置文件 |
---|---|
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 | [root@node4 ~]# nmcli connection modify "static" ipv4.method auto |
可以看到BOOTPROTO=dhcp这一行。
现在把“static”连接改回使用none协议(静态ip)
1 | [root@node4 ~]# nmcli connection modify "static" ipv4.method manual |
可以看到BOOTPROTO=none这一行。
2.按照上面的表格添加一个连接
1 | [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 |
上面的命令中,没有给ip指定掩码,默认的就是32位掩码。