ljzsdut
GitHubToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

04 Nmcli命令

设置ip和用户名:

setenforce 0
hostnamectl set-hostname node03 && exec bash
nmcli connection modify eth0 ipv4.addr "192.168.5.235/24"
nmcli connection modify eth0 ipv4.gateway "192.168.5.1"
nmcli connection modify eth0 ipv4.dns "192.168.5.1"
nmcli connection modify eth0 ipv4.method manual
nmcli connection modify eth0 autoconnect yes
nmcli con up eth0  或者 nmcli dev reapply eth0 或者 nmcli dev connect eth0 或者 systemctl restart network
setenforce 0
HOST_NAME=$(hostname -I|awk -F. '{printf "vm-%s-%s",$3,$4}')
hostnamectl set-hostname ${HOST_NAME} && exec bash


什么是设备?什么是网络连接?

设备(dev)即网络接口(网卡),连接(connection)是对网络接口的配置。

一个网络接口可有多个连接配置(在多个ifcfg-xxx配置文件中指定同一个DEVICE=eth0,DEVICE可以相同,但是UUID不能相同同),但同时只有一个连接配置生效(针对一个接口可以有多套配置文件,但是在同一时间只能有一套配置文件生效。如下图,DEVICE字段有值的con记录表示生效的con)

connection的DEVICE分配了值表示该con生效了

查看信息的两个命令:

  • nmcli dev status|show 查看简要信息|详细信息
  • nmcli con show 查看信息

网卡设备

可以简写为:dev,甚至可以简写为:d

查看网卡信息

  • 查看所有网卡设备状态
[root@k8snode01 ~]# nmcli dev status  #nmcli dev s #查看网卡设备信息,status可省略,device可以简写为dev
DEVICE        TYPE      STATE         CONNECTION 
cni0          bridge    connected     cni0       
docker0       bridge    connected     docker0    
eth0          ethernet  connected     eth0       
flannel.1     vxlan     disconnected  --         
veth4d3a5837  ethernet  unmanaged     --         
vethd0484013  ethernet  unmanaged     --         
vethd3061b98  ethernet  unmanaged     --         
lo            loopback  unmanaged     -- 

[root@k8snode01 ~]# nmcli dev show  #查看所有网卡设备的具体信息
  • 查看具体某个网卡设备的信息
[root@k8snode01 ~]# nmcli dev show eth0  #查看某个网卡的信息,eth0缺省表示查看所有网卡信息
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         52:54:00:91:B9:96
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.5.37/24
IP4.GATEWAY:                            192.168.5.1
IP4.DNS[1]:                             219.146.1.66
IP4.DNS[2]:                             192.168.5.1
IP6.ADDRESS[1]:                         fe80::42c7:a5:559b:b993/64
IP6.ADDRESS[2]:                         fe80::8d1a:428a:b170:d33e/64
IP6.ADDRESS[3]:                         fe80::e362:1f8:fd0b:d7ff/64
IP6.GATEWAY:                            --

网络连接

  • 查看所有网卡的连接配置

显示所有网卡的连接配置,就是/etc/sysconfig/network-scripts/下有没有网卡的配置文件,没有的话不显示;connection可以简写con,甚至可以简写为c

[root@k8snode01 ~]# nmcli connection [show] #显示所有网卡的连接配置,就是/etc/sysconfig/network-scripts/下有没有网卡的配置文件,没有的话不显示;connection可以简写con甚至为c
NAME     UUID                                  TYPE            DEVICE  
cni0     cb5fa764-88a1-49ca-9208-8974136744bd  bridge          cni0    
docker0  81af66e9-86af-47e7-80d0-299b2f7977b0  bridge          docker0 
eth0     5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  802-3-ethernet  eth0   
  • 查看某个具体网卡的连接配置
[root@k8snode01 ~]# nmcli connection show em2
connection.id:                          em2
connection.uuid:                        255d04a5-d9c0-43d3-9f0e-809aad829b59
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              em2
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1571677175
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --

创建新的连接

子命令:con add

  • 创建新连接dhcp(默认为dhcp)
[root@Nginx ~]# nmcli con add con-name eth1 type Ethernet ifname eth1
Connection 'eth1' (def0c732-60b6-4434-8ffd-acd0b8f18c1c) successfully added.
#该命令会在/etc/sysconfig/network-scripts/下有一个新文件:ifcfg-eth1

[root@Nginx ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
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=eth1
UUID=def0c732-60b6-4434-8ffd-acd0b8f18c1c
DEVICE=eth1
ONBOOT=yes

# connection add    表示创建一个新的网络连接
# con-name eth1     指定连接的名字
# type Ethernet     指定连接类型
# ifname eth1       指定连接的接口设备
  • 创建新连接static (指定静态IP,不自动连接)
[root@CT731 ~]#nmcli connection add con-name eth4 ifname eth4 autoconnect no type Ethernet ipv4.address 172.25.12.10/24 ipv4.gateway 172.25.12.254  
Connection 'eth4' (403fe692-04cd-4a01-b8bb-7e2bb468daf1) successfully added.

# autoconnect no    开机自启,默认为yes

删除连接

子命令:con del IFNAME

[root@CT731 ~]#nmcli connection delete eth4
Connection 'eth4' (403fe692-04cd-4a01-b8bb-7e2bb468daf1) successfully deleted

修改连接(IP、gateway、dns等信息)

子命令:con modify IFNAME

  • ipv4.addresses|ipv4.addr:CIDR格式的IPV4地址
  • ipv4.gateway:网关
  • ipv4.dns:第一个dns服务器
  • ipv4.dns1:第二个dns服务器
  • ipv4.method manual/static|dhcp/auto:修改IP地址是静态还是DHCP
  • autoconnect yes|no:是否开机自启动
[root@k8snode01 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 172.17.0.1/16 ipv4.gateway 172.18.0.1 ipv4.dns 114.114.114.114  

连接配置

增加新的地址(同一个dev上配置多个设备)

nmcli connection modify 连接配置名 +ipv4.addresses 2.2.2.2/16

增加地址之后不会立刻生效。 nmcli con up 连接配置名

[root@k8snode01 ~]# nmcli  connection modify eth0 +ipv4.addresses 2.2.2.2/16
[root@k8snode01 ~]# nmcli con up eth0

删除添加的地址

nmcli connection delete 连接配置名 -ipv4.addresses 2.2.2.2/16

nmcli con up 连接配置名

[root@k8snode01 ~]# nmcli  connection del eth0 -ipv4.addresses 2.2.2.2/16
[root@k8snode01 ~]# nmcli con up eth0

修改连接配置名

nmcli connection modify 原连接配置名 connection id. 新连接配置名

[root@k8snode01 ~]# nmcli connection modify eth0 connection id. eth0_1

网络接口的启用与停用

[root@CT731 ~]#nmcli connection down eth2
Connection 'eth2' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/77)

[root@CT731 ~]#nmcli connection up eth2  
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/78)

重新加载连接配置

重新加载配置文件(如果新增加/修改了ifcfg-XXX配置文件就可以用这个命令重新加载配置文件使其生效)

[root@k8snode01 ~]# nmcli connection reload

配置网卡bonding

网卡bonding介绍

Bonding 就是将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。

  • Mode 0 (balance-rr)

衡和容错的能力轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均。

一个机器上面有两块网卡,第一个数据来了走第一个网卡,第二个数据来了走第二个网卡,第三个数据来了走第一个网卡,第四个数据来了就走第二个网卡。 image

  • Mode 1 (active-backup)

活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见(平时只有一个网卡工作,另一个网卡不工作,一旦这个工作的网卡坏了,那么不工作的网卡就会被激活,接替工作)

  • Mode 3 (broadcast)

广播策略:在所有的slave接口上传送所有的报文,提供容错能力(从远程来了一个数据,所有的网卡都能收到,并且都回应,就会出现一个dup!的提示)

nmcli 命令实现bonding

实验环境:A机器两个网卡都是主机模式

image

第一步:添加bonding接口

nmcli  con add type bond con-name mybond0  ifname mybond0  mode  active-backup
  • con-name 是连接配置名
  • ifname 是接口名
  • mode 是bond的模式

增加IP地址

nmcli connection modify mybond0 ipv4.method manual  ipv4.addresses 192.168.37.100/24

也可以写成一条添加接口时直接添加地址

nmcli  con add type bond con-name mybond0  ifname mybond0  mode  active-backup ipv4.method manual  ipv4.addresses 192.168.37.100/24

第二步:添加从属接口

nmcli con add type bond-slave  ifname  ens33  master mybond0
nmcli con add type bond-slave  ifname  ens34  master mybond0

注:如无为从属接口提供连接名,则该名称是接口名称加类型构成

第三步:要启动绑定,则必须首先启动从属接口

nmcli con up bond-slave-ens33
nmcli con up bond-slave-ens34

第四步:启动绑定

nmcli con up mybond0

B机器的网卡也是主机模式,并且要保证和192.168.37.100在一个网段里面,然后去ping192.168.37.100

查看bond0状态

cat  /proc/net/bonding/bond0

配置网络组(Network Teaming)

网络组简介

网络组:是将多个网卡聚合在一起的方法,从而实现冗错和提高吞吐量

网路组由内核驱动和teamd守护进程实现

多种方式runner(和bonding技术里的mode一样)

  • broadcast
  • roundrobin
  • activebackup
  • loadbalance
  • lacp(implements the 802.3ad Link Aggregation Control Protocol)

网络组特点

  • 启动网络组接口不会自动启动网络组中的port接口
  • 启动网络组接口中的port接口总会自动启动网络组接口
  • 禁用网络组接口会自动禁用网络组中的port接口
  • 没有port接口的网络组接口可以启动静态IP连接
  • 启用DHCP连接时,没有port接口的网络组会等待port接口的加入

创建网络组

第一步:创建网络组接口:

nmcli  con  add type team  con-name  CNAME  ifname  INAME  config  JSON
  • con-name CNAME 连接名
  • ifname INAME 接口名
  • config JSON 指定runner方式。 格式:‘{“runner”:{“name”:“METHOD”}} METHOD 可以是broadcast ,roundrobin,activebacup,loadbalance,lacp

给网络组接口配ip地址

nmcli con mod team0 ipv4.method manual pv4.addresses  192.168.37.100/24

第二步:创建从属接口

nmcli  con  add type team-slave con-name CNAME ifname  INAME  master TEAM
  • type team-slave
  • master TEAM网络组接口名
  • 若连接名不指定,默认为team-slave-IFACE

第三步:启动网络组接口和从属接口

nmcli con up CNAME

查看team0的状态

teamdctl  team0  state

网络组示例:

nmcli  con  add type team  con-name team0 ifname  team0  config '{"runner":{"name":"loadbalance"}}'
nmcli con mod team0 ipv4.method manual pv4.addresses  192.168.37.100/24
nmcli con add type team-slave con-name team0-ens33  ifname ens33 master  team0
nmcli con add type team-slave con-name team0-ens34  ifname ens34 master  team0
nmcli con up team0
nmcli con up team0-ens33
nmcli con up team0-ens34

网络组的配置文件在/etc/sysconfig/nework-scripts/ifcfg-team0

DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.25.5.100
PREFIX0=24
NAME=team0
ONBOOT=yes

删除网络组

nmcli connection  down team0
nmcli  connection delete  team0-ens33
nmcli connection delete  team0-ens33

配置网桥

网桥简介

桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以是的网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。

image

配置实现网桥

第一步:创建软件网桥接口并配上地址

nmcli con add type bridge con-name br0 ifname br0 ipv4.method manual ipv4.addresses 192.168.37.100

第二步:创建网桥的从属(slave)接口

nmcli con add type bridge-slave ifname ens33 master br0
nmcli con add type bridge-slave ifname ens34 master br0

第三步:启动网桥接口和从属接口

nmcli con up br0
nmcli con up bridge-slave-ens33
nmcli con up bridge-slave-ens34

网桥的配置文件/etc/sysconfig/network-scripts/ifcfi-网桥接口名

删除网桥

直接删除配置文件最干脆,然后再重新加载一下配置文件nmcli connection reload

参考文档:

http://www.bubuko.com/infodetail-2299925.html

另一篇文章:基于RHEL8/CentOS8的网络IP配置详解

基于RHEL8/CentOS8的网络IP配置详解

➡ 在rhel8(含centos8)上,没有传统的network.service,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,那么该如何进行网络配置呢。 ➡ 本文详细阐述基于rhel8的网络配置,包含多种配置方法。 ➡ 事先声明:本文提及的所有内容,仅适用rhel8/centos8,因为不同linux系统的NetworkManager行为存在部分差异。

小慢哥的原创文章,欢迎转载


目录

▪ rhel8与7的区别 ▪ NetworkManager介绍 ▪ nmcli使用方法 ▪ nmcli常用命令一览 ▪ nmcli connection重点 ▪ nmcli dev evice重点 ▪ 3种网络配置方法 ▪ Tips

rhel8与7的区别

在rhel7上,同时支持network.service和NetworkManager.service(简称NM)。默认情况下,这2个服务都有开启,但许多人都会将NM禁用掉。

在rhel8上,已废弃network.service,因此只能通过NM进行网络配置,包括动态ip和静态ip。换言之,在rhel8上,必须开启NM,否则无法使用网络。

rhel8依然支持network.service,只是默认没安装,详见本文最后的Tips。

NetworkManager介绍

NetworkManager是2004年Red Hat启动的项目,旨在能够让Linux用户更轻松地处理现代网络需求,尤其是无线网络,能自动发现网卡并配置ip地址。

类似在手机上同时开启wifi和蜂窝网络,自动探测可用网络并连接,无需手动切换。

虽然初衷是针对无线网络,但在服务器领域,NM已大获成功。

NM能管理各种网络

▷ 有线网卡、无线网卡 ▷ 动态ip、静态ip ▷ 以太网、非以太网 ▷ 物理网卡、虚拟网卡

使用方法

▷ nmcli:命令行。这是最常用的工具,本文将详细讲解该工具使用。 ▷ nmtui:在shell终端开启文本图形界面。示意图见本文最后的Tips ▷ Freedesktop applet:如GNOME上自带的网络管理工具 ▷ cockpit:redhat自带的基于web图形界面的"驾驶舱"工具,具有dashborad和基础管理功能。示意图见本文最后的Tips

为什么要用NM

▷ 工具齐全:命令行、文本界面、图形界面、web ▷ 广纳天地:纳管各种网络,有线、无线、物理、虚拟 ▷ 参数丰富:多达200多项配置参数(包括ethtool参数) ▷ 一统江湖:RedHat系、Suse系、Debian/Ubuntu系,均支持 ▷ 大势所趋:下一个大版本的rhel只能通过NM管理网络

nmcli使用方法

nmcli使用方法非常类似linux ip命令、cisco交换机命令,并且支持tab补全(详见本文最后的Tips),也可在命令最后通过-h、–help、help查看帮助。在nmcli中有2个命令最为常用:

nmcli connection

译作连接,可理解为配置文件,相当于ifcfg-ethX。可以简写为nmcli c

nmcli dev evice

译作设备,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli dev

在NM里,有2个维度:连接(connection)设备(device),这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即nmcli dev 可以看到的),就是NM纳管的。接着,可以为一个设备配置多个连接(即nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。同一时刻,一个设备只能有一个连接活跃。可以通过nmcli con up切换连接。

connection有2种状态

▷ 活跃(带颜色字体):表示当前该connection生效 ▷ 非活跃(正常字体):表示当前该connection不生效

device有4种常见状态

▷ connected:已被NM纳管,并且当前有活跃的connection ▷ disconnected:已被NM纳管,但是当前没有活跃的connection ▷ unmanaged:未被NM纳管 ▷ unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ethX down)

nmcli常用命令一览

# 查看ip(类似于ifconfig、ip addr)
nmcli

# 创建connection,配置静态ip(等同于配置ifcfg,其中BOOTPROTO=none,并ifup启动)
nmcli con add type ethernet con-name ethX ifname ethX ipv4.addr 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.method manual

# 创建connection,配置动态ip(等同于配置ifcfg,其中BOOTPROTO=dhcp,并ifup启动)
nmcli con add type ethernet con-name ethX ifname ethX ipv4.method auto

# 修改ip(非交互式)
nmcli con modify ethX ipv4.addr '192.168.1.200/24'
nmcli con up ethX

# 修改ip(交互式)
nmcli con edit ethX
nmcli> goto ipv4.addresses
nmcli ipv4.addresses> change
Edit 'addresses' value: 192.168.1.200/24
Do you also want to set 'ipv4.method' to 'manual'? [yes]: yes
nmcli ipv4> save
nmcli ipv4> activate
nmcli ipv4> quit

# 启用connection(相当于ifup)
nmcli con up ethX

# 停止connection(相当于ifdown)
nmcli con down ethX

# 删除connection(类似于ifdown并删除ifcfg)
nmcli con delete ethX

# 查看connection列表
nmcli con show

# 查看connection详细信息
nmcli con show ethX

# 重载所有ifcfg或route到connection(不会立即生效)
nmcli con reload

# 重载指定ifcfg或route到connection(不会立即生效)
nmcli con load /etc/sysconfig/network-scripts/ifcfg-ethX
nmcli con load /etc/sysconfig/network-scripts/route-ethX

# 立即生效connection,有3种方法
nmcli con up ethX
nmcli dev reapply ethX
nmcli dev connect ethX

# 查看device列表
nmcli dev 

# 查看所有device详细信息
nmcli dev  show

# 查看指定device的详细信息
nmcli dev  show ethX

# 激活网卡
nmcli dev connect ethX

# 关闭无线网络(NM默认启用无线网络):radio
nmcli r all off

# 查看NM纳管状态:networking
nmcli n

# 开启NM纳管
nmcli n on

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

# 监听事件:monitor
nmcli m

# 查看NM本身状态
nmcli

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

本文提及的ifcfg均指代/etc/sysconfig/network-scripts/ifcfg-ethX及/etc/sysconfig/network-scripts/route-ethX

nmcli connection重点

nmcli con show

[root@k8s-node01 ~]# nmcli con show
NAME  UUID                                  TYPE      DEVICE 
eth0  cd6bda45-cc72-43e5-b378-66a79cd421a5  ethernet  eth0 

▪ 第一列是connection名字,简称con-name(注意con-name不是网卡名) ▪ 第二列是connection的UUID ▪ 最后一列才是网卡名(标准说法叫device名),可通过nmcil dev查看device

对connection做操作时需要指定标识,标识可以是con-name、UUID、如果存在ifcfg文件则也可以用ifcfg的完整路径,即/etc/sysconfig/network-scripts/ifcfg-ethX

nmcli con show ethX
nmcli con show cae3f1ef-e79a-46c3-8e0c-946b91a65e11
nmcli con show /etc/sysconfig/network-scripts/ifcfg-ethX

nmcli con的con-name

同时对应ifcfg的文件名以及内容中的NAME=,该参数表示连接(connection)的名字,无需和网卡名相同,可以为一个设备(device)创建多个连接,但同一时刻只能有一个连接生效。当有多个连接时候,nmcli con delete删除当前连接,就会自动选择同一个设备的其他连接来顶替生效。可以通过nmcli con up来将指定连接切换生效。

注意:通过nmcli con modify修改con-name,只会对应修改ifcfg文件中的NAME=配置项,而不会更改ifcfg文件名。

nmcli c的ipv4.method

对应ifcfg文件内容的BOOTPROTO,ipv4.method默认为auto,对应在文件中的配置项为BOOTPROTO=dhcp,这种时候如果指定ip,就可能导致网卡同时有dhcp分配的ip和静态ip。设置为manual表示BOOTPROTO=none,即只有静态ip。

例子:创建一个连接(connection)

nmcli con add type ethernet con-name ethX-test ifname ethX 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 con add type -h看到,这里指定为ethernet。 ▪ con-name ethX ifname ethX:第一个ethX表示连接(connection)的名字,这个名字可以任意定义,无需和网卡名相同;第二个ethX表示网卡名,这个ethX必须是在nmcli dev 里能看到的。 ▪ 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就是

# /etc/sysconfig/network-scripts/ifcfg-ethX-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=ethX-test
UUID=9a10ad89-437c-4caa-949c-a394a6d28c8d
DEVICE=ethX
ONBOOT=yes

# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 4.4.4.4

此时,通过nmcli c应该可以看到增加了一条连接

注意:如果这是为ethX创建的第一个连接,则自动生效;如果此时已有连接存在,则该连接不会自动生效,可以执行nmcli con up ethX-test来切换生效

nmcli device重点

nmcli dev connect ethX

由NM对指定网卡进行管理,同时刷新该网卡对应的活跃connection(如果之前有修改过connection配置);如果有connection但是都处于非活跃状态,则自动选择一个connection并将其活跃;如果没有connection,则自动生成一个并将其活跃。

nmcli dev disconnect ethX

让NM暂时不管理指定网卡,此操作不会变更实际网卡的link状态,只会使对应的connection变成非活跃。若重启系统则又会自动connect。另外,如果手工将该网卡的connection全部删掉,该网卡状态也会自动变为disconnected。

nmcli dev reapply ethX

专门用于刷新connection,前提是网卡的device处于connected状态,否则会报错。

nmcli dev set ethX autoconnect yes|no managed yes|no

可以设置是否自动连接和是否自动管理,但经测试只能用于当前开机状态, 如果这2个参数都设置为no,然后重启系统,又会自动恢复成connected和managed yes的状态。所以该命令用途不大。注意事项:如果managed设置为no,那么nmcli con reload会读取配置文件,但是不会立即生效,接着如果执行nmcli con up ethX,就会立即生效,同时managed自动变为yes。

重启系统自动恢复成connected和managed yes的状态,这种逻辑并不实用也不够合理,笔者已将此问题提交给redhat,据回复,这么设计是因为目前没有一个有效的手段来证明“我是我”,比如当网卡重新拔插到其他插槽时候,网卡名有很大可能性会发生变化,因此无法确定关机前设置的是对应开机后的哪个网卡,目前暂无办法解决,笔者将持续跟进。

3种网络配置方法

在讲3种配置方法前,需要先明白ifcfg-XXX和NM connection的关联:虽然network.service被废弃了,但是redhat为了兼容传统的ifcfg,通过NM进行网络配置时候,会自动将connection同步到ifcfg配置文件中。也可以通过nmcli con reload或者nmcli con load /etc/sysconfig/network-scripts/ifcfg-ethX的方式来让NM读取ifcfg配置文件到connection中。因此ifcfg-XXX和connection是一对一的关系,另外上面有提到,connection和device是多对一的关系。

在rhel8上,有3种方法进行网络配置

▷ 1. 手工配置ifcfg,通过NM来生效 ▷ 2. 通过NM自带工具配ip,比如nmcli ▷ 3. 手工配置ifcfg,通过传统network.service来生效

建议:

推荐使用上述第1种网络配置方法(手工配置ifcfg,通过NM生效),因为这样既兼容了传统的ifcfg配置,又能熟悉nmcli。举例:

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
EOF

nmcli con reload
# nmcli con up eth0 # 如果之前没有eth0的connection,则上一步reload后就已经自动生效了

这么做有2个好处:

▷ 按官方建议使用NM而不是network.service ▷ 当还不太熟悉nmcli命令时候,这样最稳妥

Tips

1. nmcli命令支持tab补全,但是需要yum install bash-completion

2. 如果希望NM不要纳管网卡,只有一个办法最彻底最靠谱,就是自己写ifcfg,内容加上NM_CONTROLLED=no,这样该device的状态就会始终保持unmanaged。nmcli con up、nmcli con reload、nmcil c load都不会对其起任何作用。

3. NM只能对link状态为up的网卡进行操作,如果手动ip link set ethX down,那么NM就无法对该网卡做任何操作(即使nmcli dev connect也没有用)。

4. 可以通过yum install network-scripts来安装传统的network.service,不过redhat说了,在下一个rhel的大版本里将彻底废除,因此不建议使用network.service。

5. 手工创建新的ifcfg或者在ifcfg里修改ip等配置,NM不会自动读取,需要手工执行nmcli con reload或者nmcli con load /etc/sysconfig/network-scripts/ifcfg-ethX。这一点可能和其他系统的NM行为不太一样,但这种做法实则更适合服务器。

6. 不手工配置ifcfg,使用默认的dhcp情况下,网卡的增减是不会自动生成ifcfg,此时nmcli con看到的con-name将类似’System ethX’或者’Wired connection 1’。

7. NetworkManager支持3种获取dhcp的方式:dhclient、dhcpcd、internal,当/etc/NetworkManager/NetworkManager.conf配置文件中的[main]部分没配置dhcp=时候,默认使用internal(rhel7/centos7默认是dhclient)。internal是NM内部实现的dhcp客户端。

8. 关于手动指定网关ip的方法,经过实测,/etc/sysconfig/network中的GATEWAY仅在3种情况下有效:NM_CONTROLLED=noipv4.method manual从ipv4.method manual第一次转到ipv4.method auto时候。建议:当NM_CONTROLLED=no时,将网关写在/etc/sysconfig/network(GATEWAY);当使用NM时候,使用nmcli c命令配置网关(比如nmcli con modify ethX ipv4.gateway 192.168.1.1)。

9. NM默认会从dhcp里获取dns信息,并修改/etc/resolv.conf,如果不想让NM管理/etc/resolv.conf,则只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加dns=none即可。

10. 如果想让NM不要自动管理新网卡(比如不要给新网卡获取ip地址),则只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加no-auto-default=*即可,改完后通过systemctl restart NetworkManager或者重启系统来生效。除了手工在NetworkManager.conf里加配置,也可以yum install NetworkManager-config-server,这会生成/usr/lib/NetworkManager/conf.d/00-server.conf,内容为如下截图。建议使用前者方案,因为后者的ingore-carrier是不被推荐的参数。

11. 更多NetworkManager参数详见man NetworkManager.conf

12. nmtui示意图: 基于RHEL8/CentOS8的网络IP配置详解

13. cockpit示意图: 基于RHEL8/CentOS8的网络IP配置详解

在rhel8.0 beta时候,必须要先将浏览器语言设置为英语,才可以使用,如果为中文,在登陆后是空白页面。笔者已将该bug提交给redhat,据回复会在RHEL8.0正式版修复,笔者将持续跟进。