zoukankan      html  css  js  c++  java
  • centos8 网络配置nmcli用法【转载】

    在rhel8或CentOS8上,没有传统的network.service,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,那么该如何进行网络配置呢?
    Centos7上,/etc/sysconfig/network-scripts/路径的内容:
    Centos8网络配置
    Centos8上,/etc/sysconfig/network-scripts/路径的内容:
    Centos8网络配置
    可以看到,在/etc/sysconfig/network-scripts目录下只存放着网卡的配置文件,文件名称是ifcfg-网卡名称。
    本文详细阐述基于centos8的网络配置,包含多种配置方法。
    2.2、 centos8与centos7的区别
    在centos7上,同时支持network.service和NetworkManager.service(简称NM)。默认情况下,这2个服务都有开启,但许多人都会将NM禁用掉。
    Centos8网络配置
    Centos8网络配置
    在centos8上,已废弃network.service,因此只能通过NM进行网络配置,包括动态ip和静态ip。换言之,在centos8上,必须开启NM,否则无法使用网络。
    注:centos8依然支持network.service,只是默认没安装,详见本文最后的提示。
    2.3、 NetworkManager介绍
    NetworkManager是2004年Red Hat启动的项目,旨在能够让Linux用户更轻松地处理现代网络需求,尤其是无线网络,能自动发现网卡并配置ip地址。
    类似在手机上同时开启wifi和蜂窝网络,自动探测可用网络并连接,无需手动切换。
    虽然初衷是针对无线网络,但在服务器领域,NM已大获成功。
    2.3.2、 NM能管理各种网络
     有线网卡、无线网卡
     动态ip、静态ip
     以太网、非以太网
     物理网卡、虚拟网卡
    2.3.3、 使用方法
     nmcli:命令行。这是最常用的工具,本文将详细讲解该工具使用。
     nmtui:在shell终端开启文本图形界面。示意图见本文最后的提示
     Freedesktop applet:如GNOME上自带的网络管理工具
     cockpit:RedHat自带的基于web图形界面的"驾驶舱"工具,具有dashborad和基础管理功能。示意图见本文最后的提示
    2.3.4、 为什么要用NM
     工具齐全:命令行、文本界面、图形界面、web
     广纳天地:纳管各种网络,有线、无线、物理、虚拟
     参数丰富:多达200多项配置参数(包括ethtool参数)
     一统江湖:RedHat系、SUSE系、Debian/Ubuntu系,均支持
     大势所趋:下一个大版本的rhel只能通过NM管理网络
    2.4、 nmcli使用方法
    nmcli使用方法非常类似linux ip命令、cisco交换机命令,并且支持tab补全(详见本文最后的示例),也可在命令最后通过-h、--help、help查看帮助。在nmcli中有2个命令最为常用:
    1、nmcli connection
    译作连接,可理解为配置文件,相当于ifcfg-ensXX。可以简写为nmcli c

    Centos8网络配置
    2、nmcli device
    译作设备,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli d
    Centos8网络配置
    在NM里,有2个维度:连接(connection)和设备(device),这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即nmcli d可以看到的),就是NM纳管的。接着,可以为一个设备配置多个连接(即nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。同一时刻,一个设备只能有一个连接活跃。可以通过nmcli c up切换连接。
    connection有2种状态:
     活跃(带颜色字体):表示当前该connection生效
     非活跃(正常字体):表示当前该connection不生效
    device有4种常见状态:
     connected:已被NM纳管,并且当前有活跃的connection
     disconnected:已被NM纳管,但是当前没有活跃的connection
     unmanaged:未被NM纳管
     unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ensXX down)
    2.5、 nmcli常用命令一览
    2.5.5、 查看ip
    查看ip(类似于ifconfig、ip addr)
    nmcli

    Centos8网络配置
    2.5.6、 创建connection,配置静态ip
    创建connection,配置静态ip(等同于配置ifcfg,其中BOOTPROTO=none,并ifup启动)
    例如:虚拟机关机,添加一块网卡,网卡设备名ens37
    系统启动后执行nmcli d和nmcli c查看
    Centos8网络配置
    Centos8网络配置
    创建connection
    nmcli c add type ethernet con-name ens37 ifname ens37 ipv4.addr 192.168.1.200/24 ipv4.gateway 192.168.1.254 ipv4.method manual

    Connection 'ens37' (2b3170a0-576d-4c98-94ea-0146a39173dd) successfully added.
    查看创建的conntection
    Centos8网络配置
    发现该connection是非活跃的
    执行ifup启用
    Centos8网络配置
    可以将wired connection 1删除
    Centos8网络配置
    查看网卡ens37的配置文件及配置文件内容
    ls /etc/sysconfig/network-scripts/

    ifcfg-ens33 ifcfg-ens37
    cat /etc/sysconfig/network-scripts/ifcfg-ens37

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none
    IPADDR=192.168.1.200
    PREFIX=24
    GATEWAY=192.168.1.254
    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=ens37
    UUID=2b3170a0-576d-4c98-94ea-0146a39173dd
    DEVICE=ens37
    ONBOOT=yes
    2.5.7、 修改connection的ip地址
    1、修改ip(非交互式)
    nmcli c modify ens37 ipv4.addr 192.168.1.201/24 ipv4.dns 114.114.114.114
    nmcli c up ens37

    Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
    查看ip
    ifconfig ens37

    ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.1.201 netmask 255.255.255.0 broadcast 192.168.1.255
    inet6 fe80::47d2:b5d5:b789:ffa3 prefixlen 64 scopeid 0x20
    ether 00:0c:29:fb:57:b8 txqueuelen 1000 (Ethernet)
    RX packets 79 bytes 12995 (12.6 KiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 116 bytes 11974 (11.6 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    2、修改ip(交互式)
    nmcli c edit ens37

    nmcli> goto ipv4.addresses
    nmcli ipv4.addresses> change
    Edit 'addresses' value: 192.168.1.202/24
    Do you also want to set 'ipv4.method' to 'manual'? [yes]: yes
    nmcli ipv4.addresses> back
    nmcli ipv4> save
    nmcli ipv4> activate
    nmcli ipv4> quit
    2.5.8、 创建connection,配置动态ip
    创建connection,配置动态ip(等同于配置ifcfg,其中BOOTPROTO=dhcp,并ifup启动)
    例如:把前面创建的ens37连接删除
    nmcli c delete 2b3170a0-576d-4c98-94ea-0146a39173dd

    注:2b3170a0-576d-4c98-94ea-0146a39173dd是连接ens37的uuid
    执行nmcli c和nmcli d
    Centos8网络配置
    Centos8网络配置
    给网卡配置动态地址
    nmcli c add type ethernet con-name ens37 ifname ens37 ipv4.method auto

    Connection 'ens37' (37934e6f-6062-41f1-8d7b-0f6773e0243a) successfully added.
    ifup ens37

    Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
    执行nmcli或ifconfig或ip a查看ip地址(略)
    执行nmcli c和nmcli d
    Centos8网络配置
    cat /etc/sysconfig/network-scripts/ifcfg-ens37

    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=ens37
    UUID=37934e6f-6062-41f1-8d7b-0f6773e0243a
    DEVICE=ens37
    ONBOOT=yes
    2.5.9、 停止connection
    停止connection(相当于ifdown)
    nmcli c down ens37

    Connection 'ens37' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/12)
    执行nmcli c和nmcli d
    Centos8网络配置
    2.5.10、 启用connection
    启用connection(相当于ifup)
    nmcli c up ens37

    执行nmcli c和nmcli d
    Centos8网络配置
    2.5.11、 删除connection
    删除connection(类似于ifdown并删除ifcfg)
    nmcli c delete ens37

    Connection 'ens37' (983154ae-9117-4977-a621-d8a2cd18b441) successfully deleted.
    2.5.12、 查看connection
    查看connection列表
    nmcli c show

    NAME UUID TYPE DEVICE
    ens33 dabe8052-ae4f-41f0-b1d4-370a76e87202 ethernet ens33
    2.5.13、 查看connection详细信息
    nmcli c show ens33

    2.5.14、 重载所有ifcfg或route到connection
    重载所有ifcfg或route到connection(不会立即生效)
    nmcli c reload

    2.5.15、 重载指定ifcfg或route到connection
    重载指定ifcfg或route到connection(不会立即生效)

    nmcli c load /etc/sysconfig/network-scripts/ifcfg-ensXX

    nmcli c load /etc/sysconfig/network-scripts/route-ensXX

    2.5.16、 立即生效connection
    立即生效connection,有4种方法
    nmcli c up ensXX
    nmcli d reapply ensXX
    nmcli d connect ensXX
    systemctl restart NetworkManager

    2.5.17、 查看device
    查看device列表
    nmcli d

    2.5.18、 查看所有device详细信息
    nmcli d show

    2.5.19、 查看指定device的详细信息
    nmcli d show ensXX

    2.5.20、 激活网卡
    nmcli d connect ensXX

    2.5.21、 关闭无线网络
    关闭无线网络(NM默认启用无线网络)
    nmcli r all off

    2.5.22、 查看NM纳管状态
    nmcli n

    enabled
    2.5.23、 开启NM纳管
    nmcli n on

    2.5.24、 关闭NM纳管
    关闭NM纳管(谨慎执行)
    nmcli n off

    2.5.25、 监听事件
    nmcli m

    2.5.26、 检测NM是否在线可用
    nm-online

    注:本文提及的ifcfg均指代/etc/sysconfig/network-scripts/ifcfg-ensXX及/etc/sysconfig/network-scripts/route-ensXX
    2.6、 nmcli connection重点
    2.6.27、 nmcli c show
    Centos8网络配置
    ▪ 第一列是connection名字,简称con-name(注意con-name不是网卡名)
    ▪ 第二列是connection的UUID
    ▪ 第三列是connection的类型
    ▪ 最后一列才是网卡名(标准说法叫device名),可通过nmcil d查看device
    对connection做操作时需要指定标识,标识可以是con-name、UUID、如果存在ifcfg文件则也可以用ifcfg的完整路径,即/etc/sysconfig/network-scripts/ifcfg-ensXX
    例如:
    nmcli c show ens33
    nmcli c show dabe8052-ae4f-41f0-b1d4-370a76e87202
    nmcli c show /etc/sysconfig/network-scripts/ifcfg-ens33

    2.6.28、 nmcli c的con-name
    con-name同时对应ifcfg的文件名以及文件内容中的NAME=,该参数表示连接(connection)的名字,无需和网卡名相同,可以为一个设备(device)创建多个连接,但同一时刻只能有一个连接生效。当有多个连接时候,nmcli c delete删除当前连接,就会自动选择同一个设备的其他连接来顶替生效。可以通过nmcli c up来将指定连接切换生效。
    注意:通过nmcli c modify修改con-name,只会对应修改ifcfg文件中的NAME,而不会更改ifcfg文件名。
    2.6.29、 nmcli c的ipv4.method
    对应ifcfg文件内容的BOOTPROTO,ipv4.method默认为auto,对应为BOOTPROTO=dhcp,这种时候如果指定ip,就可能导致网卡同时有dhcp分配的ip和静态ip。设置为manual表示BOOTPROTO=none,即只有静态ip。
    例如:创建一个连接(connection)
    nmcli c add type ethernet con-name ens37-test ifname ens37 ipv4.addresses '192.168.1.100/24,192.168.1.101/32' ipv4.routes '10.0.0.0/8 192.168.1.10,192.168.0.0/16 192.168.1.11' ipv4.gateway 192.168.1.254 ipv4.dns '8.8.8.8,4.4.4.4' ipv4.method manual

    注解:
    ▪ type ethernet:创建连接时候必须指定类型,类型有很多,可以通过nmcli c add type -h看到,这里指定为ethernet。
    ▪ con-name ensXX ifname ensXX:第一个ensXX表示连接(connection)的名字,这个名字可以任意定义,无需和网卡名相同;第二个ensXX表示网卡名,这个ethX必须是在nmcli d里能看到的。
    ▪ ipv4.addresses '192.168.1.100/24,192.168.1.101/32':配置2个ip地址,分别为192.168.1.100/24和192.168.1.101/32
    ▪ ipv4.gateway 192.168.1.254:网关为192.168.1.254
    ▪ ipv4.dns '8.8.8.8,4.4.4.4':dns为8.8.8.8和4.4.4.4
    ▪ ipv4.method manual:配置静态IP
    对应的ifcfg和dns就是
    cat /etc/sysconfig/network-scripts/ifcfg-ens37-test

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none
    IPADDR=192.168.1.100
    PREFIX=24
    IPADDR1=192.168.1.101
    PREFIX1=32
    GATEWAY=192.168.1.254
    DNS1=8.8.8.8
    DNS2=4.4.4.4
    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=ens37-test
    UUID=55a41b74-e99b-4ee3-830f-c4c465c375cb
    DEVICE=ens37
    ONBOOT=yes
    /etc/resolv.conf

    nameserver 8.8.8.8
    nameserver 4.4.4.4
    此时,通过nmcli c应该可以看到增加了一条连接
    注意:如果这是为ensXX创建的第一个连接,则自动生效;如果此时已有连接存在,则该连接不会自动生效,可以执行nmcli c up ensXX-test来切换生效
    2.7、 nmcli device重点
    2.7.30、 nmcli d connect ensXX
    由NM对指定网卡进行管理,同时刷新该网卡对应的活跃connection(如果之前有修改过connection配置);如果有connection但是都处于非活跃状态,则自动选择一个connection并将其活跃;如果没有connection,则自动生成一个并将其活跃。
    例如:执行nmcli c delete 连接名,将ens37网卡的所有connection删除,然后执行nmcli d查看网卡设备
    Centos8网络配置
    执行nmcli d connect ens37
    Centos8网络配置
    2.7.31、 nmcli d disconnect ethX
    让NM暂时不管理指定网卡,此操作不会变更实际网卡的link状态,只会使对应的connection变成非活跃。若重启系统则又会自动connect。另外,如果手工将该网卡的connection全部删掉,该网卡状态也会自动变为disconnected。
    Centos8网络配置
    2.7.32、 nmcli d reapply ensXX
    专门用于刷新connection,前提是网卡的device处于connected状态,否则会报错。
    例如:通过配置文件(ifcfg)修改网卡ens37的ip地址,可以通过执行nmcli d reapply ens37刷新该connection,使修改生效。
    2.7.33、 nmcli d set ensXX autoconnect yes|no managed yes|no
    可以设置是否自动连接和是否自动管理,但经测试只能用于当前开机状态, 如果这2个参数都设置为no,然后重启系统,又会自动恢复成connected和managed yes的状态。所以该命令用途不大。
    注意事项:如果managed设置为no,那么nmcli c reload会读取配置文件,但是不会立即生效,接着如果执行nmcli c up ens37X,就会立即生效,同时managed自动变为yes。
    重启系统自动恢复成connected和managed yes的状态,这种逻辑并不实用也不够合理,据redhat的回复,这么设计是因为目前没有一个有效的手段来证明“我是我”,比如当网卡重新拔插到其他插槽时候,网卡名有很大可能性会发生变化,因此无法确定关机前设置的是对应开机后的哪个网卡,目前暂无办法解决。
    2.8、 3种网络配置方法
    在讲3种配置方法前,需要先明白ifcfg和NM connection的关联:虽然network.service被废弃了,但是redhat为了兼容传统的ifcfg,通过NM进行网络配置时候,会自动将connection同步到ifcfg配置文件中。也可以通过nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ensXX的方式来让NM读取ifcfg配置文件到connection中。因此ifcfg和connection是一对一的关系,另外上面有提到,connection和device是多对一的关系。
    在rhel8上,有3种方法进行网络配置

    手工配置ifcfg,通过NM来生效
    通过NM自带工具配ip,比如nmcli
    手工配置ifcfg,通过传统network.service来生效
    2.8.34、 方法一:手工配置ifcfg,使用nmcli来生效新的网络配置
    建议:推荐使用上述第1种网络配置方法(手工配置ifcfg,通过NM生效),因为这样既兼容了传统的ifcfg配置,又能熟悉nmcli。
    例如:假设网卡标识为ens37
    cat > /etc/sysconfig/network-scripts/ifcfg-ens37 << EOF
    NAME=ens37
    DEVICE=ens37
    ONBOOT=yes
    BOOTPROTO=none
    TYPE=Ethernet
    IPADDR=192.168.1.150
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.254
    DNS1=114.114.114.114
    EOF
    使用nmcli重新加载网络配置
    nmcli c reload
    nmcli c up ens37 # 如果之前没有ens37的connection,则上一步reload后就已经自动生效了
    
    这么做有2个好处:
    ▷ 按官方建议使用NM而不是network.service
    ▷ 当还不太熟悉nmcli命令时候,这样最稳妥
    2.8.35、 方法二:RHEL8和CentOS8完全使用nmcli来管理网络
    参考前面讲解的2.5节nmcli常用命令一览
    2.8.36、 方法三:安装network.service服务
    可以通过yum install network-scripts来安装传统的network.service,不过redhat说了,在下一个RHEL的大版本里将彻底废除,因此不建议使用network.service。
    CentOS8和RHEL8上一定要习惯使用nmcli来管理网络,network.service在未来会被正式废除,没有学习的必要了。
    

    2.9、 提示

    nmcli命令支持tab补全,但是需要yum install bash-completion
    如果希望NM不要纳管网卡,只有一个办法最彻底最靠谱,就是自己写ifcfg,内容加上NM_CONTROLLED=no,这样该device的状态就会始终保持unmanaged。nmcli c up、nmcli c reload、nmcil c load都不会对其起任何作用。
    NM只能对link状态为up的网卡进行操作,如果手动ip link set ethX down,那么NM就无法对该网卡做任何操作(即使nmcli d connect也没有用)。
    可以通过yum install network-scripts来安装传统的network.service,不过redhat说了,在下一个rhel的大版本里将彻底废除,因此不建议使用network.service。
    手工创建新的ifcfg或者在ifcfg里修改ip等配置,NM不会自动读取,需要手工执行nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX也可以重启NetworkManager服务。这一点可能和其他系统的NM行为不太一样,但这种做法实则更适合服务器。
    不手工配置ifcfg,使用默认的dhcp情况下,网卡的增减是不会自动生成ifcfg,此时nmcli c看到的con-name将类似'System ethX'或者'Wired connection 1'。
    NetworkManager支持3种获取dhcp的方式:dhclient、dhcpcd、internal,当/etc/NetworkManager/NetworkManager.conf配置文件中的[main]部分没配置dhcp=时候,默认使用internal(rhel7/centos7默认是dhclient)。internal是NM内部实现的dhcp客户端。
    NM默认会从dhcp里获取dns信息,并修改/etc/resolv.conf,如果不想让NM管理/etc/resolv.conf,则只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加dns=none即可。
    更多NetworkManager参数详见man NetworkManager.conf
    nmtui示意图:
    Centos8网络配置
        cockpit示意图:
        Centos8网络配置
    

    ©著作权归作者所有:来自51CTO博客作者bpcyh1的原创作品,如需转载,请注明出处,否则将追究法律责任
    from https://blog.51cto.com/hongge/2486675

  • 相关阅读:
    用户管理的设计--3.jquery的ajax实现二级联动
    用户管理的设计--2.新增用户信息实现
    用户管理的设计--1.首页查询功能实现
    使用ajax实现简单的带百分比进度条
    python && java
    es6 modules 和commonjs
    es6 promise
    CSS“隐藏”元素的几种方法的对比
    jquery extend
    html5自定义属性
  • 原文地址:https://www.cnblogs.com/fb010001/p/14582951.html
Copyright © 2011-2022 走看看