「服务器换机房了,网卡要改成静态 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 show
NAME UUID TYPE DEVICE
eth0 3f8b... ethernet eth0
NAME 是连接名(不一定等于网卡名),后续操作都用它或 UUID。
查看设备状态
nmcli device status
DEVICE 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.yaml
network:
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-eth0
TYPE=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.yaml
network:
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、改完必验证,网络配置就不会成为你的滑铁卢。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/m0_66083353/article/details/167921218



