跳到主要内容

Clash 能连上但上不了网?hysteria 国际 UDP 链路 QoS 排查

· 阅读需 6 分钟

Clash 显示已连接,浏览器却打不开任何网页;服务端日志里有 client connected,紧接着流内报 timeout: no recent network activity,整条流在 52 秒到几分钟内死亡。服务器各项健康检查全部通过。

在维护自建海外 VPS 时遇到此问题——跨境链路故障,主机无恙,记录完整的分层排查过程。

TL;DR​

认证能过、流内超时、服务器健康检查全绿——问题不在主机,在路径:国际链路对长流量 UDP 五元组做了 QoS,流进入「半死」状态。

  • 立即恢复:重连 Clash(客户端重新握手会换源端口,绕开被标记的五元组),实测九成场景有效
  • 确认定性:journalctl -u hysteria-server 看是否反复出现 client connected → timeout: no recent network activity 的循环
  • 长期缓解思路(概念):服务端端口范围轮换、或下调带宽声明避免触发抑制——按需选型,本文不展开

问题现象​

客户端与服务端两侧的表现拼出完整图景:

客户端:Clash 状态栏显示已连接(UDP 认证通过),但任何网站都打不开,测速无流量。

服务端(journalctl -u hysteria-server):

client connected               ← 认证成功
... (52s ~ 几分钟后)
timeout: no recent network activity ← 流级死亡
client disconnected
client connected ← 客户端自动重连,循环往复

重灾期数据:故障集中时段曾录得单日 94 / 50 / 20 次的重连风暴;一次典型案例是跑了 9 小时的旧会话进入半死状态引发。

排查链:先排除主机,再定性路径​

整条排查的价值在于排除法的顺序——如果跳过主机检查直接怪运营商,结论站不住。

第一层:认证与端口。 日志有 client connected,说明 UDP 包能到服务端、端口放行正常、认证配置正确。链路的前半程(客户端 → 服务器方向)是通的。

第二层:流级超时。 timeout: no recent network activity 是 hysteria 服务端的流保活探测:一条流长时间没有有效报文,判定死亡。认证能过但流立刻饿死——后半程(服务器 → 客户端方向的回包)大概率被丢了。

第三层:主机健康检查(排除主机侧)。 全部通过,主机洗清嫌疑:

检查项结果
出站 TCP(curl 大文件)正常,带宽跑满
网卡丢包 / 错包计数0
conntrack 表无异常表项堆积
TLS 证书有效期正常
内存 / 磁盘正常

第四层:定性。 三层证据合起来指向一个结论:本机收发正常、认证方向正常、唯独长流量流的回程报文被静默丢弃——这是典型的运营商对国际出口 UDP 长流量五元组的 QoS 行为:持续大流量的同一条 UDP 流(相同五元组)被流量识别系统标记,之后该五元组的包被降优或丢弃,流进入「半死」——没断,但再也跑不动。重连后客户端换新的源端口,等于换了一条没被标记的五元组,立即恢复。

故障源 IP 段为广东移动出口(163.179.x),不同运营商/地区的触发阈值与表现会有差异,但「长流量 UDP 五元组 → 半死 → 换端口恢复」的模式是通用的。

处置:重连恢复 + 观察判据​

日常处置(90% 有效):Clash 重连或重启。本质是换源端口绕开被标记的五元组,恢复时间秒级。

处置无效时:再上服务端日志确认模式——journalctl -u hysteria-server 里如果还是 connected → timeout 循环,且换端口无效,就要怀疑更上游的链路问题(服务器机房出口、中间运营商策略变化),那时再查服务器侧。

长期缓解(按需选型,遇到复发再做):两条思路——服务端监听端口范围轮换(让单条五元组活得不够久,不满足被标记的时长条件),或下调带宽相关声明让流量特征不那么「大」。各自有代价,遇到高频复发时再评估。

顺带一提:如果故障发生在 WSL2 环境里,还要先排除本机代理链路的另一类坑(防火墙拦截代理端口),见 WSL2 代理频繁断网?Windows 防火墙拦了代理端口——先把本机因素排干净,再往外定性链路。

注意事项

「服务器健康检查全过」不等于「网络没问题」——健康检查覆盖的是主机与它的直连链路,而 QoS 发生在跨境的中间路径上,任何主机侧工具都测不到。两边结论冲突时(主机全绿但用户没网),优先怀疑路径,这是本案例的核心排查经验。

常见问题​

hysteria 认证成功但上不了网,怎么分层排查?​

按链路三层切:第一层看服务端日志有没有 client connected——有,说明认证和端口都通;第二层看流内报错——出现 timeout: no recent network activity 说明流级死亡;第三层做服务器健康检查(出站 TCP、网卡丢包、conntrack、证书、内存磁盘)——全过就排除主机侧,定性到路径,重点是跨境 UDP 链路被 QoS。

timeout: no recent network activity 是什么意思?​

这是 hysteria 服务端对流级活跃度的探测报错:一条流在一段时间内没有任何有效报文通过,服务端就判定它死亡并关闭。认证握手能过、流却很快死掉,典型成因是路径中间设备(运营商 QoS)把这条 UDP 五元组标记后静默丢包——客户端以为还连着,实际通道已经半死。

UDP 长连接为什么容易被限流?​

运营商对国际出口的长时大流量 UDP 五元组有流量识别与抑制策略:同一条 UDP 流持续高速传输数十分钟到数小时后,容易被降优甚至静默丢弃。这也是为什么同一条隧道「用一会儿没事、挂一天就死」——流量特征越像长连接大流量,越容易触发。

CCLEE

独立开发者,24年电商行业实战经验,专注将AI能力落地于真实商业场景。

合作咨询