Ubuntu设置固定IP后重启失效,根本原因是未正确使用netplan(18.04+唯一正统方式),或配置存在网卡名错误、YAML缩进错误、dhcp4: no缺失、cloud-init覆盖等问题;需用ip -br a确认真实网卡名,严格按YAML语法编辑/etc/netplan/配置文件,并禁用cloud-init网络管理以确保持久化。

Ubuntu 设置固定 IP 后重启失效,基本是因为配置没走对路径——netplan 是 18.04+ 的唯一正统方式,手动改 /etc/network/interfaces 或用 ifconfig 临时设 IP,重启必丢。
确认网卡名和当前网络状态
别猜,也别凭记忆写 eth0 或 ens33。执行:
ip -br a
看哪一行状态是 UP 且有 IPv4 地址(比如 ens33 UP 192.168.1.23/24),那个就是你要配的网卡名。注意:WSL2 默认是 eth0,VMware/VirtualBox 桥接模式常见 ens33 或 enp0s3,NAT 模式下可能叫 eth0 但实际走的是 NAT 网络,固定 IP 需配合宿主机策略。
顺手记下当前的 gateway 和 DNS(cat /etc/resolv.conf),后面填配置时要用。
编辑 netplan 配置文件并禁用 DHCP
/etc/netplan/ 下通常有 00-installer-config.yaml、50-cloud-init.yaml 或类似名字。直接改它,或新建一个优先级更高的(如 01-static-ip.yaml),内容必须严格 YAML 格式,缩进错误会导致 netplan apply 失败。
关键点:
-
dhcp4: no必须显式关闭,否则即使写了addresses,systemd-networkd 仍会尝试 DHCP 并覆盖静态配置 -
addresses值格式是["192.168.1.100/24"],斜杠后是子网前缀长度(不是掩码) -
gateway4只能写一个 IPv4 网关;多网关需用routes字段 -
nameservers下的addresses是列表,比如[8.8.8.8, 114.114.114.114]
示例(适配常见家用路由器):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: ["192.168.1.100/24"]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
应用配置并验证是否持久
运行:
sudo netplan apply
然后立刻检查:
-
ip a show ens33—— 看是否出现你设的地址,且没有额外的dynamic标记 -
ip r—— 确认默认路由指向你写的gateway4 -
ping -c 3 8.8.8.8和ping -c 3 www.baidu.com—— 验证连通性和 DNS
真正关键的一步:重启系统,再执行 ip a。如果 IP 还在,说明配置已持久化;如果丢了,大概率是 cloud-init 在启动时重写了 netplan 文件(尤其云镜像或某些 Ubuntu Server 安装版)。此时要检查 /etc/cloud/cloud.cfg.d/ 下是否有禁用网络管理的配置,或干脆把 netplan 文件权限设为只读:sudo chown root:root /etc/netplan/*.yaml && sudo chmod 644 /etc/netplan/*.yaml。
WSL2 固定 IP 的特殊处理
WSL2 不是传统虚拟机,它的“网卡” eth0 实际由 Windows 的 vEthernet (WSL) 虚拟交换机提供 NAT 网络。直接在 WSL2 里设静态 IP(如 172.x.x.x)可行,但必须确保该 IP 不在 WSL2 DHCP 分配池内,否则可能冲突或被覆盖。
操作要点:
- 先在 Windows 上查 WSL2 的 DHCP 范围:
Get-NetIPAddress -AddressFamily IPv4 -PrefixLength 20 -AddressState Preferred | Where-Object {$_.InterfaceAlias -like "vEthernet (WSL)*"}(PowerShell) - 选一个不在该网段内的地址,比如
172.22.80.100/20(若范围是172.22.76.0/20,则172.22.80.0–172.22.95.255是安全区) - netplan 配置中
renderer必须用networkd(不能用NetworkManager),且不要写gateway4—— WSL2 的网关由 Windows 自动注入,硬写反而断网 - Windows 主机要能访问 WSL2,还需在 Windows 防火墙放行对应端口,或添加端口转发规则(
netsh interface portproxy)
最易忽略的点:WSL2 的 IP 每次关机后可能释放,所以固定 IP 配置必须放在 WSL2 内部的 netplan 中,并确保 sudo netplan apply 在每次启动后自动执行(可通过 /etc/wsl.conf 的 [boot] 段启用 systemd 支持,再设 service 触发)。

















