UDP 端口跳跃,不连续的端口阻断

280 天前
 cnbatch

其他人用 hysteria2 的相关帖子:hysteria2 有什么伪装 TCP 的方案么? 现在跑个几十分钟就随机阻断几分钟 UDP

这个现象其实已经存在很长时间了,去年年中开始,我自己的 kcptube 经常见到这种情况,困扰了我好几个月。

我观察到的阻断是这样的
刚开始的几天、十几天都畅通无阻,但慢慢地,端口临时阻断会越来越多,并且端口阻断并不是一段连续的端口范围,而是分散的不连续端口。
更换成新的端口范围,可以暂时“解决”,然后又重复同样的阻断过程。

后来实在受不了,毕竟一旦跳跃到受阻断的端口等于临时断网。于是趁上个月过年期间,我给自己的 kcptube 加了个小改进:跳跃端口前检查下新端口是否已经阻断,如果是阻断端口就找另一个端口号,找到真正畅通的才跳过去。

有了这个小改进,整个连接就重新畅通了。

不过我也很好奇,这种阻断到底阻隔了多少端口,我猜测范围一定不小。

接着我想起来,我的这个工具有现成的--try命令行参数用于测试连接通断,只不过每次只测 1 个随机端口。
于是,又做了个新改进,改成测试整个端口范围。

测试结果实在“壮观”,3000 个端口,有一百多个是阻断的,剩下都是通畅的。
而这一百多个阻断端口并不是连续的一片,都是分散的。尽管也有极个别的连续端口,但不多,也就三四个而已。


按理来说,其实 hysteria2 是可以做到跳跃前先检查下通断的,发起个探测连接即可。
需要有人给 hysteria2 提个 issue 或者 patch

至少我的 kcptube 就是这样做的。依靠 KCP ,确定性有保障。而 hysteria2 有 QUIC ,理论上来讲其实也是有确定性的。

至于我的另一个工具,UDPHop ,完全就是 raw udp ,我实在想不到有什么好办法能够可靠地做到这种检测。

还好的是,流量很小的情况下不会出现这种阻断。无论多久都还是很顺畅。比如单纯只用来做游戏线路,只用来听电台、Podcast 。


备注:以上情况都特指公网跨大墙,并非指省间、省内、市内的情况。省市内部的连接没那么夸张。

4921 次点击
所在节点    宽带症候群
27 条回复
AlphaTauriHonda
280 天前
WireGuard 是不是也有同样的问题?
0o0O0o0O0o
280 天前
@AlphaTauriHonda #1 国内 WireGuard 我用起来一直没有太大问题,但很多人都说会有 QoS ,可能我不够快。翻墙用 WireGuard 的应该不多?
canyue7897
280 天前
OP 测试下,是就这么多端口阻断?还是过一段时间就会变?如果会变,可能是 QOS ? hysteria2 我用一直断流,cn2 都会断,感觉应该是协议的问题?
canyue7897
280 天前
现在用 vmess ,除了经常封端口,感觉问题不大。也能跑满宽带。
vcn8yjOogEL
280 天前
@AlphaTauriHonda #1 WireGuard 没有那么激进, 默认连域名都只会解析一次, 应该不会触发这种程度的干扰
cnbatch
280 天前
@AlphaTauriHonda 我还没试过长时间 WireGuard 跨大墙裸连,不清楚会不会遭到阻断
因为运营商主动 QoS 、出口节点给家宽丢包弄得我心累,只好放弃 WG 裸连
cnbatch
280 天前
@canyue7897 在半个小时内测了差不多 10 次,测试结果实在很诡异,有时端口全通,有时仅有个位数端口阻断,有时几十个、几百个,最多的一次竟然有一千多个!
我的测试程序设定了 30 秒无响应就判断为阻断。如果仅仅是 QoS 的话,端口变化应该不至于这么大的,最起码数据能够流通,顶多速率高了上去时就遇到运营商的 QoS 丢包。
像这样的阻断实在很奇怪,端口不定、时间不定,我都判断不出这种到底属于运营商的强力 QoS 还是某设备给运营商发出的干扰指令
tril
280 天前
@AlphaTauriHonda wg 跨境也会被临时阻断端口,哪怕只是打游戏的小流量。不过只开了一个端口,所以并不清楚有没有其他不连续的端口被阻断。
canyue7897
280 天前
@cnbatch 这就是 qos 随机阻断。在阻断的时间段内,应该是任何端口都不通。这个时间段根据你的流量,连接 ip 地址而变化。
canyue7897
280 天前
这玩意儿就是黑盒,没有人只知道确切的方式
diangongnan
280 天前
大佬,上面那个帖子我发的,我遇到的问题是,一段时间他会阻断我本地宽带的 udp 入站,我在韩国 美国 日本 德国搭建了四个 hy2 ,例如我用韩国的 hy2 看 4k 视频,跑一段时间被阻断的时候,美国 日本 德国的 hy2 也是不通的,我重启本地的 clash ,试图重连也无效,我看了下 hy2 的日志,断开的时候,服务端能收到客户端请求,但是我本地应该是收不到服务端响应了。
cnbatch
280 天前
@canyue7897 还好暂时没遇到过所有端口阻断(除非是开着 BT ,连接太多触发反向墙),这个 QoS 有时实在很怪,比如我 2 分钟内连续 3 次测试,见到的端口阻断数会越来越多(但未必重叠),过 5 分钟再测,又全通了

而这段期间,同 IP 地址其他端口的 UDP 服务没受到影响,并且其它 IP 地址依旧保持畅通

然而如果

个人猜测,可能一段时间内少量 UDP 端口大流量就会先触发普通的 QoS ,如果是一段范围的 UDP 流量过多可能就触发范围级 QoS ,要是 UDP 流量大且端口过多就触发反向墙(就像开着 BT 那样)

不过这背后的实现确实是个黑盒,我猜也未必猜得对
cnbatch
280 天前
@diangongnan 4K 视频 + 10 秒换端口,在运营商那边来看的话,很可能就是短时间内大流量+出现大量连接,触发的不仅仅是 QoS ,而是反向墙。
BT 下载就很容易触发反向墙,特点正好是大量连接+大量流量。

反向墙的特点就是凡是境外地址的连接全都阻断,国内连接没影响。

可能流量大的情况下过于频繁跳跃端口,会遭遇像 BT 下载那样的反向墙
canyue7897
279 天前
其实我还更怀疑 hysteria2 这个协议有问题。用过 cn2 ,9929 这样的优质线路,流量不大的情况下,一样会断流。没有开端口跳跃,但是游戏和会议这种 udp 应用都没任何问题,最终无奈放弃,还是使用 xray ,这种便秘似的断流最影响体验。
hello2023
279 天前
@cnbatch 大佬 gh 上 kcptube 20240316 版本的 windows x64 包运行显示还是 20240310 的,有空看一看吗
YGBlvcAK
279 天前
天津移动云主机会阻断 hy2 ,每个省的墙的策略都不一样,北京移动家宽就不会
cnbatch
279 天前
@hello2023 真是抱歉,上传错版本了,现在已经把正确的文件传到了 Github
hello2023
279 天前
@cnbatch 可以了 感谢~~
wangyucn
279 天前
这个功能跟心跳检测的区别是什么?

>在半个小时内测了差不多 10 次,测试结果实在很诡异,有时端口全通,有时仅有个位数端口阻断,有时几十个、几百个,最多的一次竟然有一千多个!

感觉你说的现象,像是中间负责 UDP NAT 的设备 allocate 新端口处理不过来,或者是负责审查的设备跟不上新 udp session 建立。不像是故意这么搞你。
cnbatch
279 天前
@wangyucn 本质上没什么区别,如果说有区别,那就是心跳检测提前做
普通的心跳检测:只负责当前链路。
跳跃前事先检查:利用心跳检测提前测试下一个链路(端口)。
换个说法就是,跳跃前来一个 handshake ,成功了再转移。

至于“中间负责 UDP NAT 的设备 allocate 新端口处理不过来”,在我的家宽应该不是这样,我家软路由已经获取到双栈公网 IP ,发起测试的机器就是软路由本身,不需要 NAT 。而且,无论 IPv4 还是 IPv6 都有同样的现象。

中间某设备或许跟不上,也有可能是“反向墙”的轻微版,因为最重要的一点是,国内连接完全不受影响。

这个黑盒子实在猜不透,以往不少人的研究认为,中间那堆设备是旁路机器,但能够实施 UDP 阻断(或时间段丢包)的只能是直连设备。再结合其他人对于 UDP 的 QoS 帖子,实在搞不清楚到底是运营商主动而为还是某设备给直连设施发指令

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1024299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX