Linux网络配置生效取决于实际管理服务:Debian/Ubuntu用/etc/network/interfaces需restart networking;RHEL/CentOS 7+默认由NetworkManager接管,应使用nmcli/nmtui;systemd-networkd则读取/etc/systemd/network/*.network。

Linux 网络配置文件不是“改完就生效”的统一入口,不同发行版用的不是同一套机制,直接编辑文件可能被 NetworkManager 或 systemd-networkd 覆盖。
哪些文件真正影响持久化网络配置
关键看系统使用的网络管理服务:
- Debian/Ubuntu(使用
ifupdown):主配置在/etc/network/interfaces,ifup/ifdown读它,systemctl restart networking生效 - RHEL/CentOS 7+(默认用
NetworkManager):不建议手动改/etc/sysconfig/network-scripts/ifcfg-*,应优先用nmtui或nmcli;否则 NetworkManager 可能忽略或覆盖你的修改 - systemd-networkd(常见于容器、云镜像、Arch):配置在
/etc/systemd/network/*.network,需systemctl restart systemd-networkd - 所有发行版都认
/etc/hosts和/etc/resolv.conf(但后者常被resolvconf或systemd-resolved动态管理)
为什么改了 /etc/network/interfaces 却没生效
常见原因不是语法错,而是服务未触发或被接管:
- Ubuntu 18.04+ 默认启用
NetworkManager,它会绕过ifupdown直接管理接口 —— 此时改/etc/network/interfaces完全无效 - 忘记运行
ifdown eth0 && ifup eth0,或漏掉systemctl restart networking - 接口名变了(比如从
eth0变成enp0s3),配置里写的旧名不匹配 - 配置中漏写
auto eth0,导致ifup不自动加载该接口
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
/etc/sysconfig/network-scripts/ifcfg-* 的坑
RHEL 系风格配置看似直观,但几个字段极易引发静默失败:
-
ONBOOT=yes必须设为yes,否则开机不启;设成no或留空 = 接口不激活 -
BOOTPROTO=static(非none或dhcp)才读取IPADDR/NETMASK -
DEVICE=值必须和真实接口名完全一致(ip link show查),大小写敏感 - 改完别只
ifdown/ifup,要nmcli connection reload再nmcli connection down/up "System eth0",否则 NetworkManager 不同步
如何确认当前谁在管网络
先搞清控制权归属,再决定动哪份文件:
- 查服务状态:
systemctl status NetworkManager systemd-networkd networking - 查接口管理方:
nmcli device status(显示connected表示 NM 在管) - 查是否启用
systemd-resolved:systemctl is-active systemd-resolved;若启用,/etc/resolv.conf通常是软链到/run/systemd/resolve/stub-resolv.conf,直接改它会被重置 - 临时停用 NM 测试:
systemctl stop NetworkManager,再试ifconfig或ip addr看接口是否还存在
最易被忽略的是:即使你用的是传统配置文件,只要 NetworkManager 处于 active 状态,它就可能在后台监听并覆盖你的设置——这不是 bug,是设计如此。










