NetworkManager 与 systemd-networkd 冲突导致配置不生效,需停用 NetworkManager 并启用 systemd-networkd;使用 .network 文件配置静态 IP 和路由,修改后重启服务生效;临时命令配置重启即丢失,应通过 systemd-networkd 或 nmcli 持久化。

network-manager 与 systemd-networkd 冲突导致配置不生效
Linux 发行版默认启用 NetworkManager 时,手动修改 /etc/network/interfaces 或直接写 /etc/systemd/network/*.network 文件通常会被忽略——NetworkManager 会接管所有接口,覆盖静态配置。
- 检查当前管理器:
systemctl list-units | grep -E "(NetworkManager|systemd-networkd)" - 若
NetworkManager.service处于 active 状态,需停用并禁用它:sudo systemctl stop NetworkManager && sudo systemctl disable NetworkManager - 启用
systemd-networkd:sudo systemctl enable --now systemd-networkd - 注意:Ubuntu Desktop 默认强依赖
NetworkManager,改用systemd-networkd后 GUI 网络托盘将失效
使用 systemd-networkd 实现 IP 和路由持久化
systemd-networkd 通过 .network 文件定义接口行为,文件名无特殊要求,但需以 .network 结尾、放在 /etc/systemd/network/ 下,且权限为 644。
- 示例:为
eth0配置静态 IP:[Match] Name=eth0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 DNS=8.8.8.8
-
[Match]区块必须存在,否则该文件被跳过;Name支持通配符(如en*),但不推荐用于生产环境 - 若需多 IP,可重复写
Address=行;网关只支持单个,多个需用Route小节手动添加 - 修改后必须运行:
sudo systemctl restart systemd-networkd,而非仅 reload
ifconfig / ip 命令配置为何重启丢失
所有通过 ip addr add、ifconfig eth0 192.168.1.5 等命令做的临时配置,都只存在于内核网络栈中,不写入任何持久化配置文件,系统重启或 systemd-networkd 重载时必然清空。
- 验证是否为临时配置:
ip -details addr show eth0 | grep "dynamic\|temporary"—— 若无输出,说明是手动加的,非 DHCP 分配 - 不要在
/etc/rc.local里写ip命令:该文件在多数现代发行版中默认不执行,且执行时机早于网络服务就绪,大概率失败 - 真正可靠的“临时转持久”路径只有两条:写入
systemd-networkd配置,或为NetworkManager创建nmcli connection modify配置
NetworkManager 下如何正确保存静态配置
若必须保留 NetworkManager(如桌面环境),应使用其原生方式配置,而非编辑底层文件。直接改 /etc/NetworkManager/system-connections/ 下的 keyfile 是高危操作,容易因格式错误导致连接无法激活。
- 查看现有连接:
nmcli connection show - 修改 IPv4 设置(例如关闭 DHCP、设静态 IP):
nmcli connection modify "Wired connection 1" ipv4.method manual ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" ipv4.ignore-auto-routes yes - 关键一步:必须重新激活连接才能生效:
nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1" - 配置保存即持久,重启后自动加载;但注意
ipv4.ignore-auto-routes必须显式设为yes,否则 DHCP 获取的路由仍会残留
最易被忽略的是服务依赖顺序和配置生效边界:哪怕文件放对了位置、语法也正确,如果对应的服务没启动、或者被另一个网络管理器锁住接口,一切配置都是空转。动手前先确认谁在管你的 eth0,比反复试错快得多。










