跳转到主内容
极星编程网:以代码为星,赴技术山海!

Linux 网络配置重启后失效的原因

ip addr add 配置的 IP 重启后消失是因为该命令仅修改内核运行时状态,不写入任何持久化配置文件;Debian/Ubuntu 应写入 /etc/network/interfaces,RHEL/CentOS 8+ 应用 nmcli 或 Netplan,且 Netplan 的 YAML 缩进和格式必须严格正确。 为什么
ip addr add
配置的 IP 重启后就没了 因为
ip addr add
是纯内存操作,改的是内核网络栈的运行时状态,不写入任何持久化配置文件。系统一重启,内核重载,所有临时配置清空。 常见错误现象:
ip addr show
能看到 IP,
reboot
后消失;或者
systemctl restart networking
(Debian/Ubuntu)也失效——说明你没走对持久化路径。 使用场景:临时调试、CI 环境快速配网、容器宿主机手动测试 它和
ifconfig
一样,只作用于当前会话,别指望它扛过 reboot 没有“参数开关”能让它持久,硬加
--permanent
或类似选项都是错的(那不是这个命令的功能) Debian/Ubuntu 持久化该写进
/etc/network/interfaces
这是传统 ifupdown 工具链的配置入口,
systemctl restart networking
读的就是它。新装的 Ubuntu 22.04+ 默认不用这套,但只要没卸载
ifupdown
,它就依然生效且优先级高于 Netplan(除非你明确禁用)。 示例(给
eth0
配静态 IP): Trae linux Trae Linux 官方版本现已全面上线,开发者可直接访问 Trae 官网(trae.cn 国内版或 trae.ai 国际版)获取专属安装包。该版本完美适配主流 Linux 发行版,提供 .deb(适配 Ubuntu/Debian)、.rpm(适配 RHEL/Fedora)以及通用 .tar.gz 格式,并全面支持 x64 与 ARM64 架构。 下载
auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1
必须用
auto
行声明接口启动,否则
ifup eth0
都不会触发
iface xxx inet dhcp
写法才走 DHCP;写成
inet static
才走下面的
address
改完要执行
sudo ifdown eth0 && sudo ifup eth0
测试,别直接 reboot 如果系统同时启用了 Netplan(如 Ubuntu 18.04+ 默认),两个配置冲突会导致
networking
服务启动失败,
journalctl -u networking
里能看到 “interface already configured” 类错误 CentOS/RHEL 8+ 用
/etc/sysconfig/network-scripts/ifcfg-xxx
还是 Netplan? RHEL 8+ 和 CentOS Stream 默认弃用
ifcfg-*
,转而通过
NetworkManager
+
keyfile
或
Netplan
(若装了)管理。但很多用户仍习惯改
ifcfg-eth0
,结果
nmcli connection reload
不生效、
systemctl restart network
报错“Failed to start network.service”。 真实情况:
network.service
在 RHEL 8+ 是被 mask 掉的,
systemctl unmask network
并不能安全启用它 正确做法是用
nmcli
:比如
nmcli connection modify "System eth0" ipv4.addresses 192.168.1.100/24
,再
nmcli connection down "System eth0" && nmcli connection up "System eth0"
如果非要写文件,得用
/etc/NetworkManager/system-connections/
下的 keyfile(格式类似 ini),而不是 ifcfg;手写容易少
[connection] id=xxx
导致加载失败
nmcli connection show
是唯一可信的“当前生效配置”来源,
ip addr
只反映结果,不反映来源 Netplan 配置写错一个缩进,整个网络就起不来 Netplan 是 YAML 格式,缩进即语法。少一个空格、混用 tab、冒号后没空格——都会导致
netplan apply
失败,且错误提示极其简陋:
Invalid YAML at //etc/netplan/01-network-manager-all.yaml line 12 column 3: did not find expected key
。 必须用空格缩进,严禁 tab;推荐用 2 空格,和官方示例一致 所有键名后必须跟
:
+ 一个空格,比如
addresses:
不是
addresses:
(后面没空格)或
addresses:
(多一个空格也不行) 修改后先运行
sudo netplan generate
,它会把 YAML 编译成 NetworkManager 或 systemd-networkd 的中间配置,出错就停在这步,比
apply
安全 如果用了
renderer: NetworkManager
,但系统没装
NetworkManager
包,
netplan apply
会静默失败,
ip link
看不到接口 UP,得查
journalctl -u systemd-networkd
或
journalctl -u NetworkManager
最麻烦的点在于:不同发行版默认 renderer 不同,同一份 YAML 在 Ubuntu 上跑 NetworkManager,在 Debian 上可能被 systemd-networkd 解析——行为差异藏在底层,不看
cat /etc/netplan/*.yaml | grep renderer
根本意识不到。

相关文章