「服务器换机房了网卡要改成静态 IP」「虚拟机克隆后默认路由不见了」——网络配置是运维最基础也最容易翻车的操作。麻烦在于 Linux 没有统一的配置方式ip命令即时生效但重启就丢netplan、ifcfg、nmcli各管一派发行版之间还不一样。这一篇把四种主流方式讲清楚并给出 Ubuntu 与 CentOS/Rocky 的完整静态 IP 配置示例。一、四种配置方式概览先建立全景知道每种方式何时用方式持久化发行版特点ip否重启丢失通用临时调试、快速生效nmcli是通用有 NM命令行管理 NetworkManagernetplan是Ubuntu 18.04YAML 配置底层调 NM 或 systemd-networkdifcfg是CentOS/RHEL 传统文本文件 systemctl restart network选择建议临时改动用ipUbuntu 用netplanCentOS/Rocky 用nmcli或ifcfg桌面/有 NetworkManager 的一律nmcli最顺手。二、ip 命令即时的临时配置ip属于iproute2改完立即生效但重启或网络服务重载后丢失。适合排障时临时验证。添加/删除 IP# 给 eth0 加一个 IP sudo ip addr add 192.168.1.100/24 dev eth0 # 删除 sudo ip addr del 192.168.1.100/24 dev eth0 # 查看 ip addr show eth0启用/禁用网卡sudo ip link set eth0 up sudo ip link set eth0 down临时改网关和路由# 添加默认网关 sudo ip route add default via 192.168.1.1 dev eth0 # 删除默认网关 sudo ip route del default # 添加静态路由去 10.10.0.0/16 走 192.168.1.2 sudo ip route add 10.10.0.0/16 via 192.168.1.2⚠️ ip 命令的「即时性」陷阱sudo ip addr add 192.168.1.100/24 dev eth0 # 重启网络服务后这个 IP 就没了想持久化必须写进配置文件。ip只适合「先加上试试通了再固化」。三、nmcliNetworkManager 命令行现代发行版Ubuntu Desktop/Server、CentOS 8/Rocky大多用NetworkManagerNM管理网络。nmcli是它的命令行前端配置会持久保存到/etc/NetworkManager/system-connections/。查看连接nmcli connection showNAME UUID TYPE DEVICE eth0 3f8b... ethernet eth0NAME是连接名不一定等于网卡名后续操作都用它或 UUID。查看设备状态nmcli device statusDEVICE TYPE STATE CONNECTION eth0 ethernet connected eth0 lo loopback unmanaged --配置静态 IPsudo nmcli connection modify eth0 \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 223.5.5.5 8.8.8.8 # 重新激活连接使配置生效 sudo nmcli connection up eth0配置 DHCP自动获取sudo nmcli connection modify eth0 ipv4.method auto sudo nmcli connection up eth0新增一个连接sudo nmcli connection add type ethernet con-name static-eth0 ifname eth0 \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1其他常用操作nmcli connection show eth0 # 看某连接的详细配置 nmcli device connect eth0 # 连接设备 nmcli device disconnect eth0 # 断开 nmcli general status # 总体状态nmcli的优点是改完自动持久化不用记文件格式是 CentOS/Rocky 8 的推荐方式。四、netplanUbuntu 的新方式Ubuntu 17.10 起引入netplan用 YAML 描述网络底层渲染成 NetworkManager 或 systemd-networkd 的配置。配置文件在/etc/netplan/。查看现有配置ls /etc/netplan/ cat /etc/netplan/01-netcfg.yaml配置静态 IPsystemd-networkd 后端sudo vim /etc/netplan/01-netcfg.yamlnetwork: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 8.8.8.8]应用配置sudo netplan apply配置 DHCPnetwork: version: 2 renderer: networkd ethernets: eth0: dhcp4: yes⚠️ netplan 的两个大坑YAML 缩进必须用空格不能用 Tab。缩进错了netplan apply会报解析错误。netplan try是安全网sudo netplan try它应用配置后等待确认如果断网了比如你远程改错了120 秒后自动回滚。远程改网络配置务必用netplan try别用apply直接梭哈。新旧配置文件名规律文件按名字字典序加载数字前缀控制优先级01-、50-、99-等后面的覆盖前面的同名设置五、ifcfgCentOS/RHEL 传统方式老牌 RHEL/CentOS 7 及之前的配置方式文件在/etc/sysconfig/network-scripts/文件名ifcfg-网卡名。配置静态 IPsudo vim /etc/sysconfig/network-scripts/ifcfg-eth0TYPEEthernet BOOTPROTOstatic NAMEeth0 DEVICEeth0 ONBOOTyes IPADDR192.168.1.100 PREFIX24 GATEWAY192.168.1.1 DNS1223.5.5.5 DNS28.8.8.8关键字段字段说明BOOTPROTOstatic/dhcp/noneONBOOT开机是否启用必须是yesIPADDR/PREFIXIP 和掩码位数GATEWAY默认网关DNS1/DNS2DNS应用配置# CentOS 7 sudo systemctl restart network # CentOS 8/Rockynetwork 服务被 NM 取代 sudo nmcli connection reload sudo nmcli connection up eth0 # 或 sudo systemctl restart NetworkManager⚠️ CentOS 8 的 ifcfg 兼容性CentOS 8 默认只有 NetworkManagersystemctl restart network已不存在。此时ifcfg文件仍能被 NM 读取通过ifcfg-rh插件但推荐改用nmcli。改完 ifcfg 后要nmcli connection reload让 NM 重新读取。六、完整示例给 Ubuntu Server 配静态 IP结合典型场景走一遍完整流程# 1. 先看当前网卡名和状态 ip -br addr # eth0 UP 192.168.1.50/24 # 2. 备份原配置 sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak # 3. 编辑配置 sudo vim /etc/netplan/01-netcfg.yamlnetwork: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.1.100/24] routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 8.8.8.8]# 4. 用 try 应用有回滚保护 sudo netplan try # 5. 验证 ip addr show eth0 ip route show default ping -c 2 223.5.5.5七、⚠️ 常见错误ip addr add后以为改好了。它不持久重启就丢。要写进 netplan/nmcli/ifcfg。远程改网络用netplan apply。配错直接断连进不去机器。永远用netplan try。改完不激活连接。nmcli connection modify后忘了up配置没生效。YAML 用 Tab 缩进。netplan 只认空格报错难查。网卡名写错。eth0vsens33vsenp0s3现代系统网卡名可预测化先ip -br addr确认。ONBOOTno导致开机没网。ifcfg 里这个字段忘了改yes重启后网卡不启动。多网卡只配了一个网关。两个网卡都写GATEWAY会冲突应只在一个网卡配默认网关另一个用静态路由。改了 DNS 不重载。resolv.conf被 NM 管理时得通过nmcli改 DNS直接改文件会被覆盖。八、原理探究网络配置的持久化机制为什么ip改了不持久netplan改了持久理解这套机制就不会再困惑。三条技术路线传统/etc/sysconfig/network-scripts/ifcfg-* network 服务 ↓CentOS 7 及之前 NetworkManager/etc/NetworkManager/system-connections/* nmcli ↓现代发行版 systemd-networkd.network 文件 ↓ netplan/etc/netplan/*.yaml渲染到上面之一ip命令直接改内核里的网络配置对象内核不落盘重启即失。配置文件方式把配置写在磁盘上开机时由对应的服务读取、翻译成ip命令再执行所以持久。netplan 的「渲染」netplan本身不是网络管理程序它只是个「配置翻译器」# 看 netplan 渲染出的底层配置 ls /run/systemd/network/ # renderer: networkd 时 ls /run/NetworkManager/system-connections/ # renderer: NetworkManager 时你在 YAML 里写一次netplan apply会把它翻译成 systemd-networkd 或 NM 能懂的格式。这就是为什么改 netplan 后可以用networkctl或nmcli查看结果。为什么推荐 netplan trynetplan try的机制应用新配置启动一个 120 秒倒计时。期间如果你确认没问题按 Enter 固化。如果你因为断网没法确认倒计时结束自动回滚到上一个可用配置。这是防止「远程配错网络把自己锁在门外」的安全设计改网络配置的标准姿势。一个判断口诀临时、紧急→ipUbuntu 持久→netplan用tryCentOS/Rocky 持久→nmcli或ifcfg reload改了没生效→ 检查配置写对了吗服务重载了吗连接激活了吗九、网络配置速查表# 临时配置iproute2 sudo ip addr add 192.168.1.100/24 dev eth0 sudo ip route add default via 192.168.1.1 # NetworkManager通用持久 nmcli connection show sudo nmcli connection modify eth0 ipv4.method manual \ ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 sudo nmcli connection up eth0 # netplanUbuntu 持久 sudo vim /etc/netplan/*.yaml sudo netplan try # ifcfgCentOS 传统 sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0 sudo systemctl restart network # 或 nmcli connection reload # 验证 ip -br addr ip route show default ping -c2 223.5.5.5一句话收尾临时用ip持久分发行版——Ubuntu 认 netplan、CentOS 认 nmcli。改配置前先备份、远程操作用try、改完必验证网络配置就不会成为你的滑铁卢。