yanchang
yanchang
发布于 2026-07-07 / 4 阅读
0
0

记一次极其诡异的 Linux 断网排错

碎碎念:

本人现在就读于成都理工大学,最近的话学校水上图书馆因为夏天普遍开空调,电压十分的不稳定,现在三楼的图书馆大厅已经停空调了,现在我们四楼、五楼的研究生工位空调其实也有气无力,效果不好。然后因为电压问题,最近也是频繁的断电、隔三差五就停电。每次一停电,我就得像个苦力一样跑去机房,手动把我的那台个人服务器再按开开机。
PS(本人现在研一、有一个个平时工作用的小服务器)
日常的一些工作上的事情,都是在这上面远程使用的。

本来这也没什么,毕竟之前玩自建服务器,早就习惯了服务器断联然后各种排错。按照以往的经验,停电重启后可以自己联网。然后就会按照我部署的服务自动建立两种连接方式,一种是自动向我的公网服务器建立ssh隧道实现内网穿透,另一种方式就是连接我的公网服务器部署的teleport,实现堡垒机访问。
如果断网,两种方式都连接不上了,十有八九是校园网(abc.cdut.edu.cn)的设备连接数超限了,去机房手动连接后重新弹个网页登录一下就行。

但是今天从工位拿了一个显示器,到机房后,插上显示器开机后,发现根本就没办法进入登录界面,反反复复的重启了很多次,但是都没有办法联网。尝试了一上午的时间,就是连不上网,我也不可能把这个铁疙瘩搬到工位去工作,我日常的工作数据都在这个铁疙瘩里面,我也不可能蹲在这个机房里面去工作,这个天实在是太热了。然后这篇博客就是记录了排错的过程。

症状:ping任何ip和域名都是百分百丢包

一开始,我以为只是单纯的 DNS 解析问题或者校园网网关抽风。网页无法重定向,手动访问拦截域名也无效。

然后就是以为是常规的dns问题,所以我也就检查了很多关于dns问题,但是发现,居然ping网关都是无效的

为了排除校园网的干扰,我决定祭出最简单的物理隔离大法:

  1. 连上手机热点 -> 无法上网。

  2. 用安卓手机进行 USB 网络共享 (RNDIS) -> 依旧无法联网。

然后我怀疑是服务器配置导致的网关获取不对?
然后我用 ip aip route 查了一下,然后显示确实是拿到了手机分配的 IP,路由表里的默认网关也指得明明白白,但只要我试图 ping 这个直连的网关,或者ping 8.8.8.8结果100% packet loss。也就是说完全是连接不上的

在这个阶段,“连上手机热点不通,USB 共享也不通,连 USB 网关都 ping 不通”

迷雾重重:在错误的图层上“擦橡皮”

既然能拿到 IP 却上不了网,我第一反应是是防火墙规则乱了?

既然怀疑是防火墙流量劫持,然后就去问ai要了部分命令,iptables的清理命令,具体作用的话大概就是:

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t mangle -F

然而,敲完这些命令后,ping 网关依旧不行,不仅仅是dns问题,还是ping网关不通。但是ip可以获取。

然后还有就是,连主板拔电放静电的玄学操作我都试了,但是之前本身就是断电导致的问题发生,按理说早就应该把静电都放干净了。

然后基本就是要放弃个人努力了,让ai上去排错吧。ai给的解释基本上就是,在较新的 Ubuntu 系统中,iptables 其实早就是一个兼容层(iptables-nft)了,真正干活的是更底层的 nftables。而系统自带的 ufw 防火墙,是直接绕过这个兼容层,把规则写进 nftables 的独立 table 里的!

建议执行下面的命令。

sudo ufw disable
sudo nft flush ruleset

回车,再次 ping 10.212.141.7。 然后就成功ping通网关了。

为什么平时 UFW 开着没事,一次异常断电就让它变成了“黑洞”?

ai大概的解释就是。

核心原理在于内核的 Connection Tracking (conntrack) 机制。UFW 的默认策略是 deny incoming。平时我们能 ping 通网关,是因为内核的连接跟踪机制认出了“回包”属于我们主动发起的请求,从而动态放行。

但在这次机房异常断电中,系统非正常关机。重启后,UFW 起来了,但因为状态错乱,或者内核的某些放行规则模块没有正常初始化,导致所有的回包(包括 ping 的 reply)全被当作未经允许的外部请求,被默认的 deny 规则一口吞掉。

所以说大概要总结一下

  1. 一旦“换物理网络也没用,且连直连网关都丢包”,别去怀疑外网了,矛头必须死死锁定在本机的内核网络栈或防火墙上。

  2. 别信 iptables -F 了。在现代 Linux 环境下,找准底层的 nftables 或者直接关闭外壳管理工具(如 ufw disable

搞定了网络,重新开放了 22 和 Web 端口,然后把允许出站打开,把 ufw 重新跑起来。两种内网穿透就自动建立起来了。所以说问题主要还是
对linux底层的运行原理不了解,导致的,一系列常规方法排查后,基本就放弃抵抗了,让ai上了。


评论