必须先确认网络管理机制:若networkmanager活跃则用nmcli并确保连接名、ipv4.method manual、地址前缀格式及down/up生效;若systemd-networkd活跃则用netplan且需匹配renderer、严格yaml缩进与列表语法。

nmcli 修改后不生效?netplan apply 报错?别急,先确认你用的是哪套网络管理机制——Linux 静态 IP 配置不是“一套命令走天下”,配错工具或文件,轻则重启失效,重则断网连不上。
怎么判断当前系统用哪套网络管理工具
执行 systemctl list-units | grep -E "(NetworkManager|network|systemd-networkd)",看哪些服务在运行:
- 如果
NetworkManager.serviceactive(且没被禁用),优先用nmcli或nmtui - 如果
systemd-networkd.serviceactive,说明走的是netplan渲染路径(常见于 Ubuntu Server、Debian 12+) - 如果
network.serviceactive(RHEL/CentOS 7/8 传统模式),对应/etc/sysconfig/network-scripts/ifcfg-* - 如果
ifupdown工具存在且/etc/network/interfaces有配置,则走 Debian 传统方式
误用工具最典型的表现:改了 /etc/netplan/*.yaml 却运行 systemctl restart network——这根本不管用,因为 network 服务压根不读 netplan。
nmcli 配静态 IP 时连接名容易写错
nmcli connection show 列出的名称不一定是网卡名(比如 ens33),常见是 "System ens33"、"Wired connection 1" 或带 UUID 的长串。直接复制粘贴输出里的完整名称,别手敲缩写。
- 设地址前必须先关 DHCP:
nmcli connection modify "System ens33" ipv4.method manual - 地址格式必须带前缀长度,如
192.168.1.100/24,写成192.168.1.100 255.255.255.0会失败 - DNS 要用英文逗号分隔,且引号不能漏:
ipv4.dns "8.8.8.8,114.114.114.114" - 改完必须
nmcli connection down "System ens33" && nmcli connection up "System ens33",只 reload 不触发路由重建
netplan YAML 缩进和 renderer 必须匹配
Ubuntu 20.04+ 默认 renderer 是 NetworkManager,但很多教程抄来抄去写成 networkd,结果 sudo netplan apply 成功却没生效——因为 networkd 没在跑,或者它根本不理 DNS 配置。
- 先查 renderer:
cat /etc/netplan/*.yaml | grep renderer - 若用
NetworkManager,DNS 才能生效;若用networkd,得额外配/etc/systemd/resolved.conf - YAML 缩进必须用空格,不能用 Tab;
addresses下是列表,要加短横:- 192.168.1.100/24,不是addresses: 192.168.1.100/24 - 改完务必
sudo netplan try测试 2 分钟,超时自动回滚,比直接apply安全得多
临时配置别动 /etc/resolv.conf
用 ip addr add + ip route add 临时设 IP 时,DNS 很容易踩坑:
-
echo "nameserver 8.8.8.8" > /etc/resolv.conf看似简单,但多数发行版(尤其启用 systemd-resolved 的)会覆盖这个文件 - 正确做法是:
sudo systemd-resolve --set-dns=8.8.8.8 --interface=ens33,或临时改/etc/systemd/resolved.conf后sudo systemctl restart systemd-resolved - 临时配置最大风险是:没清旧路由,导致新旧网关共存,ping 通但 curl 超时——务必
ip route flush dev ens33再加新路由
真正麻烦的从来不是“怎么写配置”,而是“改了哪一层、谁在管这一层、改完谁来加载”。配完记得 ip a 看地址、ip r 看路由、resolvectl status 看 DNS,三者缺一不可。











