4764 字
24 分钟
QUIC 协议与 Hysteria2 进阶调优:Brutal 算法、Realm 穿透与 2026 实战

引言:为什么需要「进阶」调优#

基础篇已经讲清楚:Hysteria2 基于 QUIC,用 Brutal 算法在丢包环境下比 TCP 方案快 30-50%。

但把 Hysteria2 跑起来,和把它调优到极致,是两回事。

实际部署中,90% 的用户只改了 up / down 两个参数就完了——这等于买辆跑车只挂了一档。本文从协议栈原理出发,把 Hysteria2 的每个可调参数、每种抗封锁手段、每个 2026 年新增特性讲透。


一、QUIC 协议栈:不止是「UDP 版 TCP」#

1.1 QUIC 的核心创新#

QUIC 由 Google 在 2012 年提出,2018 年成为 IETF 标准(RFC 9000),是 HTTP/3 的底层传输协议。它与 TCP 的本质区别不止于传输层:

TCP 协议栈:
应用层 → TLS(可选)→ TCP → IP
QUIC 协议栈:
应用层 → HTTP/3 → QUIC(内置 TLS 1.3)→ UDP → IP

关键差异:

维度TCP + TLS 1.3QUIC + TLS 1.3
握手延迟2-3 RTT1 RTT(首次)/ 0 RTT(恢复)
队头阻塞连接级阻塞(一个包丢失阻塞所有流)流级独立(一个流丢包不影响其他流)
连接迁移不支持(NAT 重绑定 = 断连)Connection ID 机制,IP 变化不中断
加密层可选,应用层协商强制,握手即加密
拥塞控制内核态(修改需改内核)用户态(随意定制算法)

1.2 连接迁移:移动网络的杀手锏#

TCP 的最大弱点之一:你的手机从 Wi-Fi 切换到 5G,NAT 重新分配 IP,TCP 连接瞬间断开。

QUIC 用 Connection ID(CID) 解决这个问题:

TCP: [客户端 IP:端口] ←→ [服务端 IP:端口] (IP 变了 = 连接失效)
QUIC: [CID] ←→ [服务端] (IP 变了,CID 不变 = 连接保持)

这对代理场景意义重大:你在家用 Wi-Fi 开着代理,出门切到 4G,Hysteria2 连接不中断

1.3 Hysteria2 对标准 QUIC 的修改#

Hysteria2 并未使用标准 QUIC 实现(如 Google quiche 或 Cloudflare quiche)。它在 quic-go 库基础上做了两处关键修改:

  1. 替换拥塞控制算法 → Brutal(核心)
  2. 重新设计认证和伪装层 → 兼容 HTTP/3 握手

标准 QUIC 实现使用 BBR 或 Cubic 拥塞控制,遇到丢包仍会降速。Hysteria2 的修改使得它可以无视丢包、按预设速率全速发送


二、Brutal 拥塞控制:数学机制详解#

2.1 核心公式#

Brutal 算法的设计基于一个简单假设:代理场景中的丢包,大多不是因为网络拥塞

设:

  • B_target = 目标带宽(用户配置)
  • P_loss = 当前丢包率(实时测算)
  • B_send = 实际发送速率
B_send = B_target / (1 - P_loss)

举例:

目标带宽丢包率实际发送速率对端有效接收
100 Mbps0%100 Mbps100 Mbps
100 Mbps5%~105 Mbps~100 Mbps
100 Mbps10%~111 Mbps~100 Mbps
100 Mbps20%~125 Mbps~100 Mbps

关键点:Brutal 通过「过量发送」来补偿丢包,确保对端收到的有效数据量等于目标带宽。

2.2 与传统算法的本质区别#

BBR 行为:
1. 慢启动:指数增长发送窗口
2. 探测带宽:周期性探测最大带宽
3. 丢包检测:降速(认为网络拥塞)
4. 恢复:缓慢爬升
Brutal 行为:
1. 按目标带宽发送(固定速率)
2. 实时测算丢包率
3. 丢包 → 增加发送速率(补偿)
4. 持续维持目标速率

2.3 为什么不能设得太高#

Brutal 的「过量发送」机制有一个前提:目标带宽 ≤ 实际可用带宽

如果设得过高:

实际情况:链路最大可用带宽 = 100 Mbps
错误配置:B_target = 500 Mbps
结果:
- 发送速率 = 500 / (1 - P_loss) ≈ 500-625 Mbps
- 实际可用只有 100 Mbps
- 超出部分全部被丢弃
- 对端有效接收 << 100 Mbps(因为大量重传包也挤占了带宽)
- 延迟飙升(bufferbloat)

正确做法:用 Speedtest 或 iperf3 测出实际国际出口带宽,乘以 0.8-0.9 作为 up / down 值。

2.4 带宽协商流程(服务端 vs 客户端)#

Hysteria2 的带宽协商是一个容易混淆的点:

决策树:
服务端配置了 bandwidth?
├─ 是 → 服务端强制使用 Brutal,客户端带宽设置被忽略
│ (服务端 ignoreClientBandwidth 默认 false,即不忽略客户端)
└─ 否 → 以客户端设置的带宽为准
两端都没配置 bandwidth?
└─ 双方都使用 BBR 拥塞控制(非 Brutal)

推荐配置策略

场景服务端 bandwidth客户端 bandwidth说明
自用节点不配置配置(按实际带宽)灵活,客户端控制
多人共享配置(限速)可选服务端强制限速
VPS 带宽有限配置(≤VPS 带宽)不配置防止跑满 VPS

三、QUIC 底层参数调优#

3.1 流控窗口(Flow Control)#

Hysteria2 的 QUIC 层有两个关键的接收窗口参数:

quic:
initStreamReceiveWindow: 8388608 # 8 MB,单流初始接收窗口
maxStreamReceiveWindow: 8388608 # 8 MB,单流最大接收窗口
initConnReceiveWindow: 20971520 # 20 MB,连接级初始接收窗口
maxConnReceiveWindow: 20971520 # 20 MB,连接级最大接收窗口

这些参数控制什么?

接收窗口决定了「在不等待确认的情况下,最多能发送多少数据」。

  • 窗口太小 → 高速网络下发送端频繁等待确认,带宽利用率低
  • 窗口太大 → 高丢包环境下,大量在途数据需要重传,浪费带宽

调优建议

网络环境流窗口连接窗口说明
低延迟(<50ms)+ 高带宽(>500Mbps)16 MB40 MB避免窗口成为瓶颈
普通跨境(100-200ms)+ 中带宽8 MB20 MB默认值,适合大多数场景
高延迟(>300ms)+ 低带宽(<50Mbps)4 MB10 MB减少在途数据量

⚠️ 修改这些参数需要重启服务,且两端都要改。大多数用户不需要动。

3.2 maxIdleTimeout:连接保活#

quic:
maxIdleTimeout: 30s

这个参数决定:「当连接上没有数据传输时,多久后断开」。

  • 设置太短 → 频繁断连重连,浏览体验差
  • 设置太长 → 大量空闲连接占用服务端资源

推荐值

使用场景maxIdleTimeout
手机移动网络(频繁切换)60s
桌面浏览器30s(默认)
服务器间隧道120s

3.3 disablePathMTUDiscovery#

quic:
disablePathMTUDiscovery: false # 默认 false(开启)

MTU 发现允许 QUIC 自动探测路径最大传输单元,避免 IP 分片。

除非遇到兼容性问题,否则保持默认(开启)。某些老旧路由器对大型 UDP 包处理不当,此时可尝试设为 true


四、Realm 模式:无公网 IP 也能跑服务端(2026 新特性)#

4.1 什么是 Realm?#

传统 Hysteria2 部署要求:服务端必须有公网 IP + 开放 UDP 端口。

Realm 模式打破了这个限制。它让 Hysteria2 服务端可以运行在:

  • 家庭宽带(NAT 后面,无公网 IP)
  • 手机热点
  • 公司内网
  • 无公网 IP 的廉价 VPS(LXC 容器)

核心机制:通过牵手(Rendezvous)服务器帮助客户端和服务端进行 UDP 打洞,打洞成功后流量直连,不经过牵手服务器

传统模式:
客户端 → [互联网] → 服务端(需要公网 IP)
Realm 模式:
客户端 → [牵手服务器] ←→ 服务端(NAT 后面)
打洞成功后:
客户端 ←→ 服务端(直连,不经过牵手服务器)

4.2 牵手服务器#

官方牵手服务器:realm.hy2.io(密码:public

也可以自建牵手服务器(推荐,隐私更好)。

4.3 服务端配置(Realm 模式)#

# 关键:listen 改为 realm:// URI
listen: realm://[email protected]/my-home-server
auth:
type: password
password: your-strong-password
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
# Realm 可选调优参数(2026 ver1.09+)
realm:
stunServers:
- stun.nextcloud.com:3478
- global.stun.twilio.com:3478
stunTimeout: 5s
punchTimeout: 5s
heartbeatInterval: 30s
insecure: false
ipMode: dual # dual / ipv4 / ipv6
portMapping:
enabled: true # UPnP/NAT-PMP 自动端口映射(2026 新功能)
timeout: 30s
lifetime: 10m

4.4 客户端配置(Realm 模式)#

{
"type": "hysteria2",
"server": "realm://[email protected]/my-home-server",
"password": "your-strong-password",
"tls": {
"enabled": true,
"server_name": "my-home-server" // 可自定义,用于 TLS SNI
}
}

4.5 Realm + WARP:隐藏真实 IP(进阶玩法)#

这是 2026 年最具创新性的用法之一:

原理

  1. 服务端安装 Cloudflare WARP(WireGuard 协议)
  2. WARP 为服务端分配一个 Cloudflare 边缘网络的 IP
  3. Realm 使用 WARP IP 进行打洞
  4. 客户端实际连接到 Cloudflare 边缘节点

效果

  • 服务端真实 IP 被隐藏(客户端只知道 Cloudflare IP)
  • 变相在 Cloudflare CDN 上运行 Hysteria2
  • 对抗服务端 IP 被封的概率大幅降低

前提条件:VPS 需支持 WireGuard 内核模块。


五、OBFS 混淆:2026 年的对抗升级#

5.1 为什么需要 OBFS?#

Hysteria2 的流量在默认情况下伪装成 HTTP/3——这对被动 DPI(深度包检测)是有效的。

但主动探测可以发一个 HTTP/3 请求到你的服务器端口,如果返回的是正常网站内容,那就是代理服务器。

OBFS 混淆通过以下方式对抗检测:

OBFS 类型原理抗检测效果CPU 开销
(默认)标准 HTTP/3 握手★★☆☆
salamander所有包内容加密为随机字节★★★☆低(+20-30% CPU)
gecko(实验性,2026)salamander + 握手包分片随机化★★★★中(+40-50% CPU)

5.2 salamander 配置#

# 服务端
obfs:
type: salamander
salamander:
password: your-obfs-password-here
# 客户端(sing-box)
"obfs": {
"type": "salamander",
"password": "your-obfs-password-here"
}
# 客户端(Clash Meta)
obfs: salamander
obfs-password: your-obfs-password-here

💡 服务端和客户端 OBFS 密码必须相同,否则握手失败。

5.3 gecko 配置(推荐 2026 墙内使用)#

gecko 在 salamander 基础上,额外将 QUIC 握手包拆分为多个大小随机的分片:

# 服务端
obfs:
type: gecko
gecko:
password: your-obfs-password-here
minPacketSize: 512 # 分片最小字节数
maxPacketSize: 1200 # 分片最大字节数(必须 ≥ minPacketSize 且 ≤ 2048)

效果

  • DPI 看到的 UDP 流量包大小完全随机
  • 无法通过分析包长特征识别 Hysteria2 流量
  • 对抗主动探测的能力显著增强

代价

  • 握手阶段延迟增加(分片 + 重组)
  • CPU 开销比 salamander 更高

5.4 OBFS 选择建议#

网络环境推荐 OBFS原因
墙外 VPS性能最优,HTTP/3 伪装已足够
墙内,UDP 未限速salamander平衡安全性和性能
墙内,UDP 疑似限速gecko最强抗检测,牺牲部分性能
移动网络(4G/5G)salamander移动网络 DPI 相对宽松

六、端口跳跃(Port Hopping):防端口级封锁#

6.1 工作原理#

GFW 可以通过「端口指纹」识别代理流量,然后封锁该端口。

端口跳跃让服务端监听一个端口范围(如 20000-30000,共 10001 个端口),客户端每 30 秒随机切换一个端口。GFW 难以全部封锁。

服务端:监听 20000-30000/udp(通过 iptables/nftables 重定向到主端口)
客户端:每 30 秒在 20000-30000 范围内随机选一个端口发包

6.2 服务端配置#

listen: :20000-30000 # 监听 10001 个 UDP 端口

前置要求

  • Linux 系统
  • 已安装 nftables 或 iptables
  • Hysteria2 以 root 或 CAP_NET_ADMIN 权限运行
  • VPS 防火墙放行整个 UDP 端口范围
Terminal window
# 防火墙放行示例(20000-30000 UDP)
ufw allow 20000:30000/udp
# 或使用 iptables 直接配置
iptables -A INPUT -p udp --dport 20000:30000 -j ACCEPT

6.3 客户端配置#

sing-box

{
"server_ports": "20000:30000",
"password": "your-password"
}

Clash Meta

proxies:
- name: "hysteria2-port-hopping"
type: hysteria2
server: your-domain.com
port: 443 # 初始端口(会被 server_ports 覆盖)
server_ports: "20000:30000"
password: your-password

6.4 端口跳跃 + OBFS 组合#

这是 2026 年推荐的最强抗封锁配置:

# 服务端
listen: :20000-50000
obfs:
type: gecko
gecko:
password: your-obfs-password
minPacketSize: 512
maxPacketSize: 1200
  • 端口跳跃 → 防端口级封锁
  • gecko OBFS → 防流量特征识别
  • 组合使用 → GFW 难以同时对抗

七、2026 年中国运营商 UDP 限速现状与对抗#

7.1 三大运营商 UDP 限速情况(2026 Q2)#

运营商UDP 限速策略影响程度应对方案
电信国际出口 UDP 限速至 1-2 Mbps(部分地区)严重OBFS + 端口跳跃,或切换 TCP 方案
联通相对宽松,国际 UDP 限速不明显轻微正常使用 Hysteria2
移动部分地区国际 UDP 完全阻断严重必须切换 VLESS+Reality
教育网对 UDP 流量 QoS 较严重中等端口跳跃 + 降低 obfs 开销

7.2 检测 UDP 是否被限速#

Terminal window
# 在服务端跑 iperf3 UDP 测试
# 服务端:
iperf3 -s
# 客户端:
iperf3 -c your-server.com -u -b 100M -t 30
# 观察 UDP 实际吞吐量,如果远低于 TCP,说明被限速

7.3 对抗策略#

策略一:降低 UDP 包发送速率

# 调低 up/down,让 UDP 流量看起来不那么「激进」
bandwidth:
up: 30 mbps # 原本可能设 100 mbps
down: 50 mbps

策略二:开启 OBFS

OBFS 不改变 UDP 流量的网络层特征,但能让 DPI 无法识别为代理流量,降低被针对性限速的概率。

策略三:端口跳跃

某些运营商按「目的端口」进行 QoS。端口跳跃让流量分散到多个端口,降低单一端口被限速的概率。

策略四:终极方案——切回 TCP

如果 UDP 限速严重且无法避开,Hysteria2 不适合当前网络环境。切换到 VLESS+Reality 或 Trojan。


八、全平台客户端配置详解#

8.1 sing-box(推荐,功能最完整)#

{
"outbounds": [
{
"type": "hysteria2",
"tag": "hy2-main",
"server": "your-domain.com",
"server_port": 443,
"password": "your-password",
"obfs": {
"type": "salamander",
"password": "your-obfs-password"
},
"tls": {
"enabled": true,
"server_name": "your-domain.com",
"insecure": false
},
"up_mbps": 50,
"down_mbps": 200,
"lazy": false
}
]
}

关键字段说明

字段说明
up_mbps客户端上传速度(= 服务端下载速度)
down_mbps客户端下载速度(= 服务端上传速度)
lazy: false2026 新默认,启动即建连(改为 true 则首次请求才建连)
obfs必须与服务端配置匹配

6.2 Clash Meta(mihomo,最流行)#

proxies:
- name: "hysteria2-jp"
type: hysteria2
server: your-domain.com
port: 443
password: your-password
up: "50 Mbps"
down: "200 Mbps"
obfs: salamander
obfs-password: your-obfs-password
sni: your-domain.com
# skip-cert-verify: false # 生产环境必须为 false
- name: "hysteria2-port-hopping"
type: hysteria2
server: your-domain.com
port: 443
server_ports: "20000:50000" # 端口跳跃
password: your-password
up: "50 Mbps"
down: "200 Mbps"

8.3 Shadowrocket(iOS,最方便)#

图形界面配置步骤:

  1. 点击右上角「+」→ 选择「Hysteria2」
  2. 填写:
    • Server:服务器域名或 IP
    • Port:端口(或端口范围 20000-50000
    • Password:认证密码
    • OBFS Password:如果服务端开启了 OBFS
    • Up / Down:带宽设置(单位 Mbps)
    • SNI:TLS SNI(通常是域名)
  3. 保存后点击测试

8.4 Hysteria2 官方客户端(最简单)#

server: your-domain.com:443
auth: your-password
bandwidth:
up: 50 mbps
down: 200 mbps
obfs:
type: salamander
salamander:
password: your-obfs-password
socks5:
listen: 127.0.0.1:1080
http:
listen: 127.0.0.1:8080
# TUN 模式(需要 root / 管理员权限)
tun:
enabled: true
device: tun0
auto_route: true

九、ACL 高级用法:精细化流量控制#

9.1 为什么需要 ACL?#

默认情况下,Hysteria2 服务端转发所有客户端请求。但实际应用中,你可能需要:

  • 禁止访问某些网站(如 P2P 下载,节省流量)
  • 国内域名直连(不走代理)
  • 特定网站走特定出口(如 Netflix 走美国住宅 IP)

9.2 内联 ACL 规则#

acl:
inline:
# 国内 GeoIP 直连(不走代理)
- reject(geoip:cn)
# 屏蔽 P2P
- reject(suffix:torrent.com)
- reject(keyword:bt)
# Netflix 走专用出口
- proxy(geosite:netflix, outbound:netflix-proxy)
# 默认放行
- allow(all)

9.3 出站规则(Outbounds)配合 ACL#

outbounds:
- name: default # 第一个是默认出站
type: direct
- name: netflix-proxy
type: socks5
socks5:
addr: us-residential-proxy.com:1080
username: user
password: pass
- name: china-direct
type: direct
direct:
mode: 4 # 仅 IPv4

9.4 GeoIP / GeoSite 数据库#

Hysteria2 使用 v2ray 格式的 GeoIP / GeoSite 数据库:

acl:
inline:
- reject(geoip:cn)
- reject(geosite:netflix)
# 自动下载最新数据库(取消注释以自定义路径)
# geoip: /path/to/geoip.dat
# geosite: /path/to/geosite.dat
# geoUpdateInterval: 168h # 每周更新

十、性能调优实战:从参数到硬件#

10.1 带宽参数调优步骤#

第一步:测速

Terminal window
# 在服务端跑 iperf3 测国际带宽
# 服务端:
iperf3 -s
# 本地(需要能连到服务端的机器):
iperf3 -c your-server.com -p 5201 -t 30

第二步:计算 80-90% 值

实测国际带宽:120 Mbps
设置值:120 × 0.85 ≈ 100 Mbps

第三步:分方向配置

# 服务端(限制每个客户端的最大速度)
bandwidth:
up: 100 mbps # 服务端 → 客户端(客户端下载)
down: 50 mbps # 客户端 → 服务端(客户端上传)

10.2 服务端硬件选型#

QUIC 在用户态执行加密计算,对 CPU 要求比 TLS/TCP 方案更高:

并发用户数推荐 CPU推荐内存开启 OBFS 后
1-51 vCPU1 GB+20% CPU
10-202 vCPU2 GB+30% CPU
50+4 vCPU4 GB+50% CPU

⚠️ ARM 架构(如 Oracle Cloud ARM)的 QUIC 性能明显优于 x86,同等预算下优先选 ARM。

10.3 协议嗅探(Sniff)调优#

协议嗅探能让服务端从流量中提取真实域名,配合 ACL 做域名级路由:

sniff:
enable: true
timeout: 2s
rewriteDomain: false
tcpPorts: 80,443
udpPorts: all

注意事项

  • 嗅探有轻微性能开销(约 1-2% CPU)
  • rewriteDomain: true 会修改请求中的域名(某些场景会出问题)
  • 如果 ACL 里没有域名规则,可以关闭嗅探以提升性能

十一、Hysteria2 vs TUIC v5:2026 年 QUIC 协议对决#

11.1 协议对比#

维度Hysteria2TUIC v5
拥塞控制Brutal(固定速率)BBR(标准 QUIC)
高丢包表现极好(Brutal 专为丢包设计)好(BBR 也能适应)
协议伪装HTTP/3QUIC(标准)
OBFS 支持salamander / gecko无(依赖外部工具)
端口跳跃原生支持需外部工具
客户端支持Clash Meta / sing-box / SR / v2rayNsing-box / TUIC 官方客户端
开发活跃度活跃(apernet 维护)中等
适合场景速度优先,恶劣网络平衡,标准 QUIC

11.2 2026 年实测:GFW 对 QUIC 的对抗#

根据多个来源的实测数据(2026 Q2):

  • Hysteria2 + gecko OBFS:在国内大部分地区可稳定使用 30+ 天
  • TUIC v5(无 OBFS):部分地区 7-14 天内被针对性限速
  • 标准 QUIC(无伪装):平均 3-7 天内被识别

结论:2026 年使用 QUIC 协议,必须配合 OBFS 混淆(Hysteria2 的 gecko 是当前最佳选择)。


十二、常见问题诊断#

问题一:速度不如预期#

排查步骤

  1. 检查 up / down 是否设置过低
  2. 用 iperf3 测实际国际带宽,对比 Hysteria2 速度
  3. 检查是否开启 OBFS(CPU 瓶颈会导致速度下降)
  4. tcpdump 抓包,确认是否是 UDP 被限速
Terminal window
# 服务端抓 UDP 包,看是否有丢包
tcpdump -i eth0 udp port 443 -vv

问题二:连接频繁断开#

可能原因

原因排查方法解决方案
NAT 超时检查 maxIdleTimeout增大到 60s
UDP 被运营商阻断用 TCP 方案对比测试切换 VLESS+Reality
端口被封换端口测试开启端口跳跃
OBFS 密码不匹配检查服务端和客户端配置确认为相同密码

问题三:iOS Shadowrocket 连接成功但无流量#

常见原因

  • up / down 未设置或设置过低(Shadowrocket 不会自动测算)
  • TLS SNI 配置错误
  • 服务端证书问题(尝试开启 skip-cert-verify 排查)

总结:进阶调优检查清单#

把以下清单保存为书签,部署 Hysteria2 时逐项核对:

  • up / down 设置为实际带宽的 80-90%
  • 服务端开启 ACME 自动证书(或手动配置有效证书)
  • 墙内使用开启 OBFS(推荐 gecko)
  • 开启端口跳跃(防端口级封锁)
  • ACL 配置国内 GeoIP 直连规则
  • maxIdleTimeout 根据使用场景调整
  • 用 sing-box 或 Clash Meta 最新版(支持所有新特性)
  • 如果是 NAT 后面,使用 Realm 模式
  • 定期更新 Hysteria2 到最新版(bash <(curl -fsSL https://get.hy2.sh/)

一句话总结:Hysteria2 的速度优势来自 Brutal 算法,但要把速度真正发挥出来,需要正确的带宽设置 + 对抗 UDP 限速的策略 + 最新的 OBFS 混淆。三者缺一不可。


进阶调优系列持续更新。下期预告:VLESS+Reality 终极伪装指南——把代理流量伪装成普通 HTTPS 浏览。

QUIC 协议与 Hysteria2 进阶调优:Brutal 算法、Realm 穿透与 2026 实战
https://888479.xyz/posts/hysteria2-quic-advanced-tuning-2026/
作者
888479
发布于
2026-07-06
许可协议
CC BY-NC-SA 4.0