在CentOS系统中,nmcli是NetworkManager命令行工具的核心组件,它能让你在终端里直接管理网络连接、查看配置、修改IP地址、DNS、网关等关键参数,而不需要手动编辑那些容易出错的配置文件。说白了,nmcli就是CentOS 7/8/9系列里替代传统ifconfig和手动改文件的现代网络管理方式。你想查看当前所有连接,一条命令nmcli connection show就搞定;你想修改某个连接的静态IP,nmcli connection modify直接改;你想让配置文件生效,nmcli connection up激活即可。整个过程不需要重启网络服务,不需要手写ifcfg-eth0文件,效率高且不容易出错。
很多运维人员习惯了手动编辑/etc/sysconfig/network-scripts/ifcfg-xxx文件,但在CentOS 8和CentOS Stream 9中,NetworkManager已经成为默认的网络管理后端,传统的network服务被逐步弃用。这时候nmcli就不是可选项,而是必选项。掌握nmcli,等于掌握了CentOS网络配置的命脉。
nmcli是NetworkManager的前端CLI工具。NetworkManager本身是一个后台守护进程,负责监控和管理所有网络设备。nmcli通过D-Bus与NetworkManager通信,把你输入的命令翻译成NetworkManager能理解的操作。它管理的对象叫"connection"(连接),每个connection对应一个配置文件,通常存放在/etc/NetworkManager/system-connections/目录下,文件扩展名为.nmconnection。
和传统的ifcfg文件不同,nmconnection文件是key-value格式的INI风格文件,结构清晰,字段明确。比如一个典型的静态IP连接文件内容如下:
[connection] id=eth0-static type=ethernet interface-name=eth0 [ipv4] method=manual address1=192.168.1.100/24 gateway=192.168.1.1 dns=8.8.8.8;8.8.4.4 [ipv6] method=disabled
你会发现,这种格式比传统ifcfg文件更易读,字段含义一目了然。nmcli生成的配置文件就是这种结构,你也可以手动编辑它,但强烈建议通过nmcli命令来操作,避免格式错误导致连接失败。
查看当前网络连接状态运维第一步永远是看现状。用nmcli查看连接列表:
nmcli connection show
这条命令会列出所有已配置的连接,包括连接名称、UUID、类型、设备、是否激活等信息。如果你只想看当前激活的连接:
nmcli connection show --active
查看某个具体连接的详细配置:
nmcli connection show "eth0-static"
查看网络设备状态:
nmcli device status
查看某个设备的详细信息:
nmcli device show eth0
这些命令是日常巡检的基础,建议写进你的运维脚本里定期执行。
创建新的网络连接用nmcli创建连接非常直观。创建一个静态IP的以太网连接:
nmcli connection add type ethernet con-name "eth0-static" ifname eth0 \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8 8.8.4.4" \ ipv4.dns-search "example.com" \ autoconnect yes
参数解释:type指定连接类型为以太网;con-name是连接名称,方便识别;ifname指定绑定的网卡;ipv4.method manual表示手动配置IP;ipv4.addresses写IP和掩码;ipv4.gateway写网关;ipv4.dns写DNS服务器;autoconnect yes表示开机自动连接。
如果是DHCP自动获取IP,更简单:
nmcli connection add type ethernet con-name "eth0-dhcp" ifname eth0 \ ipv4.method auto \ autoconnect yes
创建完成后,激活连接:
nmcli connection up "eth0-static"
如果设备已经在用,需要先断开旧连接:
nmcli connection down "eth0-dhcp"修改已有连接的配置
实际运维中更多场景是修改现有配置。比如把DHCP改成静态IP:
nmcli connection modify "eth0-dhcp" \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8"
修改完成后必须重新激活才能生效:
nmcli connection up "eth0-dhcp"
如果你只想改DNS,不影响IP:
nmcli connection modify "eth0-static" ipv4.dns "114.114.114.114 223.5.5.5"
删除某个连接:
nmcli connection delete "eth0-dhcp"
注意,删除连接会同时删除对应的nmconnection配置文件,操作前务必确认。
nmcli管理配置文件的存放位置前面提到,nmcli生成的配置文件存放在/etc/NetworkManager/system-connections/目录。你可以直接查看:
ls -la /etc/NetworkManager/system-connections/
每个.nmconnection文件就是一个连接的完整配置。这些文件的权限通常是600,只有root可读写,这是安全设计。如果你需要备份所有网络配置:
cp -r /etc/NetworkManager/system-connections/ /backup/network-configs/
在CentOS 8/9中,传统的/etc/sysconfig/network-scripts/ifcfg-xxx文件仍然可以被NetworkManager读取,但官方推荐使用nmconnection文件。如果你的系统里两种文件都有,NetworkManager优先读取nmconnection文件,忽略ifcfg文件。这是很多人踩坑的地方——改了ifcfg文件发现不生效,原因就在这里。
在服务器数量多的场景下,手动一条条敲命令不现实。nmcli支持批量操作和脚本化。比如批量修改多台服务器的DNS:
#!/bin/bash for conn in $(nmcli -t -f NAME connection show | grep ethernet); do nmcli connection modify "$conn" ipv4.dns "114.114.114.114" nmcli connection up "$conn" done
这个脚本会遍历所有以太网连接,统一修改DNS并激活。实际使用时要根据环境调整判断条件。
导出所有连接配置为备份:
nmcli connection export > /backup/network-backup.txt
从备份恢复:
nmcli connection import < /backup/network-backup.txt
这两条命令在迁移服务器或灾难恢复时非常有用。
nmcli与传统network服务的冲突处理在CentOS 7中,你可能同时装了NetworkManager和network服务。两者会冲突,导致网络不稳定。解决方法是二选一:要么用NetworkManager(推荐),要么用network服务。如果选择NetworkManager:
systemctl stop network systemctl disable network systemctl enable NetworkManager systemctl start NetworkManager
如果选择network服务:
systemctl stop NetworkManager systemctl disable NetworkManager systemctl enable network systemctl start network
在CentOS 8/9中,NetworkManager是默认且唯一推荐的方案,network服务已经被标记为弃用。不要试图在新系统上同时运行两者,这是运维大忌。
常见问题排查技巧nmcli连接失败时,第一步查看日志:
journalctl -u NetworkManager -f
实时跟踪NetworkManager日志,能看到具体哪一步出错。第二步检查设备是否被识别:
nmcli device status
如果设备显示"unmanaged",说明NetworkManager没有接管这个设备,需要在配置中排除或添加:
nmcli device set eth0 managed yes
如果IP冲突,可以用nmcli查看当前IP:
nmcli -f ipv4.addresses connection show "eth0-static"
还有一个实用技巧:nmcli支持Tab补全,输入nmcli connection后按Tab,会列出所有子命令,大幅提升效率。
在使用Ansible、Puppet等自动化工具管理CentOS服务器时,nmcli命令是网络配置模块的核心。Ansible的nmcli模块可以直接调用nmcli命令来管理连接,比手写模板文件更可靠。例如Ansible任务:
- name: Configure static IP with nmcli
nmcli:
conn_name: eth0-static
type: ethernet
ifname: eth0
ip4: 192.168.1.100/24
gw4: 192.168.1.1
dns4:
- 8.8.8.8
- 8.8.4.4
state: present
这种方式幂等性好,重复执行不会出错,是生产环境推荐的做法。
总结与最佳实践nmcli是CentOS网络管理的现代化工具,它把复杂的网络配置简化成了一条条清晰的命令。核心要点记住三条:第一,CentOS 8/9必须用nmcli,不要再依赖ifcfg文件;第二,所有修改后必须用nmcli connection up激活才生效;第三,配置文件在/etc/NetworkManager/system-connections/,定期备份。掌握这些,你的CentOS网络运维就能做到快速、准确、可追溯。
最后提醒一点,nmcli的版本不同,支持的参数可能有差异。CentOS 7的nmcli版本较老,部分参数不支持;CentOS 8/9的nmcli功能更完整。建议在操作前用nmcli --version确认版本,查阅对应版本的man手册man nmcli获取完整参数说明。
