家里网络卡了两天,原来是这个“优化”在作祟

发布于 — 2026 年 03 月 16 日
#青梅煮酒 #OpenWrt #homelab #网络

前两天发现家里的网络不太对劲。

一个是用 SSH 连接到家里那台跑旁路网关的虚拟机后,操作起来卡顿得很严重,输入命令后要等好几秒才有反应。另一个是手机上刷新小红书、哔哩哔哩、淘宝这些 App 时,页面加载明显变慢。

这台虚拟机负责把家里的网络流量分流,把访问国外网站的流量引导到代理通道,让访问更快更稳定。

只有流量经过这台虚拟机的设备才会卡顿。这说明问题在这台虚拟机上,不是家庭网络的问题。

问题表现

这个问题还有一个特点:不是一直存在,而是时有时无。

观察了一阵发现了规律。当在手机上刷小红书、哔哩哔哩这些 App 的时候,问题就出现。手机一放下,网络就恢复了正常。

这说明问题不是持续的,而是和某些特定的网络活动有关。

排查过程

既然问题出在旁路网关的处理上,那就得从它身上找原因。

先从简单的开始排查。看看是不是虚拟机的资源不够,或者网卡的性能有问题。测试了一下,带宽测试正常,虚拟机的 CPU 和内存占用都不高,资源应该不是问题。

又把虚拟机的内核换了几个版本试试,从 5.4 到 6.12 都试过了,问题依然存在。前后测试了 4 个不同的 OpenWrt 固件,从 2021 年的老版本到 2026 年的新版本,全都丢包。

接下来尝试了各种排查方向。

换了虚拟网卡类型,从 virtio 换到 e1000,甚至试过把物理网卡直通给虚拟机,都没有改善。试过清空所有防火墙规则,结果问题反而更严重了。对比新旧固件的网络参数,调整了 socket 缓冲区大小,有一点改善但远没解决。

排查陷入了僵局。

后来我突然想到,可以测试一下很久之前的备份。恢复后发现完全正常。

这让我意识到问题可能出在配置的修改上。我又恢复了最近的备份,问题又出现了。

两个备份用的是一模一样的系统,差别只可能在配置上。我让 OpenCode 对比了一下配置文件,很快就锁定了 OpenClash 里的"绕过中国大陆 IP"这个选项。排查过程中用 AI 助手确实省了不少事,很多时候都直接让它连上主机自动操作,执行命令、抓包分析等等,比人工快得多。

原因

这个选项的本意是优化性能。访问国内网站不走代理直接连接,只有国外流量才走代理。

它的实现方式是在系统防火墙里加载一张很长的"中国 IP 地址表"。新建立连接的时候,需要在这张表里查一下,看目的地是国内还是国外。

平时流量少的时候,这个过程还撑得住。但手机刷小红书或者哔哩哔哩时,App 会瞬间发起大量连接去加载图片和视频,系统一下子就忙不过来了。

处理不过来就会延迟变高、连接超时或重传,表现出来就是卡顿和丢包。

关掉这个选项后,少了一道按 IP 表分流的额外判断,转发路径轻了不少,问题就消失了。

这次排查花了不少时间,走了不少弯路。中间怀疑过很多方向,最终解决问题反而是最朴素的方法——拿一个正常的备份和一个异常的备份做对比,逐项排查差异。