先运行三条命令判断:ls /etc/netplan/有.yaml→用Netplan;nmcli connection show有输出且NetworkManager active→用NetworkManager;cat /etc/network/interfaces有iface块→用ifupdown;ls /etc/sysconfig/network-scripts/ifcfg-*存在→RHEL/CentOS风格。

直接改配置文件或用命令设参数,但必须先确认系统用哪套网络管理机制,否则改了也不生效。
怎么快速判断系统用的是 Netplan、NetworkManager 还是 ifupdown
别猜,跑三条命令看输出:
-
ls /etc/netplan/有 .yaml 文件 → Ubuntu 17.10+ / Debian 11+ / CentOS Stream 默认走 Netplan -
nmcli connection show有输出且systemctl is-active NetworkManager返回 active → 优先用nmcli -
cat /etc/network/interfaces里有iface eth0 inet static这类块 → Debian/Ubuntu Server 传统 ifupdown 风格 -
ls /etc/sysconfig/network-scripts/ifcfg-*存在 → RHEL/CentOS/Fedora/Alibaba Cloud Linux 风格
注意:cat /etc/resolv.conf 开头若带 # Generated by NetworkManager 或 systemd-resolved,说明 DNS 是动态注入的,不能直接改这个文件。
Netplan 配置静态 IP 时 YAML 容易出错的点
Netplan 本身不干活,它只是把 YAML 翻译给后端(systemd-networkd 或 NetworkManager),错配就白忙。
- 缩进必须用空格,Tab 键直接解析失败 —— 用
sudo netplan --debug apply能定位到具体哪行 -
addresses:必须是列表格式:[192.168.1.100/24]或换行加-,写成192.168.1.100/24(无括号/破折号)会静默忽略 -
gateway4:不能写成gateway:,后者是无效字段 -
nameservers:下必须嵌套addresses:,完整写法是:nameservers: {addresses: [8.8.8.8, 114.114.114.114]},漏掉addresses:键,DNS 就不会写入 -
renderer:值必须和实际运行的服务一致:设了renderer: networkd就得systemctl is-active systemd-networkd是 active;设了renderer: NetworkManager就得关掉systemd-networkd,否则冲突
nmcli 修改后 ping 不通网关的典型原因
这是 NetworkManager 场景下最典型的“配置写了但没生效”问题。
- 执行
nmcli connection modify "连接名称" ipv4.method manual后,必须配套设置ipv4.addresses、ipv4.gateway、ipv4.dns,缺一不可 —— 只改 method 不设地址,NM 会 fallback 到 DHCP - 改完必须执行
nmcli connection down "连接名称"再up,不能只 reload - 连接名要准确,比如可能是
"System ens33"或"Wired connection 1",用nmcli connection show --active确认 - 如果系统同时启用了
systemd-networkd,它可能抢在 NM 前接管接口,导致配置不生效
ifcfg-* 文件配完不生效的隐藏条件
RHEL/CentOS/Fedora 类系统靠 network.service 读取 /etc/sysconfig/network-scripts/ifcfg-*,失效点常不在 IP 字段本身。
-
ONBOOT=yes是开机自启开关,设成no就算重启也不会拉起该接口 -
BOOTPROTO=static必须小写,写成STATIC或Static会被忽略 - 子网掩码字段叫
NETMASK,不是NETMASK24或Prefix;网关字段是GATEWAY,不是DEFAULTGW - 改完必须
sudo systemctl restart network,而不是systemctl restart NetworkManager - 若系统已启用
NetworkManager,它可能自动接管接口并覆盖 ifcfg 设置 —— 查nmcli dev status看接口是否显示为unmanaged
最麻烦的是多管理器共存:比如 Netplan + NetworkManager + network.service 同时存在,改一个文件,另外两个服务可能悄悄把它顶掉。真要稳,先停掉不用的服务,再动手。


















