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

> 来源 https://jichangtuijianweb.co/kepu/hysteria2-xieyi/，更新于 2026 年 9 月 20 日。机场推荐网（https://jichangtuijianweb.co/）原创内容。
> 分类 协议与内核。

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

订阅里类型为 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](https://jichangtuijianweb.co/cidian/#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](https://jichangtuijianweb.co/kehuduan/clash-verge-rev/)、FlClash 这批客户端的内核，它在 2026-05-31 的 v1.19.26 里加了 Gecko 支持。[sing-box](https://jichangtuijianweb.co/kehuduan/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 客户端怎么选](https://jichangtuijianweb.co/kepu/iphone-kehuduan-zenme-xuan/)里。

机场如果在服务端开了 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。它和另外几种协议各自的位置，[协议总览](https://jichangtuijianweb.co/kepu/daili-xieyi-zonglan/)那篇放在一起比过。

## 常见问题

### 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。

## 参考来源

- [Hysteria 2 文档，协议规范](https://v2.hysteria.network/docs/developers/Protocol/)
- [Hysteria 2 文档，完整客户端配置](https://v2.hysteria.network/zh/docs/advanced/Full-Client-Config/)
- [Hysteria 2 文档，完整服务端配置](https://v2.hysteria.network/zh/docs/advanced/Full-Server-Config/)
- [Hysteria 2 文档，端口跳跃](https://v2.hysteria.network/zh/docs/advanced/Port-Hopping/)
- [Hysteria 2 文档，Mimic](https://v2.hysteria.network/zh/docs/advanced/Mimic/)
- [Hysteria 2 文档，故障排除](https://v2.hysteria.network/zh/docs/advanced/Troubleshooting/)
- [Hysteria 2 文档，2 与 1 的比较](https://v2.hysteria.network/zh/docs/misc/2-vs-1/)
- [Hysteria 2 文档，第三方应用](https://v2.hysteria.network/docs/getting-started/3rd-party-apps/)
- [Hysteria 发布页，app/v2.0.0 到 app/v2.12.3](https://github.com/HyNetworks/hysteria/releases)
- [mihomo 文档，Hysteria2 节点](https://wiki.metacubex.one/config/proxies/hysteria2/)
- [mihomo v1.19.26 发布说明，支持 Hysteria2 的 Gecko 混淆](https://github.com/MetaCubeX/mihomo/releases/tag/v1.19.26)
- [sing-box 文档，Hysteria2 出站](https://sing-box.sagernet.org/configuration/outbound/hysteria2/)
- [Xray 文档，Hysteria 出站](https://xtls.github.io/config/outbounds/hysteria.html)
- [Xray-core v26.1.23 发布说明](https://github.com/XTLS/Xray-core/releases/tag/v26.1.23)
- [Surge 手册，Hysteria 2 策略](https://manual.nssurge.com/policies/hysteria2.html)
- [Stash 文档，支持的代理协议](https://stash.wiki/proxy-protocols/proxy-types)
- [Loon 文档，节点格式](https://nsloon.app/docs/Node/)
- [Quantumult X 官方仓库，示例配置 sample.conf](https://github.com/crossutility/Quantumult-X/blob/master/sample.conf)
- 本站 28 家机场的协议记录，多数核对于 2026-08-08 与 08-09
