必须先确认系统网络管理机制再配置:nmcli有输出且networkmanager活跃→用nmcli;/etc/netplan/有yaml文件→用netplan;/etc/sysconfig/network-scripts/ifcfg-*存在→改ifcfg文件;/etc/network/interfaces有iface块→改interfaces文件,混用会导致配置失效。

ip 命令只能临时生效,真要持久配置,得看系统用的是哪套网络管理机制——不是所有 Linux 都走同一套流程。
先确认当前网络管理后端
别急着改文件或敲命令,先搞清系统实际靠谁管网卡:
- 运行
nmcli connection show,有输出且systemctl is-active NetworkManager返回active→ 用nmcli - 运行
ls /etc/netplan/有 .yaml 文件,且cat /etc/netplan/*.yaml | grep renderer显示renderer: networkd或renderer: NetworkManager→ 用netplan - 运行
ls /etc/sysconfig/network-scripts/ifcfg-*有文件,且systemctl is-active network是active→ 改ifcfg-文件(RHEL/CentOS 系) - 运行
cat /etc/network/interfaces有iface eth0 inet dhcp类配置,且没启用 netplan → 改/etc/network/interfaces(Debian/Ubuntu Server 传统方式)
混用会冲突。比如 netplan 设了 renderer: networkd,但你又去启 NetworkManager,sudo netplan apply 可能静默失败。
nmcli 修改静态 IP(NetworkManager 管理时)
这是桌面环境或 RHEL 8+/Fedora 最稳妥的方式,改完立即生效,不依赖重启服务:
- 查连接名:
nmcli connection show --active,记下第一列(如System ens33) - 设手动模式:
nmcli connection modify "System ens33" ipv4.method manual - 填地址:
nmcli connection modify "System ens33" ipv4.addresses 192.168.1.100/24 - 填网关:
nmcli connection modify "System ens33" ipv4.gateway 192.168.1.1 - 填 DNS:
nmcli connection modify "System ens33" ipv4.dns "8.8.8.8,114.114.114.114"(注意逗号分隔,不用空格) - 激活:
nmcli connection down "System ens33" && nmcli connection up "System ens33"
常见坑:ipv4.dns 值里如果用空格分隔(如 "8.8.8.8 114.114.114.114"),NetworkManager 会只取第一个;ipv4.method 必须设为 manual,设成 auto 或漏掉这步,DHCP 仍可能抢回 IP。
netplan 配置(Ubuntu 18.04+/Debian 11+ 默认)
YAML 看似简单,但缩进和键名错一个字符就 netplan apply 失败:
- 编辑文件:
sudo nano /etc/netplan/01-network-manager-all.yaml(路径以ls /etc/netplan/为准) - 确保用空格缩进(Tab 会报错),关键字段必须齐全:
dhcp4: false或删掉dhcp4: true,加上addresses: [192.168.1.100/24]、gateway4: 192.168.1.1、nameservers: {addresses: [8.8.8.8, 114.114.114.114]} - 应用前先验证:
sudo netplan --debug apply,它会指出哪行 YAML 解析失败 - 执行:
sudo netplan apply
容易忽略的点:renderer 必须匹配实际启用的服务。比如写了 renderer: NetworkManager,但 systemctl is-active NetworkManager 是 inactive,那配置根本不会落地;DNS 必须嵌套在 nameservers: 下的 addresses: 键里,写成 nameservers: [8.8.8.8] 会静默失效。
ifcfg- 文件配置(RHEL/CentOS/Rocky Linux 7+)
这类系统靠 network.service 读取 /etc/sysconfig/network-scripts/ifcfg-*,改完必须重启服务:
- 编辑:
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33(网卡名以ip -br a为准) - 关键项必须存在:
BOOTPROTO=static、IPADDR=192.168.1.100、NETMASK=255.255.255.0、GATEWAY=192.168.1.1、DNS1=8.8.8.8、ONBOOT=yes - 重启服务:
sudo systemctl restart network
最常踩的坑是 ONBOOT=no —— 这个值默认可能是 no,不改成 yes,重启后网卡根本不起;GATEWAY 写在其他网卡配置段里(比如写进 ifcfg-lo),也不会生效;改完不重启 network 服务,配置只是文件,不会加载。
最终验证别只看 ip addr,还得跑 ip route | grep default 确认网关加载了,再 ping -c 3 192.168.1.1 和 ping -c 3 8.8.8.8 分两步测通路和 DNS。YAML 缩进、renderer 匹配、ONBOOT 开关、DNS 嵌套层级——这些地方一错,IP 虽然看着配上了,但上不了网。











