「服务器换机房了,网卡要改成静态 IP」「虚拟机克隆后默认路由不见了」——网络配置是运维最基础也最容易翻车的操作。麻烦在于 Linux 没有统一的配置方式:ip命令即时生效但重启就丢;netplan、ifcfg、nmcli各管一派,发行版之间还不一样。这一篇把四种主流方式讲清楚,并给出 Ubuntu 与 CentOS/Rocky 的完整静态 IP 配置示例。
一、四种配置方式概览
先建立全景,知道每种方式何时用:
| 方式 | 持久化 | 发行版 | 特点 |
|---|---|---|---|
ip | 否(重启丢失) | 通用 | 临时调试、快速生效 |
nmcli | 是 | 通用(有 NM) | 命令行管理 NetworkManager |
netplan | 是 | Ubuntu 18.04+ | YAML 配置,底层调 NM 或 systemd-networkd |
ifcfg | 是 | CentOS/RHEL 传统 | 文本文件 +systemctl restart network |
选择建议:临时改动用ip;Ubuntu 用netplan;CentOS/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只适合「先加上试试,通了再固化」。
三、nmcli:NetworkManager 命令行
现代发行版(Ubuntu Desktop/Server、CentOS 8+/Rocky)大多用NetworkManager(NM)管理网络。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 --配置静态 IP
sudo 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+ 的推荐方式。
四、netplan:Ubuntu 的新方式
Ubuntu 17.10 起引入netplan,用 YAML 描述网络,底层渲染成 NetworkManager 或 systemd-networkd 的配置。配置文件在/etc/netplan/。
查看现有配置
ls /etc/netplan/ cat /etc/netplan/01-netcfg.yaml配置静态 IP(systemd-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配置 DHCP
network: 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-等,后面的覆盖前面的同名设置
五、ifcfg:CentOS/RHEL 传统方式
老牌 RHEL/CentOS 7 及之前的配置方式,文件在/etc/sysconfig/network-scripts/,文件名ifcfg-<网卡名>。
配置静态 IP
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0TYPE=Ethernet BOOTPROTO=static NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.1.100 PREFIX=24 GATEWAY=192.168.1.1 DNS1=223.5.5.5 DNS2=8.8.8.8关键字段:
| 字段 | 说明 |
|---|---|
BOOTPROTO | static/dhcp/none |
ONBOOT | 开机是否启用,必须是yes |
IPADDR/PREFIX | IP 和掩码位数 |
GATEWAY | 默认网关 |
DNS1/DNS2 | DNS |
应用配置
# CentOS 7 sudo systemctl restart network # CentOS 8+/Rocky(network 服务被 NM 取代) sudo nmcli connection reload sudo nmcli connection up eth0 # 或 sudo systemctl restart NetworkManager⚠️ CentOS 8+ 的 ifcfg 兼容性
CentOS 8+ 默认只有 NetworkManager,systemctl 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确认。 ONBOOT=no导致开机没网。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 try
netplan try的机制:
- 应用新配置,启动一个 120 秒倒计时。
- 期间如果你确认没问题,按 Enter 固化。
- 如果你因为断网没法确认,倒计时结束自动回滚到上一个可用配置。
这是防止「远程配错网络把自己锁在门外」的安全设计,改网络配置的标准姿势。
一个判断口诀
- 临时、紧急→
ip - Ubuntu 持久→
netplan(用try) - CentOS/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 # netplan(Ubuntu 持久) sudo vim /etc/netplan/*.yaml sudo netplan try # ifcfg(CentOS 传统) 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、改完必验证,网络配置就不会成为你的滑铁卢。