绝大多数“重启网卡后没IP”问题源于NetworkManager与network服务冲突;需先用systemctl list-unit-files确认主导服务,再针对性操作:NetworkManager启用时用nmcli管理连接,传统networking启用时须确保/etc/network/interfaces语法正确且auto+iface配置完整。

绝大多数“重启网卡后没IP”的问题,不是命令没敲对,而是 NetworkManager 和传统 network 服务在抢网卡控制权。 直接 ifup ens33 或 systemctl restart network 很可能被后台的 NetworkManager 瞬间覆盖掉——你看到网卡 up 了,但几秒后 IP 就消失,ip a 里只剩 link-local 地址。
确认当前网络管理方式:别乱敲 systemctl restart
先搞清系统到底用谁管网卡,否则所有重启都是白忙:
- 运行
systemctl list-unit-files | grep -E "(NetworkManager|networking|network)",看哪些服务是enabled - 如果
NetworkManager.service是 enabled(桌面版、CentOS/RHEL 7+、Ubuntu 20.04+ 默认),就别碰network或networking——它们根本不存在或已废弃 - 如果
networking.service是 enabled(Debian/Ubuntu Server 18.04 及更早),那NetworkManager必须停用,否则冲突 - 如果两个都 disabled,说明可能用了
netplan(Ubuntu 18.04+ 云镜像常见),该跑sudo netplan apply
NetworkManager 主导时:重启不等于重获IP
systemctl restart NetworkManager 只是重启进程,不会自动重连已有连接。DHCP 租约可能卡住、配置未加载、或连接被标记为 “unmanaged”。
- 先检查连接状态:
nmcli connection show,确认目标连接(如 "System ens33")是否connected - 如果显示
disconnected,直接激活:nmcli connection up id "System ens33" - 如果刚改过静态 IP 或 DNS,必须先重载配置:
nmcli connection reload,再up - 若仍无 IP,可能是 DHCP 请求被阻塞,临时禁用再启用接口:
nmcli device set ens33 managed no && nmcli device set ens33 managed yes
传统 networking 服务(/etc/network/interfaces)下无IP
这类系统不认 NetworkManager,但对配置语法极其敏感。一个空格、缩进错位、或少写 auto eth0,都会导致 systemctl restart networking 静默失败——服务状态显示 active,ip a 却没地址。
- 先验证配置语法:
ifquery --check -a,它会报出具体哪行出错 - 确保
/etc/network/interfaces中有完整三段:auto eth0、iface eth0 inet dhcp(或static)、以及对应参数(address、netmask等) - 若用 DHCP 却拿不到地址,尝试手动释放+请求:
dhclient -v -r eth0 && dhclient -v eth0 - 注意:某些 VPS 镜像默认 disable
networking,运行systemctl is-active networking返回inactive,此时restart无效,得先systemctl enable --now networking
DHCP 服务本身异常:不是客户端问题
如果你是 DHCP 服务器(比如装了 dhcpd),客户端拿不到 IP,要查服务端是否真在发地址。
- 确认服务状态:
systemctl status dhcpd.service,注意看Active:是否为running,且日志里没报no subnet declaration这类错误 - 检查配置文件路径是否匹配启动参数:
systemctl cat dhcpd.service | grep ExecStart,确认-cf指向的是你编辑的/etc/dhcp/dhcpd.conf - 关键检查点:配置中
subnet段的网段必须和客户端所在物理网段一致;range范围不能和已分配的静态 IP 冲突;option routers和option domain-name-servers必须显式写出 - 改完配置必须
systemctl restart dhcpd.service,仅 reload 不生效
最常被忽略的一点:虚拟机场景下,“未托管(unmanaged)”状态往往不是配置问题,而是 /var/lib/NetworkManager/NetworkManager.state 文件残留了错误设备标记——删掉它再启 NetworkManager,比反复重启有效得多。


















