#982·mihomo

[Feature] 支持 Hysteria 2 的 port hopping 功能

Author: keakonCreated Jan 15, 2024Updated Sep 15, 2026
Labelsenhancement

Verify steps

Description

mihomo 目前支持 hysteria 1 代的 port hopping,却不支持 2 代。我看了 issue 列表,在这个回复中得到了不会支持的答复。

阅读代码后我发现对 hysteria 2 的支持是基于 sing-quic,而后者的开发者表示「暂时没有计划添加这种服务器只能使用特定 Linux 系统 + 特权运行的功能。」。 对于这种服务端不支持就不允许客户端支持的做法,我也也只能选择绕过它来实现了。

Possible Solution

目前我的实现(#981)是在 DialContext() 时判断是否需要更换端口,如果需要,则重新创建一个 hysteria2.Client

由于只读了半天源码,不确定是否有遗漏的地方,需要帮忙看看。

此外,考虑到效率问题,我并没有去加锁,但是经过几小时的测试,并未遇到异常。如果需要加锁的话,应该在调用 h.client.DialConn() 时加个读锁,确保获取到未关闭的 client 即可。