Ubuntu 18.04+ 使用 netplan(YAML 声明式配置,需匹配 renderer 并校验缩进),CentOS 7/8+ 使用 ifcfg-xxx 文件(BOOTPROTO=static 等参数),二者路径、语法、生效机制完全不同,不可混用。

Ubuntu 18.04+ 和 CentOS 7/8+ 静态 IP 配置方法完全不同,不能混用;直接改 /etc/resolv.conf 或用 ip addr add 是临时的,重启就丢,真要固定必须走发行版对应的持久化配置路径。
Ubuntu 20.04/22.04/24.04/26.04 用 netplan 改静态 IP
Netplan 是声明式配置,YAML 文件里写死地址、网关、DNS,再由 systemd-networkd 或 NetworkManager 渲染生效。缩进错一个空格、用了 Tab、漏了冒号,netplan apply 就直接报错。
- 先确认网卡名:
ip -br a看哪一行状态是UP,比如ens33或enp0s3 - 查配置文件:
ls /etc/netplan/,常见的是00-installer-config.yaml或01-network-manager-all.yaml;如果看到50-cloud-init.yaml,得先禁用 cloud-init 网络管理,否则重启后会被覆盖 - 编辑文件时必须用空格缩进(不能用 Tab),关键字段不能拼错:
dhcp4: false(不是no或off),gateway4必须有,nameservers下的addresses是列表格式 - 应用前建议先校验语法:
sudo netplan try,它会等待你确认,超时自动回滚,比直接apply安全
CentOS 7/8/RHEL 7/8 用 ifcfg-xxx 文件配静态 IP
配置文件在 /etc/sysconfig/network-scripts/ifcfg-eth0 这类路径下,改完必须重启网络服务或网卡,且 /etc/resolv.conf 可能被 NetworkManager 覆盖,DNS 最好写进 ifcfg 文件里。
-
BOOTPROTO=static是开关,填dhcp或留空就还是动态获取 -
ONBOOT=yes必须设,否则重启后网卡不启动,机器直接失联 -
PREFIX=24或NETMASK=255.255.255.0二选一即可,但别两个都写;GATEWAY写在 ifcfg 文件里比写在/etc/sysconfig/network更可靠 - DNS 推荐写在 ifcfg 文件里:
DNS1=8.8.8.8、DNS2=114.114.114.114,这样 NetworkManager 重启时不会清掉/etc/resolv.conf - 改完别只
ifdown eth0 && ifup eth0,要执行sudo systemctl restart network(CentOS 7)或sudo nmcli connection reload && sudo nmcli connection down "System eth0" && sudo nmcli connection up "System eth0"(RHEL 8+)
为什么 ping 不通网关或解析不了域名
配置写对了,但连不上,大概率是三个地方出了问题:网关没生效、DNS 没落盘、或者路由表冲突。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 执行
ip route | grep default,看输出的网关 IP 是否和配置里一致;如果不一致,说明gateway4或GATEWAY没生效,可能是 renderer 不匹配(比如用了NetworkManager却配了systemd-networkd的语法) - 查 DNS 是否真正加载:
systemd-resolve --status(systemd 系统)或cat /etc/resolv.conf,如果里面只有127.0.0.53,说明 systemd-resolved 拦截了,得去/etc/systemd/resolved.conf改DNS=行 - 虚拟机环境下,宿主机防火墙或 VMware/VirtualBox 的 NAT 模式可能限制了新 IP 的通信,可临时切到桥接模式验证是否是环境问题
桌面版 Ubuntu 别硬改 YAML,用 nmcli 更稳
如果你用的是 Ubuntu Desktop,默认跑的是 NetworkManager,硬改 Netplan YAML 容易和 GUI 网络设置打架;nmcli 命令实时生效,配置自动同步,适合不想碰配置文件的人。
- 先查当前连接名:
nmcli connection show --active,通常叫Wired connection 1或类似 - 一次性设全:
nmcli connection modify "Wired connection 1" ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,114.114.114.114" ipv4.ignore-auto-routes yes - 必须加
ipv4.ignore-auto-routes yes,否则 DHCP 旧路由不清理,新静态路由不起作用 - 最后激活:
nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1"
最常被忽略的是 cloud-init 干预和 renderer 匹配问题——Ubuntu 云镜像默认启用 cloud-init,它会在每次启动时重写网络配置;而 Netplan 的 renderer 字段一旦写错(比如该写 NetworkManager 却写了 networkd),整个配置就只是个 YAML 文本,根本不会被任何后端读取。










