Hysteria 2
Hysteria 2 是基于 QUIC 协议的高性能代理协议,于 2023 年 9 月正式发布。它是 Hysteria 1 的完全重写版本,在协议安全性、流量伪装和性能上均有显著提升。Hysteria 2 的核心设计目标是在高延迟、高丢包的网络环境下(如中美普通线路、移动网络)提供优于 TCP 协议的连接稳定性和传输速度。
背景与演进
Hysteria 1
Hysteria 1 于 2021 年前后发布,基于自定义的 QUIC 实现,使用修改版的拥塞控制算法来对抗网络中的丢包。它在当时以"暴力带宽占用"著称——即使在丢包率较高的线路上,也能保持较高的吞吐量。
然而,Hysteria 1 的流量特征比较明显,其协议握手和数据传输方式与标准 QUIC 流量存在可识别的差异。
Hysteria 2 的改进
Hysteria 2 在 Hysteria 1 的基础上进行了全面重设计:
- 基于标准的 QUIC 实现(而非自定义魔改版),流量特征更接近正常的 HTTP/3 流量
- 引入了 Salamander 混淆层,将 QUIC 数据包伪装为普通的 UDP 流量
- 重新设计了身份认证机制,使用 HTTP/3 伪装作为协议握手的外壳
- Brutal 拥塞控制算法经过优化,更加稳定
关于 Hysteria 1 和 Hysteria 2
Hysteria 1 和 Hysteria 2 是不兼容的两个协议版本,不能混用。目前社区推荐直接使用 Hysteria 2。Hysteria 1 的官方仓库已停止主要功能开发,仅维护安全补丁。
核心技术
基于 QUIC 的传输
QUIC 是由 Google 设计、IETF 标准化的传输层协议,是 HTTP/3 的底层传输协议。它运行在 UDP 之上,但提供了类似 TCP 的可靠传输能力,同时具备以下优势:
- 0-RTT 或 1-RTT 握手:连接建立速度比 TLS over TCP 更快
- 多路复用:单个连接可以承载多条独立的数据流,一条流的丢包不影响其他流
- 连接迁移:网络切换(如 Wi-Fi 切换到 4G)时无需重新建立连接
- 内置 TLS 1.3:加密是 QUIC 的强制要求,不存在明文传输
Hysteria 2 在标准 QUIC 的基础上构建,因此其流量从协议层面看与普通 HTTP/3 流量高度相似。
Brutal 拥塞控制
标准 TCP 和 QUIC 的拥塞控制算法(如 BBR、CUBIC)设计目标是"公平共享"——在检测到网络拥塞时自动降速,让多个流量源可以和谐共存。
然而在跨境代理场景中,线路本身的不稳定性(丢包、高延迟)往往会让标准拥塞控制算法误判为网络拥塞,从而主动降低发送速度。
Brutal 算法采用了不同的策略:
客户端设定目标带宽(如 100 Mbps)
|
| 不论当前丢包率如何,持续以接近目标带宽发送数据
| 通过 FEC(前向纠错)或重传来弥补丢失的数据包
v
即使在 5–10% 的丢包率下,仍能维持接近目标带宽的吞吐量
这就是 Hysteria 2 在高丢包线路上性能优越的根本原因。
关于 Brutal 的使用
Brutal 算法会持续占用你设定的目标带宽,不会根据网络状况自动调节。如果目标带宽设置过高,可能会对线路上的其他用户造成影响,也可能触发服务商的流量异常检测。建议将目标带宽设置为实际可用带宽的 70–80%,而不是填写一个极大的数值。
HTTP/3 伪装
Hysteria 2 使用 HTTP/3 协议作为握手和身份验证的外壳。当客户端连接到 Hysteria 2 服务端时,会先发起一个看起来像普通 HTTP/3 请求的握手:
客户端
|
| QUIC 连接(UDP 443 端口)
| HTTP/3 POST 请求(携带 Hysteria 2 认证信息)
v
服务端
|
| 验证认证信息
| - 认证成功 → 建立代理通道
| - 认证失败 → 返回正常的 HTTP 响应(伪装为普通 Web 服务器)
v
代理通道 / 回落 Web 响应
对于不知道密码的探测者,服务端表现为一个普通的 HTTP/3 Web 服务器,与真实的 HTTPS/HTTP3 站点无法从外部区分。
Salamander 混淆
Salamander 是可选的额外混淆层,将 QUIC 数据包进一步变形为看起来像随机 UDP 数据的格式,以应对那些专门识别 QUIC 协议特征的检测系统。
在大多数场景下,标准的 HTTP/3 伪装已经足够,无需额外启用 Salamander。仅在明确遭遇针对 QUIC 协议的封锁时再考虑启用。
优缺点
| 优点 | 缺点 |
|---|---|
| UDP 传输,在高延迟高丢包线路上表现出色 | UDP 可能被部分网络环境封锁或限速 |
| Brutal 算法能充分利用有限带宽 | 依赖 UDP,在 UDP 受限的企业/校园网中可能不可用 |
| HTTP/3 伪装,流量特征自然 | 需要域名和有效的 TLS 证书 |
| 支持端口跳跃(Port Hopping),对抗基于端口的限速 | 在网络条件良好时,相对 TCP 直连方案优势不明显 |
| 配置简单,单一二进制文件 | Brutal 算法主动占用带宽,可能引发机场流量异常告警 |
| 连接迁移支持,网络切换时不断线 | 部分老旧客户端尚不支持 Hysteria 2 |
| 多路复用,减少连接建立开销 | — |
与同类协议的对比
| 对比维度 | Hysteria 2 | TUIC v5 | VLESS + Reality |
|---|---|---|---|
| 传输层 | QUIC(UDP) | QUIC(UDP) | TCP |
| 拥塞控制 | Brutal(激进) | 标准 QUIC | 标准 TCP |
| 是否需要域名 | 是 | 是 | 否 |
| 是否需要证书 | 是 | 是 | 否 |
| 高丢包性能 | 极强 | 强 | 一般 |
| UDP 封锁风险 | 有 | 有 | 无 |
| 配置复杂度 | 低 | 低 | 中 |
| 流量伪装 | HTTP/3 | QUIC | TLS 1.3 |
| 端口跳跃 | 支持 | 不支持 | 不支持 |
| 客户端支持 | 广 | 较广 | 广 |
端口跳跃(Port Hopping)
端口跳跃是 Hysteria 2 独有的对抗基于端口限速或封锁的机制。原理如下:
客户端配置端口范围,如 20000-50000
|
| 每隔一段时间(如 30 秒),随机切换到范围内的另一个端口
| 由于 QUIC 的连接迁移特性,切换端口不会中断已有连接
v
即使某些端口被封锁或限速,客户端也会快速跳转到其他端口
服务端需要在对应的端口范围内开放 UDP 防火墙规则,并绑定对应端口范围。
这一特性在应对运营商对特定端口进行 QoS 限速时尤为有效。
适用场景
推荐使用 Hysteria 2 的场景:
- 中美之间的普通线路(非 CN2 GIA、非 IPLC 的高丢包线路)
- 移动网络(4G/5G),UDP 性能通常优于 TCP
- 线路丢包率持续高于 2% 的环境
- 需要端口跳跃对抗运营商 QoS 限速
- 与 TCP 代理方案(如 VLESS + Reality)互补,作为备用或主力方案
- 对 UDP 没有明确封锁的网络环境
不推荐单独依赖 Hysteria 2 的场景:
- 企业网络、校园网等可能封锁 UDP 的环境
- 对 UDP 有明确封锁的服务商(此时应优先使用 TCP 方案)
- 网络条件极好的优质专线(IPLC/IEPL)——此时 TCP 协议的优势已足够
服务端部署参考
前置条件
- 一台公网 VPS,已开放 UDP 443 端口(或其他目标端口)
- 一个指向服务器 IP 的域名
- 有效的 TLS 证书(可以使用 acme.sh 或 Caddy 自动申请)
安装 Hysteria 2
官方提供了一键安装脚本:
bash <(curl -fsSL https://get.hy2.sh/)
安装完成后,二进制文件位于 /usr/local/bin/hysteria,配置文件模板位于 /etc/hysteria/。
也可以从 GitHub Releases 手动下载对应系统架构的二进制文件:
# 查看最新版本并下载
wget https://github.com/apernet/hysteria/releases/latest/download/hysteria-linux-amd64
chmod +x hysteria-linux-amd64
mv hysteria-linux-amd64 /usr/local/bin/hysteria
申请 TLS 证书
使用 acme.sh 申请 Let's Encrypt 证书:
# 安装 acme.sh
curl https://get.acme.sh | sh
# 申请证书(确保 80 端口可访问或使用 DNS 验证)
~/.acme.sh/acme.sh --issue -d your.domain.com --webroot /var/www/html
# 安装证书
~/.acme.sh/acme.sh --install-cert -d your.domain.com \
--cert-file /etc/hysteria/cert.crt \
--key-file /etc/hysteria/private.key \
--reloadcmd "systemctl restart hysteria-server"
Hysteria 2 也支持通过 ACME 自动申请证书,可以在配置文件中直接声明,无需手动操作。
服务端配置文件(/etc/hysteria/config.yaml)
基础配置(手动指定证书):
listen: :443
tls:
cert: /etc/hysteria/cert.crt
key: /etc/hysteria/private.key
auth:
type: password
password: your-strong-password
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
bandwidth:
up: 1 gbps
down: 1 gbps
使用 ACME 自动申请证书:
listen: :443
acme:
domains:
- your.domain.com
email: your@email.com
auth:
type: password
password: your-strong-password
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
多用户配置:
listen: :443
tls:
cert: /etc/hysteria/cert.crt
key: /etc/hysteria/private.key
auth:
type: userpass
userpass:
user1: password1
user2: password2
user3: password3
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
配置字段说明:
| 字段 | 说明 |
|---|---|
listen | 服务端监听地址和端口,UDP 协议 |
tls.cert / tls.key | TLS 证书和私钥路径 |
auth.password | 客户端认证密码 |
masquerade.proxy.url | 伪装目标网站,非 Hysteria 连接将被代理到此 URL |
bandwidth.up/down | 服务端的上下行带宽,用于 Brutal 算法协商 |
启动服务
systemctl enable hysteria-server
systemctl start hysteria-server
systemctl status hysteria-server
# 查看日志
journalctl -u hysteria-server -f
开放防火墙规则
# 开放 UDP 443 端口(必须)
ufw allow 443/udp
# 如果使用端口跳跃,开放对应范围
ufw allow 20000:50000/udp
启用端口跳跃(可选)
服务端配置:
listen: :443,20000-50000
客户端连接时使用端口范围:your.domain.com:443,20000-50000
客户端配置参考
sing-box 客户端配置
{
"type": "hysteria2",
"tag": "hy2-node",
"server": "your.domain.com",
"server_port": 443,
"password": "your-strong-password",
"up_mbps": 100,
"down_mbps": 300,
"tls": {
"enabled": true,
"server_name": "your.domain.com"
}
}
up_mbps 和 down_mbps 是你希望 Brutal 算法使用的目标带宽(单位 Mbps),建议根据实际线路带宽的 70–80% 设置。
Mihomo 客户端配置
proxies:
- name: "hy2-node"
type: hysteria2
server: your.domain.com
port: 443
password: your-strong-password
up: "100 Mbps"
down: "300 Mbps"
sni: your.domain.com
客户端支持
| 平台 | 客户端 | 支持状态 |
|---|---|---|
| Windows / macOS / Linux | Mihomo | 支持 |
| Windows / macOS / Linux | sing-box / v2rayN | 支持 |
| Windows / macOS / Linux | Xray-core | 支持(内置 Hysteria 2) |
| iOS | Shadowrocket | 支持 |
| iOS | Stash | 支持 |
| iOS | Loon | 支持 |
| iOS | Surge | 支持 |
| iOS | Quantumult X | 不支持 |
| Android | NekoBox | 支持 |
| Android | Husi | 支持 |
| Android | Exclave | 支持 |
| Linux | dae | 支持 |
常见问题
Q:Hysteria 2 会不会用尽我的服务器带宽?
Brutal 算法会按照你设定的目标带宽持续发送数据,但只在实际有数据传输时才会占用带宽。闲置时不消耗带宽。服务端配置的 bandwidth 字段是理论上限,实际占用取决于客户端的请求量。
Q:连接失败,提示 UDP 不可用怎么办?
检查以下几点:
- 服务器防火墙是否已开放 UDP 443 端口
- 部分 VPS 提供商(如某些 NAT VPS)可能不支持 UDP 或对 UDP 有端口限制
- 客户端所在网络是否封锁了 UDP 出站流量(企业/校园网常见)
- 尝试更换端口
Q:带宽设置多少合适?
推荐将 up_mbps 和 down_mbps 设置为实测带宽的 70–80%。例如,如果你的下行带宽测试结果为 200 Mbps,建议设置 down_mbps: 150。设置过高会导致过度重传,反而降低实际吞吐量,并可能被机场或运营商标记为异常流量。
Q:和 TUIC 相比选哪个?
两者都是基于 QUIC 的优秀协议,主要区别在于:
- Hysteria 2 使用 Brutal 激进拥塞控制,在高丢包环境中更有优势
- TUIC 使用标准 QUIC 拥塞控制,行为更"保守",对其他流量影响更小
- 实际使用中,两者性能差异通常不大,选择支持度更好的客户端所支持的协议即可
Q:Hysteria 2 是否支持 UDP 转发(如游戏加速)?
是的,Hysteria 2 原生支持 UDP over QUIC,可以用于转发 UDP 游戏流量,这是 TCP 代理协议所不具备的优势。
延伸阅读
- TUIC 协议 — 同样基于 QUIC 的竞争对手,设计理念略有不同
- VLESS 协议 — TCP 方向的最强竞争者,适合网络条件好的线路
- 代理协议总览 — 回到协议总览页面
- Hysteria 官方仓库:github.com/apernet/hysteria