我是巴黎欧莱雅 發表於 2020-3-24 21:32:00

RHEL/CentOS系列发行版nmcli命令概述

<p><span style="font-size: 15px"> RHEL7 与 CentOS 7 以上的版本中默认的网络服务由 NetworkManager 提供(简称NM),这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件。NetworkManager 可以用于以下类型的连接:Ethernet,VLANS,Bridges,Bonds,Teams,Wi-Fi,mobile boradband(如移动3G)以及 IP-over-InfiniBand。 针对与这些网络类型,NetworkManager 可以配置他们的网络别名,IP 地址,静态路由,DNS,VPN连接以及很多其它的特殊参数。可以用命令行工具 nmcli 来控制 NetworkManager。nmcli的功能要比 ifconfig 强大、复杂的多。</span><br><strong><span style="font-size: 15px">nmcli是命令行的NetworkManager工具,自动把配置写到/etc/sysconfig/network-scripts/目录下面。RHEL7 与 CentOS 7之前的网络管理是通过 ifcfg 文件配置管理接口(device),而现在是通过NetworkManager服务管理连接(connection)。一个接口(device)可以有多个连接(connection),但是同时只允许一个连接(connection)处于激活(active)状态。但有一个问题,重启服务器后默认激活那个连接,我没查到相关的资料,如果是服务器建议一个网口对于一个连接。</span></strong><br><span style="font-size: 15px">简单理解就是,一个连接就是(connection)就是/etc/sysconfig/network-scripts/目录下的一个配置文件,接口(device)是物理设备,一个物理设置可以拥有多个配置文件,但只能有一个配置文件属于使用(active)状态;配置文件的生成与使用状态均由NetworkManager控制。当然,依旧支持ifcfg文件配置管理网络,但不推荐。</span><br><span style="font-size: 15px">-------------------------------------------------------------------------------------------------------</span></p>
<p><strong><span style="font-size: 15px">一、nmcli使用方法</span></strong></p>
<p><span style="font-size: 15px">nmcli使用方法非常类似linux ip命令、cisco交换机命令,并且支持tab补全,也可在命令最后通过-h、--help、help查看帮助。在nmcli中有2个命令最为常用:</span></p>
<p><span style="font-size: 15px">nmcli语法:</span><br><span style="font-size: 15px">nmcli [ OPTIONS ] OBJECT { COMMAND | help }</span><br><span style="font-size: 15px">   OBJECT和COMMAND可以用全称也可以用简称,最少可以只用一个字母,建议用头三个字母。OBJECT里面我们平时用的最多的就是connection和device,还有其他的选项在里暂时不介绍,这里需要简单区分一下connection和device。</span></p>
<p><span style="font-size: 15px">1、nmcli connection</span></p>
<p><span style="font-size: 15px">连接,偏重于逻辑设置,可理解为配置文件,相当于ifcfg-ethX。可以简写为nmcli c</span><br><span style="font-size: 15px">多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。这样的好处是针对一个网络接口,我们可以设置多个网络连接,比如静态IP和动态IP,再根据需要up相应connection,这样可以方便的切换网络配置,比如笔记本电脑移动办公,到不同的环境同一个网卡可以切换到不同的网络配置,配置好以后不需要每次都从新配置。</span></p>
<p><span style="font-size: 15px">2、nmcli device</span></p>
<p><span style="font-size: 15px">设备,是网络设备的接口,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli d</span></p>
<p><span style="font-size: 15px">在NM里,有2个维度:连接(connection)和设备(device),这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即 nmcli d可以看到的),就是NM纳管的。接着,可以为一个设备配置多个连接(即 nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。同一时刻,一个设备只能有一个连接活跃。可以通过 nmcli c up切换连接。</span></p>
<p><span style="font-size: 15px">3、connection有2种状态:</span></p>
<p><span style="font-size: 15px">▷ 活跃(带颜色字体):表示当前该connection生效 </span><br><span style="font-size: 15px">▷ 非活跃(正常字体):表示当前该connection不生效</span></p>
<p><span style="font-size: 15px">4、device有4种常见状态:</span></p>
<p><span style="font-size: 15px">▷ connected:已被NM纳管,并且当前有活跃的connection</span><br><span style="font-size: 15px">▷ disconnected:已被NM纳管,但是当前没有活跃的connection </span><br><span style="font-size: 15px">▷ unmanaged:未被NM纳管 </span><br><span style="font-size: 15px">▷ unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ethX down)</span></p>
<p><br><strong><span style="font-size: 15px">二、nmcli connection说明</span></strong><br><span style="font-size: 15px">------------------------------------------------------------------------</span><br><span style="font-size: 15px">pipci@HP:~$ nmcli c show         #显示所有连接</span><br><span style="font-size: 15px">NAME                   UUID                                                    TYPE          DEVICE </span><br><span style="font-size: 15px">CMCC-Debian&nbsp; &nbsp; &nbsp; &nbsp;80171577-f5fb-45f2-aa9b-512251c2e000  &nbsp; &nbsp; &nbsp;&nbsp;wifi      &nbsp; &nbsp;&nbsp;      wlp2s0   ##这是当前激活的连接带颜色字体,只是文章里体现不出来</span><br><span style="font-size: 15px">10.97.17.90   &nbsp;&nbsp;   93e8cf06-bd0b-4b69-b802-f3c8c602e000    ethernet       &nbsp;&nbsp; --&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ##“--”表示当前没有激活的连接</span><br><span style="font-size: 15px">DHCP  &nbsp; &nbsp;  &nbsp;&nbsp;             3efe4ab9-4a5f-4da1-8a0f-88ff7a1f0000   &nbsp; &nbsp; ethernet      &nbsp; &nbsp;&nbsp;--   </span><br><span style="font-size: 15px">laopi     &nbsp; &nbsp; &nbsp;&nbsp;         67a1ca1d-222d-4b81-b7f7-abda9a474000  wifi     &nbsp; &nbsp;       -- </span><br><span style="font-size: 15px">virbr0      &nbsp;&nbsp;d7188d09-6030-435b-abdf-34032aa1e7d7  &nbsp; &nbsp; bridge     &nbsp; &nbsp;     virbr0      </span><br><span style="font-size: 15px">pipci@HP:~$ </span><br><span style="font-size: 15px">------------------------------------------------------------------------      </span><br><span style="font-size: 15px">每一行是一个连接,只是只有一个是激活状态</span><br><span style="font-size: 15px">第一列是connection名字(连接名称)简称con-name,简称con-name(注意con-name不是网卡名)</span><br><span style="font-size: 15px">第二列是connection的UUID</span><br><span style="font-size: 15px">第三列是connection的网络类型</span><br><span style="font-size: 15px">最后一列才是网卡名(标准说法叫device名),可通过nmcil d查看device</span></p>
<p><span style="font-size: 15px">对connection做操作时需要指定标识,标识可以是con-name、UUID、如果存在ifcfg文件则也可以用ifcfg的完整路径,即/etc/sysconfig/network-scripts/ifcfg-ethX,如下示例:</span><br><span style="font-size: 15px">-------------------------------------------------------------</span><br><span style="font-size: 15px">nmcli c show ethX</span><br><span style="font-size: 15px">nmcli c show cae3f1ef-e79a-46c3-8e0c-946b91a65e11</span><br><span style="font-size: 15px">nmcli c show /etc/sysconfig/network-scripts/ifcfg-ethX</span><br><span style="font-size: 15px">-------------------------------------------------------------</span></p>
<p><span style="font-size: 15px">1、nmcli connection名字(连接名称)</span></p>
<p><span style="font-size: 15px">同时对应ifcfg的文件名以及内容中的NAME=,该参数表示连接(connection)的名字,无需和网卡名相同,可以为一个设备(device)创建多个连接,但同一时刻只能有一个连接生效。当有多个连接时候,可以通过nmcli c delete删除当前连接,就会自动选择同一个设备的其他连接来顶替生效。可以通过nmcli c up来将指定连接切换生效。</span></p>
<p><span style="font-size: 15px">注意:通过nmcli c modify修改连接名称,只会对应修改ifcfg文件中的NAME,而不会更改ifcfg文件名。</span></p>
<p><span style="font-size: 15px">2、nmcli c的ipv4.method</span></p>
<p><span style="font-size: 15px">对应ifcfg文件内容的BOOTPROTO,ipv4.method默认为auto,对应为BOOTPROTO=dhcp,这种时候如果指定ip,就可能导致网卡同时有dhcp分配的ip和静态ip。设置为manual表示BOOTPROTO=none,即只有静态ip。</span></p>
<p><br><strong><span style="font-size: 15px">三、nmcli device说明</span></strong></p>
<p>&nbsp;-------------------------------------------------------------</p>
<p>pipci@HP:~$ nmcli d status                 #查看设备接口简略信息<br>DEVICE      TYPE      STATE  &nbsp;&nbsp;      CONNECTION<br>wlp2s0  &nbsp; &nbsp;&nbsp;    wifi  &nbsp; &nbsp;      connected&nbsp; &nbsp; &nbsp; CMCC-Debian <br>enp1s0      ethernet&nbsp; &nbsp; &nbsp; unavailable  --          <br>vboxnet0&nbsp; &nbsp; &nbsp; ethernet&nbsp; &nbsp; &nbsp; unmanaged      --          <br>lo   &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;       loopback&nbsp; &nbsp; &nbsp;unmanaged      --          <br>pipci@HP:~$ <br>-------------------------------------------------------------<br>每一行表示一个网络设备的接口<br>第一列表示设备接口的名称<br>第二列表示设备接口的类型<br>第三列表示设备接口状态<br>最后一列表示connection的名字,“--”表示设备为使用</p>
<p><em id="__mceDel">&nbsp;</em></p>
<p><span style="font-size: 15px">1、nmcli d connect ethX</span></p>
<p><span style="font-size: 15px">由NM对指定网卡进行管理,同时刷新该网卡对应的活跃connection(如果之前有修改过connection配置);如果有connection但是都处于非活跃状态,则自动选择一个connection并将其活跃;如果没有connection,则自动生成一个并将其活跃。</span></p>
<p><span style="font-size: 15px">2、nmcli d disconnect ethX</span></p>
<p><span style="font-size: 15px">让NM暂时不管理指定网卡,此操作不会变更实际网卡的link状态,只会使对应的connection变成非活跃。若重启系统则又会自动connect。另外,如果手工将该网卡的connection全部删掉,该网卡状态也会自动变为disconnected。</span></p>
<p><span style="font-size: 15px">3、nmcli d reapply ethX</span></p>
<p><span style="font-size: 15px">专门用于刷新connection,前提是网卡的device处于connected状态,否则会报错。</span></p>
<p><span style="font-size: 15px">4、nmcli d set ethX autoconnect yes|no managed yes|no</span></p>
<p><span style="font-size: 15px">可以设置是否自动连接和是否自动管理,但经测试只能用于当前开机状态, 如果这2个参数都设置为no,然后重启系统,又会自动恢复成connected和managed yes的状态。所以该命令用途不大。注意事项:如果managed设置为no,那么nmcli c reload会读取配置文件,但是不会立即生效,接着如果执行nmcli c up ethX,就会立即生效,同时managed自动变为yes。</span></p>
<p><span style="font-size: 15px">重启系统自动恢复成connected和managed yes的状态,这种逻辑并不实用也不够合理,牛人已将此问题提交给redhat,据回复,这么设计是因为目前没有一个有效的手段来证明“我是我”,比如当网卡重新拔插到其他插槽时候,网卡名有很大可能性会发生变化,因此无法确定关机前设置的是对应开机后的哪个网卡,目前暂无办法解决,笔者将持续跟进。</span></p>
<p><strong><span style="font-size: 15px">四、3种网络配置方法</span></strong><br><span style="font-size: 15px">在讲3种配置方法前,需要先明白ifcfg和NM connection的关联:虽然network.service被废弃了,但是redhat为了兼容传统的ifcfg,通过NM进行网络配置时候,会自动将connection同步到ifcfg配置文件中。也可以通过nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX的方式来让NM读取ifcfg配置文件到connection中。因此ifcfg和connection是一对一的关系,另外上面有提到,connection和device是多对一的关系。</span></p>
<p><span style="font-size: 15px">1. 手工配置ifcfg,通过NM来生效</span><br><span style="font-size: 15px">2. 通过NM自带工具配ip,比如nmcli</span><br><span style="font-size: 15px">3. 手工配置ifcfg,通过传统network.service来生效</span></p>
<p><span style="font-size: 15px">建议:</span></p>
<p><span style="font-size: 15px">推荐使用上述第1种网络配置方法(手工配置ifcfg,通过NM生效),因为这样既兼容了传统的ifcfg配置,又能熟悉nmcli。举例:</span><br><span style="font-size: 15px">-----------------------------------------------</span><br><span style="font-size: 15px">vi /etc/sysconfig/network-scripts/ifcfg-eth0 </span><br><span style="font-size: 15px">NAME=eth0</span><br><span style="font-size: 15px">DEVICE=eth0</span><br><span style="font-size: 15px">ONBOOT=yes</span><br><span style="font-size: 15px">BOOTPROTO=none</span><br><span style="font-size: 15px">TYPE=Ethernet</span><br><span style="font-size: 15px">IPADDR=192.168.1.10</span><br><span style="font-size: 15px">NETMASK=255.255.255.0</span><br><span style="font-size: 15px">GATEWAY=192.168.1.1</span><br><span style="font-size: 15px">----------------------------------------------</span><br><span style="font-size: 15px">nmcli c reload           ## 重载所有ifcfg到connection(不会立即生效)</span><br><span style="font-size: 15px">nmcli c up eth0         ## 如果之前没有eth0的connection,则上一步reload后就已经自动生效了</span><br><span style="font-size: 15px">----------------------------------------------</span><br><span style="font-size: 15px">这么做有2个好处:</span><br><span style="font-size: 15px">按官方建议使用NM而不是network.service,当还不太熟悉nmcli命令时候,这样最稳妥</span></p>
<p><strong><span style="font-size: 15px">四、Tips</span></strong><br><span style="font-size: 15px">1. nmcli命令支持tab补全,但是需要yum install bash-completion</span></p>
<p><span style="font-size: 15px">2. 如果希望NM不要纳管网卡,只有一个办法最彻底最靠谱,就是自己写ifcfg,内容加上NM_CONTROLLED=no,这样该device的状态就会始终保持unmanaged。nmcli c up、nmcli c reload、nmcil c load都不会对其起任何作用。</span></p>
<p><span style="font-size: 15px">3. NM只能对link状态为up的网卡进行操作,如果手动ip link set ethX down,那么NM就无法对该网卡做任何操作(即使nmcli d connect也没有用)。</span></p>
<p><span style="font-size: 15px">4. 对于RHEL8,可以通过yum install network-scripts来安装传统的network.service,不过redhat说了,在下一个rhel的大版本里将彻底废除,因此不建议使用network.service。</span></p>
<p><span style="font-size: 15px">5. 手工创建新的ifcfg或者在ifcfg里修改ip等配置,NM不会自动读取,需要手工执行nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX。这一点可能和其他系统的NM行为不太一样,但这种做法实则更适合服务器。</span></p>
<p><span style="font-size: 15px">6. 不手工配置ifcfg,使用默认的dhcp情况下,网卡的增减是不会自动生成ifcfg,此时nmcli c看到的con-name将类似'System ethX'或者'Wired connection 1'。</span></p>
<p><span style="font-size: 15px">7. NetworkManager支持3种获取dhcp的方式:dhclient、dhcpcd、internal,当/etc/NetworkManager/NetworkManager.conf配置文件中的部分没配置dhcp=时候,默认使用internal(rhel7/centos7默认是dhclient)。internal是NM内部实现的dhcp客户端。</span></p>
<p><span style="font-size: 15px">8. 关于手动指定网关ip的方法,经过实测,/etc/sysconfig/network中的GATEWAY仅在3种情况下有效:NM_CONTROLLED=no或ipv4.method manual或从ipv4.method manual第一次转到ipv4.method auto时候。建议:当NM_CONTROLLED=no时,将网关写在/etc/sysconfig/network(GATEWAY);当使用NM时候,使用nmcli c命令配置网关(比如nmcli c modify ethX ipv4.gateway 192.168.1.1)。</span></p>
<p><span style="font-size: 15px">9. NM默认会从dhcp里获取dns信息,并修改/etc/resolv.conf,如果不想让NM管理/etc/resolv.conf,则只需在/etc/NetworkManager/NetworkManager.conf里的里增加dns=none即可。</span></p>
<p><span style="font-size: 15px">10. 如果想让NM不要自动管理新网卡(比如不要给新网卡获取ip地址),则只需在/etc/NetworkManager/NetworkManager.conf里的里增加no-auto-default=*即可,改完后通过systemctl restart NetworkManager或者重启系统来生效。除了手工在NetworkManager.conf里加配置,也可以yum install NetworkManager-config-server,这会生成/usr/lib/NetworkManager/conf.d/00-server.conf,内容为如下截图。建议使用前者方案,因为后者的ingore-carrier是不被推荐的参数。</span></p>
<p><span style="font-size: 15px">11. 更多NetworkManager参数详见man NetworkManager.conf</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 15px">参考:</span></p>
<p><span style="font-size: 15px">https://www.jianshu.com/p/244115c34f08</span></p>
<p><span style="font-size: 15px">&nbsp;</span></p>
<p><span style="font-size: 15px">&nbsp;</span></p><br><br>
来源:https://www.cnblogs.com/pipci/p/12562227.html
頁: [1]
查看完整版本: RHEL/CentOS系列发行版nmcli命令概述