基于RHEL8CentOS8的⽹络IP配置详解
➡在rhel8(含centos8)上,没有传统的network.service,在/etc/sysconfig/network-scripts/⾥也看不到任何脚本⽂件,那么该如何进⾏⽹络配置呢。
➡本⽂详细阐述基于rhel8的⽹络配置,包含多种配置⽅法。
➡事先声明:本⽂提及的所有内容,仅适⽤rhel8/centos8,因为不同linux系统的NetworkManager⾏为存在部分差异。
⼩慢哥的原创⽂章,欢迎转载
⽬录
▪ rhel8与7的区别
▪ NetworkManager介绍论坛模板下载网站
▪ nmcli使⽤⽅法
▪ nmcli常⽤命令⼀览
▪ nmcli connection重点
▪ nmcli device重点
▪ 3种⽹络配置⽅法
▪ Tips
rhel8与7的区别
在rhel7上,同时⽀持network.service和NetworkManager.service(简称NM)。默认情况下,这2个服务都有开启,但许多⼈都会将NM禁⽤掉。
在rhel8上,已废弃network.service,因此只能通过NM进⾏⽹络配置,包括动态ip和静态ip。换⾔之,在rhel8上,必须开启NM,否则⽆法使⽤⽹络。
汇编语言in和out指令
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 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 ethX down)
nmcli常⽤命令⼀览
# 查看ip(类似于ifconfig、ip addr)
nmcli
# 创建connection,配置静态ip(等同于配置ifcfg,其中BOOTPROTO=none,并ifup启动)
nmcli c add type ethernet con-name ethX ifname ethX ipv4.addr 192.168.1.100/24 ipv4.gateway 192.168.1.hod manual
# 创建connection,配置动态ip(等同于配置ifcfg,其中BOOTPROTO=dhcp,并ifup启动)
nmcli c add type ethernet con-name ethX ifname hod auto
# 修改ip(⾮交互式)
nmcli c modify ethX ipv4.addr '192.168.1.200/24'
nmcli c up ethX
# 修改ip(交互式)
nmcli c edit ethX
nmcli> goto ipv4.addresses
nmcli ipv4.addresses> change
Edit 'addresses' value: 192.168.1.200/24
Do you also want to set 'hod' to 'manual'? [yes]: yes
nmcli ipv4> save
nmcli ipv4> activate
nmcli ipv4> quit
# 启⽤connection(相当于ifup)
nmcli c up ethX
# 停⽌connection(相当于ifdown)
nmcli c down
# 删除connection(类似于ifdown并删除ifcfg)
nmcli c delete ethX
# 查看connection列表
nmcli c show
# 查看connection详细信息
nmcli c show ethX
# 重载所有ifcfg或route到connection(不会⽴即⽣效)
nmcli c reload
# 重载指定ifcfg或route到connection(不会⽴即⽣效)
nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX
nmcli c load /etc/sysconfig/network-scripts/route-ethX
# ⽴即⽣效connection,有3种⽅法
nmcli c up ethX
nmcli d reapply ethX
nmcli d connect ethX
# 查看device列表
nmcli d
# 查看所有device详细信息
nmcli d show
# 查看指定device的详细信息
nmcli d show ethX
# 激活⽹卡
nmcli d connect ethX
# 关闭⽆线⽹络(NM默认启⽤⽆线⽹络)
nmcli r all off
# 查看NM纳管状态
nmcli n
# 开启NM纳管
nmcli n on
# 关闭NM纳管(谨慎执⾏)
nmcli n off
python正则表达式验证邮箱
# 监听事件
nmcli m
# 查看NM本⾝状态
nmcli
# 检测NM是否在线可⽤
nm-online
本⽂提及的ifcfg均指代/etc/sysconfig/network-scripts/ifcfg-ethX及/etc/sysconfig/network-scripts/route-ethX
nmcli connection重点
➡ nmcli c show
▪第⼀列是connection名字,简称con-name(注意con-name不是⽹卡名)
▪第⼆列是connection的UUID
▪最后⼀列才是⽹卡名(标准说法叫device名),可通过nmcil d查看device
对connection做操作时需要指定标识,标识可以是con-name、UUID、如果存在ifcfg⽂件则也可以⽤ifcfg的完整路径,即/etc/sysconfig/network-scripts/ifcfg-ethX
nmcli c show ethX
nmcli c show cae3f1ef-e79a-46c3-8e0c-946b91a65e11
nmcli c show /etc/sysconfig/network-scripts/ifcfg-ethX
➡ nmcli c的con-name
同时对应ifcfg的⽂件名以及内容中的NAME=,该参数表⽰连接(connection)的名字,⽆需和⽹卡名相同,可以为⼀个设备(device)创建多个连接,但同⼀时刻只能有⼀个连
接⽣效。当有多个连接时候,nmcli c delete删除当前连接,就会⾃动选择同⼀个设备的其他连接来顶替⽣效。可以通过nmcli c up来将指定连接切换⽣效。
注意:通过nmcli c modify修改con-name,只会对应修改ifcfg⽂件中的NAME,⽽不会更改ifcfg⽂件名。
➡ nmcli c的hod
对应ifcfg⽂件内容的BOOTPROTO,hod默认为auto,对应为BOOTPROTO=dhcp,这种时候如果指定ip,就可能导致⽹卡同时有dhcp分配的ip和静态ip。设置为
manual表⽰BOOTPROTO=none,即只有静态ip。
例⼦:创建⼀个连接(connection)
nmcli c add type ethernet con-name ethX-test ifname ethX ipv4.addresses '192.168.1.100/24,192.168.1.101/32' utes '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' hod ▪ type ethernet:创建连接时候必须指定类型,类型有很多,可以通过nmcli c add type -h看到,这⾥指定为ethernet。
▪ con-name ethX ifname ethX:第⼀个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
▪ hod 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
centos和ubuntuUUID=9a10ad89-437c-4caa-949c-a394a6d28c8d
DEVICE=ethX
ONBOOT=yes
# /f
nameserver 8.8.8.8
nameserver 4.4.4.4
此时,通过nmcli c应该可以看到增加了⼀条连接
注意:如果这是为ethX创建的第⼀个连接,则⾃动⽣效;如果此时已有连接存在,则该连接不会⾃动⽣效,可以执⾏nmcli c up ethX-test来切换⽣效
nmcli device重点
➡ nmcli d connect ethX子程序调用编程序例子铣床
由NM对指定⽹卡进⾏管理,同时刷新该⽹卡对应的活跃connection(如果之前有修改过connection配置);如果有connection但是都处于⾮活跃状态,则⾃动选择⼀个connection并将其活跃;如果没有connection,则⾃动⽣成⼀个并将其活跃。
➡ nmcli d disconnect ethX
让NM暂时不管理指定⽹卡,此操作不会变更实际⽹卡的link状态,只会使对应的connection变成⾮活跃。若重启系统则⼜会⾃动connect。另外,如果⼿⼯将该⽹卡的connection 全部删掉,该⽹卡状态也会⾃动变为disconnected。
➡ nmcli d reapply ethX
专门⽤于刷新connection,前提是⽹卡的device处于connected状态,否则会报错。
➡ nmcli d set ethX autoconnect yes|no managed yes|no
可以设置是否⾃动连接和是否⾃动管理,但经测试只能⽤于当前开机状态,如果这2个参数都设置为no,然后重启系统,⼜会⾃动恢复成connected和managed yes的状态。所以该命令⽤途不⼤。注意事项:如果managed设置为no,那么nmcli c reload会读取配置⽂件,但是不会⽴即⽣效,接着如果执⾏nmcli c up ethX,就会⽴即⽣效,同时managed⾃动变为yes。
重启系统⾃动恢复成connected和managed yes的状态,这种逻辑并不实⽤也不够合理,笔者已将此问题提交给redhat,据回复,这么设计是因为⽬前没有⼀个有效的⼿段来证明“我是我”,⽐如当⽹卡重新拔插到其他插槽时候,⽹卡名有很⼤可能性会发⽣变化,因此⽆法确定关机前设置的是对应开机后的哪个⽹卡,⽬前暂⽆办法解决,笔者将持续跟进。
3种⽹络配置⽅法
在讲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是多对⼀的关系。
在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 c reload
# nmcli c 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 c up、nmcli c reload、nmcil c load都不会对其起任何作⽤。
➡ 3. NM只能对link状态为up的⽹卡进⾏操作,如果⼿动ip link set ethX down,那么NM就⽆法对该⽹卡做任何操作(即使nmcli d connect也没有⽤)。
➡ 4. 可以通过yum install network-scripts来安装传统的network.service,不过redhat说了,在下⼀个rhel的⼤版本⾥将彻底废除,因此不建议使⽤network.service。
➡ 5. ⼿⼯创建新的ifcfg或者在ifcfg⾥修改ip等配置,NM不会⾃动读取,需要⼿⼯执⾏nmcli c reload或者nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX。这⼀点可能和其他系统的NM ⾏为不太⼀样,但这种做法实则更适合服务器。
➡ 6. 不⼿⼯配置ifcfg,使⽤默认的dhcp情况下,⽹卡的增减是不会⾃动⽣成ifcfg,此时nmcli c看到的con-name将类似'System ethX'或者'Wired connection 1'。
➡ 7. NetworkManager⽀持3种获取dhcp的⽅式:dhclient、dhcpcd、internal,当/etc/f配置⽂件中的[main]部分没配置dhcp=时候,默认使⽤internal(rhel7/centos7默认是dhclient)。internal是NM内部实现的dhcp客户端。
➡ 8. 关于⼿动指定⽹关ip的⽅法,经过实测,/etc/sysconfig/network中的GATEWAY仅在3种情况下有效:NM_CONTROLLED=no或hod manual或从hod manual第⼀次转到hod auto时候。建议:当NM_CONTROLLED=no时,将⽹关写在/etc/sysconfig/network(GATEWAY);当使⽤NM时候,使⽤nmcli c命令配置⽹关(⽐如nmcli c modify ethX ipv4.gateway 192.168.1.1)。
➡ 9. NM默认会从dhcp⾥获取dns信息,并修改/f,如果不想让NM管理/f,则只需在/etc/f⾥的[main]⾥增
加dns=none即可。
➡ 10. 如果想让NM不要⾃动管理新⽹卡(⽐如不要给新⽹卡获取ip地址),则只需在/etc/f⾥的[main]⾥增加no-auto-default=*即可,改完后通过systemctl restart NetworkManager或者重启系统来⽣效。除了⼿⼯在f⾥加配置,也可以yum install NetworkManager-config-server,这会⽣
成/usr/lib/NetworkManager/conf.f,内容为如下截图。建议使⽤前者⽅案,因为后者的ingore-carrier是不被推荐的参数。
➡ 11. 更多NetworkManager参数详见f
➡ 12. nmtui⽰意图:
➡ 13. cockpit⽰意图:
在rhel8.0 beta时候,必须要先将浏览器语⾔设置为英语,才可以使⽤,如果为中⽂,在登陆后是空⽩页⾯。笔者已将该提交给redhat,据回复会在RHEL8.0正式版修复,笔者将持续跟进。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。