详解Centos8 配置静态IP的实现

安装centos 8之后 , 重启启动网络时 , 会出现以下报错
报错信息如下:

Failed to start network.service: Unit network.service not found.
意思为无法重启网络服务 , 原因是无法找到network.service网络服务 。
在rhel8(含centos8)上 , 在/etc/sysconfig/network-scripts/里也看不到任何脚本文件 , 没有传统的network.service 。因此只能通过其它方法进行网络配置 , 包括NM命令工具集 。换言之 , 在rhel8上 , 必须开启NM , 否则无法使用网络 。
手动配置静态IP
cat /etc/sysconfig/network-scripts/ifcfg-ens32TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens32UUID=066b4926-b40c-4c28-a5b4-2310d2b96613DEVICE=ens32ONBOOT=yesIPADDR=192.168.1.200NETMASK=255.255.255.0GATEWAY=192.168.1.254DNS1=223.5.5.5PREFIX=24使用nmcli重新回载网络配置
nmcli c reload
查看
nmcli cNAME UUIDTYPE DEVICEens32 066b4926-b40c-4c28-a5b4-2310d2b96613 ethernet ens32补充nmcli命令
nmcli使用方法
nmcli使用方法非常类似linux ip命令、cisco交换机命令 , 并且支持tab补全(详见本文最后的Tips) , 也可在命令最后通过-h、--help、help查看帮助 。
nmcli --helpUsage: nmcli [OPTIONS] OBJECT { COMMAND | help } OPTIONS-o[verview] overview mode (hide default values)-t[erse] terse output-p[retty] pretty output-m[ode] tabular|multiline output mode-c[olors] auto|yes|no whether to use colors in output-f[ields] |all|common specify fields to output-g[et-values] |all|common shortcut for -m tabular -t -f-e[scape] yes|no escape columns separators in values-a[sk] ask for missing parameters-s[how-secrets] allow displaying passwords-w[ait]set timeout waiting for finishing operations-v[ersion] show program version-h[elp] print this help OBJECTg[eneral] NetworkManager's general status and operationsn[etworking] overall networking controlr[adio] NetworkManager radio switchesc[onnection] NetworkManager's connectionsd[evice] devices managed by NetworkManagera[gent] NetworkManager secret agent or polkit agentm[onitor] monitor NetworkManager changes在nmcli中有2个命令最为常用:
nmcli connection
译作连接 , 可理解为配置文件 , 相当于ifcfg-ethX 。可以简写为nmcli c
nmcli device
译作设备 , 可理解为实际存在的网卡(包括物理网卡和虚拟网卡) 。可以简写为nmcli d
在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 ens32 down) 
nmcli常用命令一览
# 查看ip(类似于ifconfig、ip addr)nmcli # 创建connection , 配置静态ip(等同于配置ifcfg , 其中BOOTPROTO=none , 并ifup启动)nmcli c add type ethernet con-name ens32 ifname ens32 ipv4.addr 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.method manual # 创建connection , 配置动态ip(等同于配置ifcfg , 其中BOOTPROTO=dhcp , 并ifup启动)nmcli c add type ethernet con-name ens32 ifname ens32 ipv4.method auto# 修改ip(非交互式)nmcli c modify ens32 ipv4.addr '192.168.1.200/24'nmcli c up ens32# 修改ip(交互式)nmcli c edit ens32nmcli> goto ipv4.addressesnmcli ipv4.addresses> changeEdit 'addresses' value: 192.168.1.200/24Do you also want to set 'ipv4.method' to 'manual'? [yes]: yesnmcli ipv4> savenmcli ipv4> activatenmcli ipv4> quit# 启用connection(相当于ifup)nmcli c up ens32# 停止connection(相当于ifdown)nmcli c down# 删除connection(类似于ifdown并删除ifcfg)nmcli c delete ens32# 查看connection列表nmcli c show【详解Centos8 配置静态IP的实现】# 查看connection详细信息nmcli c show ens32# 重载所有ifcfg或route到connection(不会立即生效)nmcli c reload# 重载指定ifcfg或route到connection(不会立即生效)nmcli c load /etc/sysconfig/network-scripts/ifcfg-ens32nmcli c load /etc/sysconfig/network-scripts/route-ens32# 立即生效connection , 有3种方法nmcli c up ens32nmcli d reapply ens32nmcli d connect ens32 # 查看device列表nmcli d# 查看所有device详细信息nmcli d show# 查看指定device的详细信息nmcli d show ens32# 激活网卡nmcli d connect ens32# 关闭无线网络(NM默认启用无线网络)nmcli r all off# 查看NM纳管状态nmcli n# 开启NM纳管nmcli n on# 关闭NM纳管(谨慎执行)nmcli n off# 监听事件nmcli m# 查看NM本身状态nmcli# 检测NM是否在线可用nm-online提及的ifcfg均指代/etc/sysconfig/network-scripts/ifcfg-ens32及/etc/sysconfig/network-scripts/route-ens32
nmcli connection重点
nmcli c showNAME UUID TYPE DEVICEens32 066b4926-b40c-4c28-a5b4-2310d2b96613 ethernet ens32
  • 第一列是connection名字 , 简称con-name(注意con-name不是网卡名)
  • 第二列是connection的UUID
  • 最后一列才是网卡名(标准说法叫device名) , 可通过nmcil d查看device 
对connection做操作时需要指定标识 , 标识可以是con-name、UUID、如果存在ifcfg文件则也可以用ifcfg的完整路径 , 即/etc/sysconfig/network-scripts/ifcfg-ens32
nmcli c show ens32nmcli c show cae3f1ef-e79a-46c3-8e0c-946b91a65e11nmcli c show /etc/sysconfig/network-scripts/ifcfg-ens32nmcli c的con-name
同时对应ifcfg的文件名以及内容中的NAME= , 该参数表示连接(connection)的名字 , 无需和网卡名相同 , 可以为一个设备(device)创建多个连接 , 但同一时刻只能有一个连接生效 。当有多个连接时候 , nmcli c delete删除当前连接 , 就会自动选择同一个设备的其他连接来顶替生效 。可以通过nmcli c up来将指定连接切换生效 。
注意:通过nmcli c 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 c add type ethernet con-name ens32-test ifname ens32 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 ens32 ifname ens32:第一个ethX表示连接(connection)的名字 , 这个名字可以任意定义 , 无需和网卡名相同;第二个ethX表示网卡名 , 这个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就是
# /etc/sysconfig/network-scripts/ifcfg-ens32-testTYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=noneIPADDR=192.168.1.100PREFIX=24IPADDR1=192.168.1.101PREFIX1=32GATEWAY=192.168.1.254DNS1=8.8.8.8DNS2=4.4.4.4DEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens32-testUUID=9a10ad89-437c-4caa-949c-a394a6d28c8dDEVICE=ens32ONBOOT=yes # /etc/resolv.confnameserver 8.8.8.8nameserver 4.4.4.4此时 , 通过nmcli c应该可以看到增加了一条连接
注意:如果这是为ethX创建的第一个连接 , 则自动生效;如果此时已有连接存在 , 则该连接不会自动生效 , 可以执行nmcli c up ethX-test来切换生效
nmcli device重点
nmcli d connect ens32
由NM对指定网卡进行管理 , 同时刷新该网卡对应的活跃connection(如果之前有修改过connection配置);如果有connection但是都处于非活跃状态 , 则自动选择一个connection并将其活跃;如果没有connection , 则自动生成一个并将其活跃 。
nmcli d disconnect ens32
让NM暂时不管理指定网卡 , 此操作不会变更实际网卡的link状态 , 只会使对应的connection变成非活跃 。若重启系统则又会自动connect 。另外 , 如果手工将该网卡的connection全部删掉 , 该网卡状态也会自动变为disconnected 。
nmcli d reapply ens32
专门用于刷新connection , 前提是网卡的device处于connected状态 , 否则会报错 。
nmcli d set ens32 autoconnect yes|no managed yes|no
可以设置是否自动连接和是否自动管理 , 但经测试只能用于当前开机状态 ,  如果这2个参数都设置为no , 然后重启系统 , 又会自动恢复成connected和managed yes的状态 。所以该命令用途不大 。注意事项:如果managed设置为no , 那么nmcli c reload会读取配置文件 , 但是不会立即生效 , 接着如果执行nmcli c up ethX , 就会立即生效 , 同时managed自动变为yes 。
以上就是本文的全部内容 , 希望对大家的学习有所帮助 , 也希望大家多多支持考高分网 。