在CentOS系统中,使用nmcli命令激活和停用网络连接是最常用、最高效的网络管理方式。核心操作就两条命令:激活用nmcli connection up 连接名,停用用nmcli connection down 连接名。但实际运维中远不止这么简单,你需要先查看有哪些连接、确认连接状态、处理DHCP和静态IP配置、管理多网卡场景,以及在远程操作时避免把自己锁在外面。下面我把这些全部讲透,从基础到进阶,一篇搞定。
nmcli是什么,为什么CentOS运维必须掌握它
nmcli是NetworkManager命令行工具的缩写。CentOS 7及以后的版本默认使用NetworkManager来管理网络,取代了早期的network服务脚本。nmcli让你不用编辑配置文件就能完成几乎所有网络操作,特别适合在服务器终端、SSH远程会话、自动化脚本中使用。相比直接改/etc/sysconfig/network-scripts/下的ifcfg文件,nmcli更安全、更即时、更不容易出错。
第一步:查看当前所有网络连接
在做任何操作之前,你必须先知道系统里有哪些网络连接。执行以下命令:
nmcli connection show
输出结果类似这样:
NAME UUID TYPE DEVICE ens33 a1b2c3d4-e5f6-7890-abcd-ef1234567890 ethernet ens33 ens37 b2c3d4e5-f6a7-8901-bcde-f12345678901 ethernet ens37
NAME列就是连接名,后面操作都要用到它。DEVICE列是实际网卡设备名。如果你看到某个连接显示"disconnected"状态,说明它当前没有激活。
第二步:激活网络连接
激活一个已有的连接,命令非常直接:
nmcli connection up ens33
如果连接名里有空格,需要用引号括起来:
nmcli connection up "有线连接 1"
激活成功后,你可以用以下命令确认状态:
nmcli connection show ens33
会看到"active"状态。同时用ip addr show ens33可以看到IP地址是否正常获取到了。
如果你想激活所有网络连接,一条命令搞定:
nmcli connection up
第三步:停用网络连接
停用连接同样简单:
nmcli connection down ens33
停用后该连接会断开,IP地址释放。如果你只想断开某个设备而不是整个连接,可以用:
nmcli device disconnect ens33
两者区别在于:connection down是把整个连接配置停掉,device disconnect只是断开当前设备的物理链路,连接配置还在。运维场景中,如果你要更换网线或重启网卡驱动,用device disconnect更合适;如果要彻底关闭某个网络接口的使用,用connection down。
第四步:创建新的网络连接并激活
有时候系统里没有你需要的连接,或者你要新增一个。创建DHCP自动获取IP的连接:
nmcli connection add type ethernet con-name "my-dhcp" ifname ens33
创建静态IP的连接:
nmcli connection add type ethernet con-name "my-static" ifname ens33 \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8 8.8.4.4" \ ipv4.method manual
创建完直接激活:
nmcli connection up "my-static"
这里要注意,ipv4.method manual表示手动配置静态IP,如果是DHCP就用auto。子网掩码用CIDR格式/24表示255.255.255.0。
第五步:修改已有连接的配置
不需要删除重建,nmcli支持直接修改。比如把DHCP改成静态IP:
nmcli connection modify ens33 ipv4.addresses 192.168.1.100/24
nmcli connection modify ens33 ipv4.gateway 192.168.1.1
nmcli connection modify ens33 ipv4.dns "8.8.8.8"
nmcli connection modify ens33 ipv4.method manual
修改完需要重新激活才生效:
nmcli connection down ens33
nmcli connection up ens33
或者一条命令搞定:
nmcli connection up ens33
第六步:远程操作的安全注意事项
这是运维中最容易踩坑的地方。如果你通过SSH远程管理服务器,执行nmcli connection down停用了当前正在使用的连接,你会直接断开,而且无法重新连接。正确做法是:
第一,操作前确认当前使用的是哪个连接:
nmcli -t -f DEVICE,STATE device status
第二,如果要停用某个非当前连接的接口,先确认不会影响自己:
nmcli connection show
第三,最保险的做法是用screen或tmux开一个会话,或者确保你有带外管理(IPMI、iLO、iDRAC)可以在断网后重新接入。
第四,如果你确实需要停用当前连接再激活,可以写一个延时脚本:
nmcli connection down ens33 && sleep 5 && nmcli connection up ens33
这样给自己留5秒的缓冲时间,但仍然有风险,不推荐在生产环境使用。
第七步:管理多网卡和绑定场景
服务器通常有多块网卡。查看所有设备状态:
nmcli device status
输出会显示每个设备的状态(connected、disconnected、unavailable)。如果你有bond绑定接口,查看方式:
nmcli connection show bond0
激活bond:
nmcli connection up bond0
停用bond:
nmcli connection down bond0
如果bond下的从属接口需要单独管理,可以查看:
nmcli -f NAME,SLAVE-TYPE connection show
第八步:查看详细连接信息和排错
当网络出问题时,你需要看详细信息:
nmcli connection show ens33
这会显示IP、网关、DNS、MAC地址等全部信息。如果想看某个连接的完整配置:
nmcli connection show "my-static"
如果IP没有获取到,先检查DHCP是否正常:
nmcli device show ens33 | grep IP4
如果显示没有IP4.ADDRESS,说明DHCP失败或者静态配置有误。这时候可以尝试重新触发:
nmcli connection down ens33
nmcli connection up ens33
或者强制重新获取DHCP:
dhclient -r ens33
dhclient ens33
第九步:删除不需要的连接
系统用久了会积累很多废弃连接,清理掉保持整洁:
nmcli connection delete "old-connection"
删除前先确认不是正在使用的连接。批量删除可以结合grep:
nmcli connection show | grep "disconnected" | awk '{print $1}' | xargs -I {} nmcli connection delete {}
这条命令会删除所有处于disconnected状态的连接,操作前务必确认。
第十步:nmcli与传统network服务的关系
CentOS 7/8/9默认使用NetworkManager。如果你的系统还在用老的network服务,两者会冲突。检查当前网络管理服务:
systemctl status NetworkManager
systemctl status network
如果两个都在运行,建议关闭network服务:
systemctl stop network
systemctl disable network
然后重启NetworkManager:
systemctl restart NetworkManager
这样nmcli才能正常管理所有连接,不会出现"设备由其他进程管理"的报错。
实用技巧总结
在日常CentOS运维中,nmcli是你必须熟练掌握的工具。几个高频使用场景归纳一下:服务器重启后网络没起来,用nmcli connection up激活;更换IP配置,用modify修改后重启连接;新装系统配置网络,用add创建新连接;排查网络故障,用show和device status定位问题。把这些命令记熟,配合tab自动补全,效率会非常高。nmcli的优势在于所有操作都是即时生效的,不需要重启网络服务,这在生产环境中尤其重要,因为重启网络服务意味着所有连接中断。
最后提醒一点,nmcli的操作本质上是在修改/etc/NetworkManager/system-connections/下的配置文件。如果你习惯直接编辑文件,也可以,但nmcli提供了更安全的抽象层,避免了格式错误导致网络瘫痪的风险。对于CentOS运维人员来说,掌握nmcli不是可选项,而是基本功。
