机场推荐网

Hysteria2 协议怎么工作,2026 年新加的混淆和指纹模仿

Hysteria2 把代理装进一条走 UDP 的 QUIC 连接,对外像 HTTP/3 网站。填了带宽的方向用 Brutal,没填用 BBR。UDP 被卡时,官方对策是端口跳跃和混淆。

更新于 11 分钟读完作者 阿量参考了 19 份一手资料

订阅里类型为 hysteria2 的节点,和 Trojan、VLESS 这些节点差在两处。它的流量全是 UDP 包,别的节点走的是 TCP 上的 TLS。它的配置里常带着 up、down 这样的带宽栏,填了数,这个方向就换成它自己的拥塞控制。连不上的时候,查法也跟着不一样。

本站 28 家机场,协议一栏没有一家写它,项目本身却很活跃。GitHub 发布页上,2 代的第一个正式版 app/v2.0.0 发在 2023-09-02,最新版 app/v2.12.3 发在 2026-09-16。光 2026 年就出了 15 个版本,新加了拥塞控制选项、P2P 模式、第二种混淆、ECH、仿 Chrome 握手,还有伪装成 TCP 用的 mimic 集成。

一条 QUIC 连接,第一个请求是 POST /auth

协议规范的第一条要求是,Hysteria 必须实现在标准 QUIC 之上,也就是 RFC 9000,RFC 9221 定义的那套不可靠数据报扩展也得有。UDP 是 QUIC 的底层,Hysteria2 节点收发的全是 UDP 包。

QUIC 连接建好以后,客户端发的第一个请求是一个标准的 HTTP/3 请求。

:method: POST
:path: /auth
:host: hysteria
Hysteria-Auth: 认证凭据
Hysteria-CC-RX: 客户端最大接收速率,单位字节每秒,0 表示不知道
Hysteria-Padding: 长度随机的填充

服务器认出这个请求,就拿里面的凭据验证。通过了,回一个状态码 233,文字部分写 HyOK,同时带回三个头。Hysteria-UDP 告诉客户端这台服务器转不转发 UDP。Hysteria-CC-RX 是服务器自己的最大接收速率,0 表示不限,写 auto 表示服务器不给数,让客户端自己用拥塞控制去摸。Hysteria-Padding 仍是随机填充,两边都要忽略它,它的用处只是打乱请求和响应的长度。

没通过的,规范要求服务器像一台普通网站那样处理,或者把请求转给它反代的上游网站。服务端配置里的 masquerade 管这件事,可以挂一个静态文件目录,可以反代别的网站,也可以返回一段固定文字。文档还说,不担心审查的人可以把 masquerade 整段删掉,这时服务器对所有 HTTP 请求一律回 404。

这个 404 在排错时有用。官方故障排除文档里有一条报错写着 authentication error, HTTP status code: 404,列的原因是密码不对、连错了服务器、服务器的认证设置有误。客户端看到的 404,就是服务器在装网站。

认证之后才开始代理。客户端每发起一个 TCP 连接,就开一条新的 QUIC 双向流,先发一个编号 0x401 的 TCPRequest,写明目标地址和端口,服务器回 OK 以后开始双向搬数据。UDP 包则装进 QUIC 的不可靠数据报里,每个包带 4 字节的会话 ID 和 2 字节的包 ID。包太大就切成几片,任何一片丢了,整个包都丢弃。官方的 2 与 1 比较文档提到,2 代的 UDP 会话建立是零往返,新会话的第一个包不用额外等待。

up 和 down 填了,这个方向就交给 Brutal

Hysteria 有一样别的协议没有的东西,客户端可以自己申报带宽。协议里靠的就是认证时那两个 Hysteria-CC-RX 头,双方互相告诉对方自己最多能收多快。

官方的客户端配置文档把规则写得很死。bandwidth 里哪个方向填了数,哪个方向就用 Brutal。Brutal 按设定的速率发包,文档专门解释过它的丢包补偿,出现丢包时,它会按丢包率以略高于设定带宽的速度发,想把目标速度守住。没填的方向,改用 congestion 一节配置的控制器,默认是 BBR,也可以选 Reno,BBR 还分 standard、conservative、aggressive 三档。可选的拥塞控制是 2026-03-30 的 2.8.0 加的。

实际速度取两边的小值。客户端的上传取自己填的 up 和服务器最大下载速度中较小的那个,下载同理。服务端的带宽设置只限制 Brutal 的最高速率,用 BBR 或 Reno 时不起作用。服务端开了 ignoreClientBandwidth,客户端填的数会被忽略,两边各自回到本地配置的非 Brutal 控制器。按文档的说法,这个开关留给不想让用户自己设带宽的服务器。

文档在这一节放了一个醒目的警告,带宽值千万别超过当前网络能达到的最大带宽,超了只会造成拥塞、连接不稳。2026-07-13 的 2.10.0 还加了一个 disableLossCompensation 开关,关掉丢包补偿,永远不以高于设定带宽的速度发,更新说明里说这在某些情况下能提升稳定性。

到了第三方客户端里,这两个字段的写法各不相同。mihomo 用 up 和 down,不写单位默认按 Mbps 算。sing-box 叫 up_mbps 和 down_mbps,只收数字,留空就用 BBR。Stash 叫 up-speed 和 down-speed,也是可选的 Mbps。Surge 和 Loon 的文档里只有 download-bandwidth 一项。订阅里带了这些字段的,想改就按自己宽带的实测数往下调。

UDP 被限速或被认出来,官方给了四样对策

Hysteria 的文档不回避它在国内碰到的麻烦。端口跳跃那一页开头就说,有中国用户报告运营商会把 UDP 连接掐断或者限速,而且往往只盯着单个端口。

端口跳跃是第一样。客户端的地址可以写成多个端口或端口段,比如 example.com:20000-50000,初始连接随机挑一个端口,之后定期换到另一个。间隔默认 30 秒,最少 5 秒,2.8.0 起还能用 minHopInterval 和 maxHopInterval 让间隔在一个范围里随机。服务端在 Linux 上从 2.8.0 起能直接监听端口段,自动写好 nftables 或 iptables 的转发规则。文档也说清了边界,限制针对的是 UDP 本身时,跳端口没有用。

混淆是第二样。默认情况下 Hysteria 的流量像 HTTP/3,网络专门屏蔽 QUIC 或 HTTP/3、却还放行别的 UDP 时,就得开混淆。Salamander 给每个包取一段 8 字节随机盐,和预共享密钥一起算 BLAKE2b-256,再拿结果去异或整个包,出来的是没有特征的随机字节。2026-05-23 的 2.9.2 加了实验性的 Gecko,它包在 Salamander 外面,把 QUIC 握手用的长包头数据包拆成 2 到 8 片,每片大小和填充都随机,默认分片在 512 到 1200 字节之间。两种都要求两端密码一致,文档提醒,密码填错的样子和服务器没开一模一样。

第三样是模仿 Chrome。2026-08-01 的 2.11.0 起,官方客户端的 QUIC 握手默认调成和 Google Chrome 一致,让人更难靠握手指纹认出来。代价写在客户端配置文档里,Chrome 不声明支持 Ed25519,服务器用 Ed25519 证书就握不上手,得换 ECDSA 或 RSA 证书,ACME 签发的证书不受影响。

第四样是 2026-08-06 的 2.12.0 集成的 mimic,用 eBPF 给发出去的 UDP 包加上伪造的 TCP 头,让中间设备以为这是 TCP。Hysteria 1 有过一个叫 FakeTCP 的功能,2 代的比较文档把它列在缺失功能里,mimic 补上的是差不多的能力。它只支持 Linux,两端都得开,Hysteria 要以 root 运行,还不能和端口跳跃同时用。手机上的机场用户用不上它。

同一时期加的另外两样,和机场用户关系不大。2.9.0 的 Realms 靠 NAT 打洞让没有公网 IP 的人在家里开服务端,2.10.0 起支持的 ECH 能把 SNI 藏起来,前提是服务端也开了。

第三方客户端跟到了哪一步

机场用户手里的客户端几乎都是第三方实现。Hysteria 文档的第三方应用页写得很直白,他们控制不了第三方实现,这些实现未必有官方版本的最新功能和修复,也可能有自己的 bug。下面是按各家文档核对到的情况。

客户端或内核 端口跳跃 Gecko 混淆 带宽字段
mihomo ports 与 hop-interval v1.19.26 起 up、down
sing-box 1.11.0 起 1.14.0 起 up_mbps、down_mbps
Stash ports 与 hop-interval 文档列了 gecko up-speed、down-speed
Surge port-hopping iOS 5.20.0 起 只有 download-bandwidth
Loon server-ports 与 hop-interval 文档里只有 salamander 只有 download-bandwidth

mihomo 是 Clash Verge Rev、FlClash 这批客户端的内核,它在 2026-05-31 的 v1.19.26 里加了 Gecko 支持。sing-box 在 2026-08-31 的 1.14.0 里一口气补了 Gecko、Chrome 握手模仿、BBR 档位和随机跳跃间隔,文档另外提醒,官方的 userpass 认证在 sing-box 里没有别名,要把用户名和密码用冒号拼好填进 password。Xray 从 2026-01-23 的 v26.1.23 起有了 Hysteria 2 出站和传输层,支持端口跳跃和 Salamander。Surge 手册写明 iOS 5.8.0 起支持 Hysteria 2。

iPhone 这边,Hysteria 文档列了 Shadowrocket、Stash、Loon 和 Surge,Quantumult X 不在列表里,它官方 GitHub 项目的示例配置里也找不到 hysteria2 的写法。几款 iOS 客户端的其他差别,写在 iPhone 客户端怎么选里。

机场如果在服务端开了 Gecko,客户端版本太旧就连不上,现象和服务器宕机一样。碰到整组 hysteria2 节点超时而别的类型正常,先把客户端升到最新再说。

连不上时,先分清是 UDP 出不去还是配置不对

官方故障排除文档列的第一条报错是 timeout: no recent network activity,客户端发出去的包迟迟等不到服务器回话。可能的原因文档列了好几条,服务器没启动,端口被防火墙挡住,地址或端口不对,域名没解析到正确的 IP,混淆设置不对,还有服务端 Linux 内核太旧,文档点名不建议用 CentOS 7。

对机场用户来说,服务器那一侧的事管不着,能做的是把自己这头排除干净。同一份订阅里 TLS 类的节点能用、hysteria2 节点全部超时,说明问题多半出在 UDP 这条路上。换一个网络再试,家里宽带和手机流量各试一次,能分出是不是当前网络在卡 UDP。整组都连不上时,更新一次订阅,排除机场换了密码或混淆设置。报错变成 404 的,就是前面说的认证失败。

还有一类报错说证书验证失败,末尾是 certificate signed by unknown authority。文档给的原因是服务器用了自签证书,或者系统缺少对应的 CA,也可能正遭遇中间人攻击。订阅里带着 insecure 或 skip-cert-verify 为 true 的节点,客户端会跳过这一步检查,安全性跟着打折。

本站 28 家机场里写明协议的 8 家,写的是 VLESS、Trojan 和 AnyTLS,Hysteria2 一次也没出现,核对日多数是 2026-08-08 和 08-09。它和另外几种协议各自的位置,协议总览那篇放在一起比过。

常见问题

Hysteria2 节点的 up 和 down 要不要填

可以不填。官方文档规定,哪个方向填了带宽,哪个方向就用 Brutal,没填就用本地的拥塞控制,默认 BBR。要填就填自己宽带实际跑得到的数,文档专门警告,填的值超出网络能力只会造成拥塞、连接不稳。机场服务端开了 ignoreClientBandwidth 的话,填了也会被忽略。

Hysteria2 连接报 authentication error 和 404 是怎么回事

认证没通过。按协议规范,认证失败的请求会被服务器当成普通网页请求处理,没配伪装内容时一律回 404。官方排错文档列的原因是密码不对、连错了服务器、服务器的认证设置有误。用机场节点的,先更新订阅拿最新密码,再换一个节点试。

Hysteria 1 的节点能用 Hysteria2 客户端连吗

不能。官方文档写明两代完全不兼容,两头要装同一个大版本。2 代的第一个正式版 app/v2.0.0 发布于 2023-09-02,协议重新设计成伪装 HTTP/3 的样子,UDP 会话也改成了零往返建立。

机场的 Hysteria2 节点开了 Gecko 混淆,我的客户端能用吗

看客户端版本。Gecko 是官方 2026-05-23 的 2.9.2 才加的实验性混淆。按各家文档,mihomo 从 v1.19.26 起支持,sing-box 从 1.14.0 起,Surge 从 iOS 5.20.0 起,Stash 也列了它,Loon 的文档只写了 salamander。

Quantumult X 能用 Hysteria2 吗

按官方资料看不能。Quantumult X 的官方示例配置里有 vless、trojan、anytls,没有 hysteria2,Hysteria 文档的第三方应用列表里也没它。iPhone 上连 Hysteria2 节点,文档列的是 Shadowrocket、Stash、Loon 和 Surge。

参考来源

  1. Hysteria 2 文档,协议规范
  2. Hysteria 2 文档,完整客户端配置
  3. Hysteria 2 文档,完整服务端配置
  4. Hysteria 2 文档,端口跳跃
  5. Hysteria 2 文档,Mimic
  6. Hysteria 2 文档,故障排除
  7. Hysteria 2 文档,2 与 1 的比较
  8. Hysteria 2 文档,第三方应用
  9. Hysteria 发布页,app/v2.0.0 到 app/v2.12.3
  10. mihomo 文档,Hysteria2 节点
  11. mihomo v1.19.26 发布说明,支持 Hysteria2 的 Gecko 混淆
  12. sing-box 文档,Hysteria2 出站
  13. Xray 文档,Hysteria 出站
  14. Xray-core v26.1.23 发布说明
  15. Surge 手册,Hysteria 2 策略
  16. Stash 文档,支持的代理协议
  17. Loon 文档,节点格式
  18. Quantumult X 官方仓库,示例配置 sample.conf
  19. 本站 28 家机场的协议记录,多数核对于 2026-08-08 与 08-09

更新记录

  • 首次发布