linux断网时若ifconfig显示ip为空或169.254.x.x,表明dhcp失效,应优先用nmcli强制刷新连接:查激活连接→修改忽略路由→先down再up;若networkmanager未启用,则用sudo dhclient -r && sudo dhclient重获租约,并验证ip、网关连通性及dns解析。

Linux系统突然断网,ping不通网关,ifconfig显示IP地址为空或为169.254.x.x,说明DHCP租约已失效或获取失败,必须让客户端主动重新走一遍DHCP流程,而不是简单重启网卡。
确认当前网络接口与DHCP状态
运行 ip -br a 查看所有接口的简明状态,重点关注是否有UP状态但无IPv4地址的接口,比如 enp0s3 UP 192.168.1.100/24 表示正常,而 enp0s3 UP <no link></no> 或 enp0s3 UP <no address></no> 则说明物理连接异常或DHCP未响应。
再执行 nmcli device show,找到目标接口(如enp0s3)对应的 GENERAL.STATE 和 IP4.ADDRESS[1] 字段——若地址为空且状态为“unmanaged”或“unavailable”,NetworkManager并未接管该设备,后续dhclient命令可能被忽略。
这一步不能跳过。很多用户直接敲 dhclient enp0s3 却没反应,就是因为NetworkManager正在独占控制权,强行使用dhclient会触发冲突甚至导致路由表错乱。
用nmcli强制刷新DHCP连接(推荐首选)
第一步:查出当前激活的有线连接名称,运行 nmcli connection show --active | grep ethernet,输出类似 有线连接 1 802-3-ethernet enp0s3。
第二步:释放旧租约并触发全新请求,执行:nmcli connection modify "有线连接 1" ipv4.ignore-auto-routes yes && nmcli connection down "有线连接 1" && nmcli connection up "有线连接 1"
第三步:等待3~5秒后,立即检查结果:nmcli device show enp0s3 | grep IP4.ADDRESS。如果返回空行,说明DHCP服务器无响应或防火墙阻断了UDP 67/68端口。
【关键前提】 此方法仅在NetworkManager服务正在运行且接口已由其管理时有效。若系统为最小化安装(如CentOS Stream服务器),默认可能未启用NetworkManager,此时该命令会报错“no such connection”。
用dhclient直连DHCP服务器(绕过NetworkManager)
方法一:基础重获sudo dhclient -r enp0s3 && sudo dhclient enp0s3
方法二:带调试日志,便于排查失败原因sudo dhclient -v -timeout 10 enp0s3 ——加 -v 显示详细交互过程,-timeout 10 防止卡死在无响应服务器上。
方法三:强制清除所有租约文件并重试(适用于多次失败后残留脏数据)
先删掉租约缓存:sudo rm /var/lib/dhcp/dhclient.*.leases,再执行 sudo dhclient -nw enp0s3。-nw 表示“no wait”,避免因后台进程残留导致命令挂起;此操作会跳过读取旧租约,从头发起Discover广播。
注意:某些发行版(如Ubuntu 24.04)默认将dhclient设为systemd服务托管,直接调用可能被自动终止。若发现执行后几秒IP又消失,需先停用服务:sudo systemctl stop systemd-networkd && sudo systemctl disable systemd-networkd。
验证新IP是否生效并连通外网
运行 ip -4 addr show dev enp0s3 | grep inet,确认输出中包含合法的私有网段地址(如192.168.x.x、10.x.x.x),而非169.254.x.x链路本地地址。
接着测试三层连通性:ping -c3 $(ip route | awk '/default/ {print $3}') ——这条命令自动提取默认网关并发起三次ICMP请求。
最后验证DNS解析:getent hosts google.com | head -1。若返回空,说明DHCP虽给了IP和网关,但未下发DNS服务器地址,需检查DHCP服务器配置中的 option domain-name-servers 是否启用。











