Hysteria2协议完全指南:原理、部署与使用教程

Hysteria2协议完全指南:原理、部署与使用教程

摘要

本文全面介绍Hysteria2协议,从协议设计理念、技术原理到实际部署进行详细讲解。内容涵盖Hysteria2协议的发展历程、基于QUIC的工作原理与拥塞控制机制、服务端部署(包括一键安装和手动配置)、各平台客户端配置使用、Salamander混淆技术、ACL访问控制,以及安全性注意事项和常见问题排查。旨在帮助读者深入理解Hysteria2协议并掌握其实际应用。

一、Hysteria2协议介绍

1.1 什么是Hysteria2协议

Hysteria2是一款基于QUIC协议的高性能代理协议,由Toby(Github ID: HyNetwork)开发。Hysteria2的设计初衷是在不稳定网络环境下提供高速、稳定的代理服务,同时具备强大的抗审查能力。

Hysteria2的核心思想是:利用QUIC协议的UDP传输特性,配合自研的Brutal拥塞控制算法,实现比传统TCP代理更高的传输速度,同时通过HTTP/3伪装和Salamander混淆技术规避流量检测。

graph LR
A[Hysteria2] --> B[客户端]
A --> C[服务端]
A --> D[QUIC传输]

B --> B1[SOCKS5监听]
B --> B2[HTTP代理]
B --> B3[带宽控制]

C --> C1[认证管理]
C --> C2[ACL规则]
C --> C3[伪装响应]

D --> D1[Brutal拥塞控制]
D --> D2[HTTP/3伪装]
D --> D3[Salamander混淆]

1.2 协议发展历程

时间事件说明
2021项目创建Toby发布第一个Hysteria版本
2021开源发布在GitHub开源,获得社区关注
2022Hysteria2发布全新架构,性能大幅提升
2023功能完善新增Salamander混淆、ACL等功能
2024+持续演进多平台客户端支持,功能不断完善

主要版本特点

graph TB
A[Hysteria Original] --> B[基于QUIC]
A --> C[自定义拥塞控制]

D[Hysteria2] --> E[全新协议设计]
D --> F[HTTP/3伪装]
D --> G[Salamander混淆]
D --> H[ACL访问控制]

E --> E1[更高效传输]
F --> F1[更强抗检测]
G --> G1[流量混淆]
H --> H1[灵活路由]

1.3 设计理念与特点

1.3.1 设计理念

Hysteria2的设计遵循以下原则:

  1. 速度优先:利用UDP特性,突破TCP速度限制
  2. 抗丢包:自研拥塞控制,不因丢包降低速度
  3. 易部署:一键安装脚本,简化配置流程
  4. 强伪装:HTTP/3伪装,难以识别阻断
  5. 多功能:支持ACL、多用户、流量统计等

1.3.2 协议特点

特点说明
基于QUIC使用UDP传输,绕过TCP限制
Brutal算法自研拥塞控制,抗丢包能力强
HTTP/3伪装流量伪装为标准HTTP/3
Salamander混淆可选的流量混淆功能
多用户支持支持多用户认证管理
ACL规则灵活的访问控制和路由
TCP/UDP支持同时支持TCP和UDP转发
带宽控制可设置上下行带宽限制

1.4 适用场景

Hysteria2协议适用于以下场景:

  • 高丢包网络:不稳定网络环境下的稳定代理
  • 高速传输需求:需要大带宽、低延迟的场景
  • 抗审查场景:需要规避流量检测的环境
  • 游戏加速:UDP支持适合游戏流量转发
  • 流媒体观看:高速传输满足高清视频需求
  • 团队共享:支持多用户管理

重要说明:Hysteria2协议专为高速传输设计,在高丢包环境下表现尤为出色。但需要注意正确配置带宽参数,否则可能适得其反。

1.5 与其他代理协议对比

特性Hysteria2ShadowsocksVMessTrojanVLESS
传输协议UDP(QUIC)TCPTCP/UDPTCPTCP/UDP
拥塞控制Brutal/BBR系统默认系统默认系统默认系统默认
加密方式QUIC TLSAEADAEADTLSAEAD/无
流量伪装HTTP/3弱(需插件)
抗丢包极强
延迟极低
抗检测
配置复杂度

二、协议工作原理

2.1 整体架构

Hysteria2采用客户端-服务器架构,基于QUIC协议构建:

graph TB
subgraph 客户端
A[应用程序] --> B[Hysteria客户端<br/>SOCKS5/HTTP代理]
end

subgraph QUIC通道
B -->|QUIC加密| C[网络传输]
end

subgraph 服务端
C -->|QUIC加密| D[Hysteria服务端]
D --> E[认证处理]
E --> F[ACL规则匹配]
F --> G[目标服务器]
end

G -->|响应| F
F -->|响应| E
E -->|QUIC加密| D
D -->|QUIC加密| C
C -->|解密| B
B --> A

组件说明

组件功能
Hysteria客户端本地代理服务,支持SOCKS5和HTTP协议
Hysteria服务端服务器程序,处理认证、转发请求
QUIC通道基于UDP的加密传输通道
ACL引擎访问控制规则,决定流量路由

2.2 认证流程

Hysteria2使用HTTP/3伪装进行认证:

sequenceDiagram
participant A as 应用程序
participant C as Hysteria客户端
participant S as Hysteria服务端
participant T as 目标服务器

Note over C,S: HTTP/3认证
C->>S: POST /auth HTTP/3<br/>Host: hysteria<br/>Hysteria-Auth: token<br/>Hysteria-CC-RX: bandwidth
S->>C: HTTP/3 233 HyOK<br/>Hysteria-UDP: true<br/>Hysteria-CC-RX: auto

Note over C,S: 数据传输
A->>C: 代理请求
C->>S: QUIC Stream请求
S->>T: 建立连接
S->>T: 转发数据
T->>S: 响应数据
S->>C: QUIC Stream响应
C->>A: 返回数据

2.3 拥塞控制机制

Hysteria2提供两种拥塞控制算法:

2.3.1 BBR算法

BBR(Bottleneck Bandwidth and Round-trip propagation time)是从Google的TCP算法适配而来:

1
2
3
4
5
6
7
BBR特点:
┌────────────────────────────────────────────────────────────────┐
1. 使用慢启动和RTT变化进行带宽估算 │
2. 不需要手动设置带宽参数 │
3. 自适应网络条件 │
4. 适合不确定带宽的场景 │
└────────────────────────────────────────────────────────────────┘

2.3.2 Brutal算法(推荐)

Brutal是Hysteria自研的拥塞控制算法:

1
2
3
4
5
6
7
8
9
Brutal特点:
┌────────────────────────────────────────────────────────────────┐
1. 固定速率模型,不受丢包和RTT变化影响 │
2. 需要准确设置连接的理论最大速度 │
3. 丢包时反而加速补偿 │
4. 可作为速度限制器使用 │
│ │
│ ⚠️ 警告:设置过高会导致不稳定和数据浪费 │
└────────────────────────────────────────────────────────────────┘

2.3.3 算法选择逻辑

客户端带宽设置上行算法下行算法
仅设置下载带宽服务端BBR客户端Brutal
仅设置上传带宽服务端Brutal客户端BBR
两者都设置BrutalBrutal
都不设置BBRBBR

2.4 TCP代理请求格式

Hysteria2的TCP代理请求格式:

1
2
3
4
5
6
7
8
9
10
11
12
TCP请求格式:
┌────────────────────────────────────────────────────────────────┐
Type(varint) │ Addr Len(varint) │ Address(bytes) │ Padding... │
0x401 │ 变长 │ host:port │ 随机填充 │
└────────────────────────────────────────────────────────────────┘

TCP响应格式:
┌────────────────────────────────────────────────────────────────┐
Status(uint8) │ Msg Len(varint) │ Message │ Padding... │
0x00=OK │ │ │ │
0x01=Error │ │ │ │
└────────────────────────────────────────────────────────────────┘

2.5 Salamander混淆

Salamander是Hysteria2的流量混淆功能:

graph LR
A[原始数据] --> B[Salamander加密]
B --> C[QUIC传输]
C --> D[Salamander解密]
D --> E[原始数据]

B --> B1[密码派生密钥]
B --> B2[流加密]
B --> B3[随机填充]

Salamander特点

  • 可选的流量混淆层
  • 客户端和服务端需要相同密码
  • 有效对抗QUIC流量检测
  • 对性能影响极小

三、服务端部署教程

3.1 环境准备

3.1.1 服务器要求

项目最低要求推荐配置
CPU1核2核+
内存128MB512MB+
存储2GB10GB+
带宽10Mbps100Mbps+
系统Debian 10+/Ubuntu 18.04+/CentOS 7+最新稳定版

3.1.2 端口规划

服务端口说明
Hysteria2443推荐使用443端口伪装HTTPS
Hysteria2自定义也可使用其他端口

3.2 一键安装部署

Hysteria2提供官方一键安装脚本:

1
2
3
4
5
# 下载并执行安装脚本
bash <(curl -fsSL https://get.hy2.sh/)

# 安装完成后,服务会自动创建为 systemd 服务
# 配置文件位置:/etc/hysteria/config.yaml

安装完成后,可以使用以下命令管理服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 启动服务
systemctl start hysteria-server.service

# 停止服务
systemctl stop hysteria-server.service

# 重启服务
systemctl restart hysteria-server.service

# 查看状态
systemctl status hysteria-server.service

# 开机自启
systemctl enable hysteria-server.service

# 查看日志
journalctl -u hysteria-server.service -f

3.3 服务端配置详解

3.3.1 使用ACME自动证书

创建配置文件 /etc/hysteria/config.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 监听地址(默认 :443)
listen: :443

# ACME自动证书配置
acme:
domains:
- your.domain.com
email: your@email.com

# 认证配置
auth:
type: password
password: YourStrongPassword123!

# 流量伪装
masquerade:
type: proxy
proxy:
url: https://news.ycombinator.com/
rewriteHost: true

3.3.2 使用自定义TLS证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 监听地址
listen: :443

# 自定义TLS证书
tls:
cert: /path/to/your/cert.crt
key: /path/to/your/private.key

# 认证配置
auth:
type: password
password: YourStrongPassword123!

# 流量伪装
masquerade:
type: proxy
proxy:
url: https://www.bing.com/
rewriteHost: true

3.3.3 多用户配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
listen: :443

tls:
cert: /path/to/cert.crt
key: /path/to/private.key

# 多用户认证
auth:
type: userpass
userpass:
user1: pass1
user2: pass2
user3: pass3

masquerade:
type: proxy
proxy:
url: https://www.google.com/
rewriteHost: true

3.3.4 完整服务端配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 基础配置
listen: :443

# TLS配置(使用ACME)
acme:
domains:
- hysteria.example.com
email: admin@example.com

# 认证配置
auth:
type: userpass
userpass:
alice: AlicePassword123
bob: BobPassword456

# 带宽限制(可选,用于Brutal算法参考)
# bandwidth:
# up: 1 gbps
# down: 1 gbps

# 忽略客户端带宽设置(可选)
# ignoreClientBandwidth: false

# Salamander混淆(可选,需要客户端同步配置)
# obfs:
# type: salamander
# salamander:
# password: ObfuscationPassword789

# QUIC参数调优(可选)
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
maxIdleTimeout: 60s
keepAlivePeriod: 20s
disablePathMTUDiscovery: false

# 流量伪装
masquerade:
type: proxy
proxy:
url: https://www.yahoo.com/
rewriteHost: true

# ACL访问控制(可选)
# acl: /etc/hysteria/acl.txt

# 出站配置(可选,用于ACL)
# outbounds:
# - name: direct
# type: direct
# - name: socks5_proxy
# type: socks5
# socks5:
# addr: 127.0.0.1:1080

3.4 配置参数说明

参数说明示例值
listen监听地址“:443”
tls.certTLS证书路径“/path/to/cert.crt”
tls.keyTLS私钥路径“/path/to/key.key”
acme.domainsACME域名列表[“example.com”]
acme.emailACME邮箱admin@example.com
auth.type认证类型“password” / “userpass”
auth.password单用户密码“StrongPassword”
auth.userpass多用户密码
masquerade.type伪装类型“proxy”
masquerade.proxy.url伪装代理URLhttps://example.com
obfs.type混淆类型“salamander”
obfs.salamander.password混淆密码“ObfsPassword”

3.5 ACL访问控制

Hysteria2支持强大的ACL(访问控制列表)功能:

3.5.1 ACL规则语法

创建ACL文件 /etc/hysteria/acl.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 阻止私有IP地址
reject(10.0.0.0/8)
reject(172.16.0.0/12)
reject(192.168.0.0/16)
reject(fc00::/7)

# 阻止特定国家
reject(geoip:cn)
reject(geoip:kp)

# 阻止特定网站
reject(geosite:facebook)
reject(geosite:google@ads)

# 阻止特定协议
reject(all, udp/443) # 阻止QUIC
reject(all, tcp/25) # 阻止SMTP

# 路由到特定出站
v6_only(suffix:google.com)
v4_only(suffix:twitter.com)

# 劫持DNS请求
default(8.8.8.8, *, 1.1.1.1)
default(8.8.4.4, udp/53, 1.1.1.1)

# 默认直连
direct(all)

3.5.2 ACL规则详解

规则类型语法说明
阻止reject(目标)拒绝连接
直连direct(目标)直接连接
路由出站名(目标)路由到指定出站
劫持default(目标, 端口, 新地址)重定向到新地址

目标格式

1
2
3
4
5
6
7
8
9
10
11
12
目标格式示例:
┌────────────────────────────────────────────────────────────────┐
│ all - 所有连接 │
│ geoip:cn - 中国IP
│ geosite:facebook - Facebook域名 │
│ suffix:google.com - Google及其子域名 │
│ ipinfo.io - 具体域名 │
10.0.0.0/8 - IP段 │
│ tcp/25 - TCP端口25
│ udp/443 - UDP端口443
│ 战狼*.中国 - 支持IDN域名通配符 │
└────────────────────────────────────────────────────────────────┘

3.6 防火墙配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Ubuntu/Debian (ufw)
sudo ufw allow 443/udp comment 'Hysteria2'
sudo ufw allow 443/tcp comment 'Hysteria2 TLS fallback'
sudo ufw reload

# CentOS (firewalld)
sudo firewall-cmd --permanent --add-port=443/udp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

# iptables
sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

注意:Hysteria2使用UDP协议,确保防火墙放行UDP端口。如果使用443端口,建议同时放行TCP端口作为回落。

3.7 系统优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /etc/sysctl.conf 添加以下配置

# UDP缓冲区优化
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192

# TCP优化(回落用)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# 应用配置
sudo sysctl -p

四、客户端使用指南

4.1 各平台客户端推荐

平台客户端特点推荐度
WindowsHysteria2 CLI官方客户端,功能完整★★★★★
Windowsv2rayN多协议支持,界面友好★★★★★
WindowsNekoray多协议支持,功能丰富★★★★☆
macOSHysteria2 CLI官方客户端,功能完整★★★★★
macOSV2rayU多协议支持,界面美观★★★★☆
LinuxHysteria2 CLI官方客户端,性能最佳★★★★★
AndroidSing-Box多协议支持,功能强大★★★★★
Androidv2rayNG多协议支持,界面友好★★★★★
iOSShadowrocket功能全面,支持Hysteria2★★★★★
iOSStash专业代理工具★★★★★

4.2 客户端配置详解

4.2.1 基础客户端配置

创建客户端配置文件 client.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 服务器地址
server: your.domain.com:443

# 认证信息
auth: YourStrongPassword123!

# 带宽设置(重要!影响性能)
bandwidth:
up: 20 mbps # 上行带宽
down: 100 mbps # 下行带宽

# SOCKS5代理
socks5:
listen: 127.0.0.1:1080

# HTTP代理
http:
listen: 127.0.0.1:8080

4.2.2 带宽设置指南

带宽设置说明

  • 带宽值应设置为连接的理论最大速度
  • 设置过低会限制速度
  • 设置过高会导致不稳定
  • 建议先进行测速,然后设置为测速结果的80-90%

带宽估算参考

网络环境建议设置
家庭宽带100Mup: 20 mbps, down: 100 mbps
家庭宽带200Mup: 30 mbps, down: 200 mbps
家庭宽带500Mup: 50 mbps, down: 500 mbps
企业宽带1Gup: 100 mbps, down: 1000 mbps

4.2.3 完整客户端配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 服务器地址(必填)
server: hysteria.example.com:443

# 认证信息(必填)
auth: MyPassword123

# 带宽设置(使用Brutal算法时必填)
bandwidth:
up: 50 mbps
down: 200 mbps

# SOCKS5代理
socks5:
listen: 127.0.0.1:1080
# 用户名密码保护(可选)
# user: socks5_user
# password: socks5_pass
# 禁用UDP(可选)
# disableUDP: false

# HTTP代理
http:
listen: 127.0.0.1:8080

# TLS配置(可选)
tls:
sni: hysteria.example.com
insecure: false # 设为true可跳过证书验证
# 证书指纹锁定(可选)
# pinSHA256: BA:88:45:17:A1:...

# Salamander混淆(需服务端同步配置)
# obfs:
# type: salamander
# salamander:
# password: ObfuscationPassword

# QUIC参数调优(可选)
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
maxIdleTimeout: 30s
keepAlivePeriod: 10s
disablePathMTUDiscovery: false

# 快速打开(可选,需服务端支持)
# fastOpen: true

# 嗅探功能(可选)
# sniff:
# enabled: true
# timeout: 1s

4.3 Windows客户端配置

4.3.1 下载安装

1
2
3
4
5
6
7
8
9
# 使用PowerShell下载
# 从GitHub下载最新版本
# https://github.com/apernet/hysteria/releases

# 或使用Scoop安装
scoop install hysteria

# 或使用Chocolatey安装
choco install hysteria

4.3.2 运行客户端

1
2
3
4
5
6
7
8
# 使用配置文件运行
hysteria.exe -c client.yaml

# 或使用命令行参数
hysteria.exe client -s server:443 -a password

# 后台运行
start /B hysteria.exe -c client.yaml

4.3.3 v2rayN配置

  1. 打开v2rayN
  2. 点击"服务器" → “添加Hysteria2服务器”
  3. 填写配置:
1
2
3
4
5
6
地址: hysteria.example.com
端口: 443
认证: YourPassword
上传带宽: 20
下载带宽: 100
SNI: hysteria.example.com

4.4 macOS客户端配置

4.4.1 安装客户端

1
2
3
4
5
# 使用Homebrew安装
brew install hysteria

# 或手动下载
# https://github.com/apernet/hysteria/releases

4.4.2 运行客户端

1
2
3
4
5
6
7
8
# 前台运行(测试)
hysteria -c client.yaml

# 后台运行
nohup hysteria -c client.yaml &

# 使用systemd服务(推荐)
# 创建 ~/Library/LaunchAgents/hysteria.plist

4.4.3 创建LaunchAgent服务

创建文件 ~/Library/LaunchAgents/com.hysteria.client.plist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.hysteria.client</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/hysteria</string>
<string>-c</string>
<string>/usr/local/etc/hysteria/client.yaml</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
1
2
3
4
5
6
7
8
# 加载服务
launchctl load ~/Library/LaunchAgents/com.hysteria.client.plist

# 启动服务
launchctl start com.hysteria.client

# 停止服务
launchctl stop com.hysteria.client

4.5 Linux客户端配置

4.5.1 安装客户端

1
2
3
4
5
6
7
8
9
# 使用一键脚本安装
bash <(curl -fsSL https://get.hy2.sh/)

# 或从包管理器安装
# Debian/Ubuntu
sudo apt install hysteria

# Arch Linux
sudo pacman -S hysteria

4.5.2 配置文件

创建配置文件 /etc/hysteria/client.yaml

1
2
3
4
5
6
7
8
9
10
11
12
server: hysteria.example.com:443
auth: YourPassword123

bandwidth:
up: 30 mbps
down: 100 mbps

socks5:
listen: 127.0.0.1:1080

http:
listen: 127.0.0.1:8080

4.5.3 创建systemd服务

创建文件 /etc/systemd/system/hysteria-client.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Hysteria2 Client
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/hysteria -c /etc/hysteria/client.yaml
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
# 重载systemd
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start hysteria-client

# 开机自启
sudo systemctl enable hysteria-client

# 查看状态
sudo systemctl status hysteria-client

4.6 Android客户端配置

4.6.1 Sing-Box配置

  1. 安装Sing-Box(从GitHub或Play Store)
  2. 创建配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"log": { "level": "info" },
"dns": {
"servers": [{ "tag": "google", "address": "8.8.8.8" }]
},
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"inet4_address": "172.19.0.1/30"
}
],
"outbounds": [
{
"type": "hysteria2",
"tag": "hy2-out",
"server": "hysteria.example.com",
"server_port": 443,
"password": "YourPassword123",
"up_mbps": 50,
"down_mbps": 100
}
],
"route": {
"rules": [{ "geoip": ["cn"], "outbound": "direct" }],
"final": "hy2-out"
}
}

4.6.2 v2rayNG配置

  1. 打开v2rayNG
  2. 点击右上角"+" → “手动输入配置”
  3. 选择类型"Hysteria2"
  4. 填写配置:
1
2
3
4
5
6
别名: Hysteria2节点
地址: hysteria.example.com
端口: 443
密码: YourPassword123
上行带宽: 50
下行带宽: 100

4.7 iOS客户端配置

4.7.1 Shadowrocket配置

  1. 打开Shadowrocket
  2. 点击左上角"+"
  3. 类型选择"Hysteria2"
  4. 填写配置:
1
2
3
4
5
6
7
类型: Hysteria2
地址: hysteria.example.com
端口: 443
密码: YourPassword123
上传带宽: 20
下载带宽: 100
SNI: hysteria.example.com

4.7.2 Stash配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
proxies:
- name: "Hysteria2节点"
type: hysteria2
server: hysteria.example.com
port: 443
password: YourPassword123
up: "20 mbps"
down: "100 mbps"
sni: hysteria.example.com

proxy-groups:
- name: "代理选择"
type: select
proxies:
- "Hysteria2节点"
- DIRECT

rules:
- GEOIP,CN,DIRECT
- MATCH,代理选择

4.8 订阅链接格式

Hysteria2支持多种订阅格式:

4.8.1 URI格式

1
2
3
4
hysteria2://YourPassword123@hysteria.example.com:443?sni=hysteria.example.com&up=20&down=100#节点名称

# 带混淆的格式
hysteria2://YourPassword123@hysteria.example.com:443?sni=hysteria.example.com&obfs=salamander&obfs-password=ObfsPassword&up=20&down=100#节点名称

4.8.2 Base64格式

1
2
3
4
5
# 原始格式
hysteria2://YourPassword123@hysteria.example.com:443#节点名称

# Base64编码后
aHlzdGVyaWEyOi8vWW91clBhc3N3b3JkMTIzQGh5c3RlcmlhLmV4YW1wbGUuY29tOjQ0MyPomZ/pl6jmtYHnoIE=

五、安全性注意事项

5.1 协议安全分析

安全提示:Hysteria2协议设计时同时考虑了速度和安全性,使用QUIC协议提供强加密。但需要正确配置才能发挥最大效果。

5.1.1 协议安全特点

方面评估说明
数据加密QUIC TLS 1.3加密
身份认证支持密码和多用户认证
前向保密TLS 1.3提供完美前向保密
流量伪装HTTP/3伪装+Salamander混淆
抗重放QUIC内置重放保护

5.1.2 安全优势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
优势1:强加密
┌─────────────────────────────────────────────────────────────────┐
│ 使用QUIC协议,内置TLS 1.3加密 │
│ → 提供端到端加密 │
│ → 支持完美前向保密 │
└─────────────────────────────────────────────────────────────────┘

优势2:流量伪装
┌─────────────────────────────────────────────────────────────────┐
│ HTTP/3伪装 + Salamander混淆 │
│ → 流量看起来像普通HTTPS │
│ → 有效对抗深度包检测 │
└─────────────────────────────────────────────────────────────────┘

优势3:抗主动探测
┌─────────────────────────────────────────────────────────────────┐
│ 服务端实现伪装响应 │
│ → 探测请求返回正常网页 │
│ → 难以区分代理服务器 │
└─────────────────────────────────────────────────────────────────┘

5.2 安全加固措施

5.2.1 使用Salamander混淆

1
2
3
4
5
6
7
8
9
10
11
# 服务端配置
obfs:
type: salamander
salamander:
password: StrongObfuscationPassword

# 客户端配置(需与服务端一致)
obfs:
type: salamander
salamander:
password: StrongObfuscationPassword

5.2.2 多用户管理

1
2
3
4
5
6
auth:
type: userpass
userpass:
admin: AdminStrongPassword
user1: User1Password
user2: User2Password

5.2.3 配置ACL规则

1
2
3
4
5
6
7
8
9
10
11
# 禁止访问私有网络
reject(10.0.0.0/8)
reject(172.16.0.0/12)
reject(192.168.0.0/16)

# 禁止访问危险服务
reject(all, tcp/25) # SMTP
reject(all, tcp/23) # Telnet

# 其他流量正常代理
direct(all)

5.2.4 使用证书锁定

1
2
3
4
5
6
# 客户端配置
tls:
sni: hysteria.example.com
insecure: false
# 证书SHA256指纹锁定
pinSHA256: BA:88:45:17:A1:B2:C3:D4:E5:F6:07:18:29:3A:4B:5C

5.3 日志与监控

5.3.1 配置日志级别

1
2
3
4
# 服务端或客户端配置
# log:
# level: info # debug, info, warn, error
# output: /var/log/hysteria.log

5.3.2 监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
# /usr/local/bin/hy2-monitor.sh

# 检查服务状态
if ! systemctl is-active --quiet hysteria-server; then
echo "Hysteria2 service is down!" | mail -s "HY2 Alert" admin@example.com
systemctl restart hysteria-server
fi

# 检查连接数
CONN_COUNT=$(ss -un state established | grep :443 | wc -l)
if [ $CONN_COUNT -gt 100 ]; then
echo "High connection count: $CONN_COUNT" | mail -s "HY2 Alert" admin@example.com
fi
1
2
# 添加到cron定时任务
*/5 * * * * /usr/local/bin/hy2-monitor.sh

六、常见问题排查

6.1 连接失败排查

症状:无法连接到Hysteria2服务器

排查步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 检查网络连通性
ping hysteria.example.com

# 2. 检查UDP端口是否开放
nc -uzv hysteria.example.com 443

# 3. 检查服务端服务状态
sudo systemctl status hysteria-server

# 4. 检查防火墙
sudo ufw status
sudo iptables -L -n | grep 443

# 5. 查看服务端日志
sudo journalctl -u hysteria-server -n 50

# 6. 检查配置文件语法
hysteria check -c /etc/hysteria/config.yaml

常见原因及解决方案

原因解决方案
UDP端口未开放配置防火墙放行UDP端口
服务未启动启动hysteria服务
密码错误核对认证密码配置
域名解析失败检查DNS配置
证书问题检查TLS证书是否有效
带宽参数错误调整带宽设置

6.2 速度不稳定问题

症状:连接成功但速度波动大

排查步骤

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 检查服务器负载
top
htop

# 2. 检查网络延迟
mtr hysteria.example.com

# 3. 检查带宽
iperf3 -c hysteria.example.com

# 4. 检查丢包率
ping -c 100 hysteria.example.com

优化方案

问题解决方案
带宽设置过高降低带宽参数值
服务器负载高升级服务器配置
网络丢包严重适当提高带宽参数
QUIC参数未优化调整QUIC窗口参数

QUIC参数优化

1
2
3
4
5
6
7
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
maxIdleTimeout: 30s
keepAlivePeriod: 10s

6.3 握手失败问题

症状:连接时显示认证失败或握手错误

排查步骤

1
2
3
4
5
6
7
8
9
10
11
# 1. 检查密码是否正确
cat /etc/hysteria/config.yaml | grep -A5 auth

# 2. 检查服务端日志
sudo journalctl -u hysteria-server -f

# 3. 测试端口连通性
nc -uvz hysteria.example.com 443

# 4. 检查证书是否过期
openssl s_client -connect hysteria.example.com:443 -servername hysteria.example.com

常见错误信息

错误信息可能原因解决方案
authentication failed密码错误核对密码配置
certificate verify failed证书问题检查证书有效性
connection refused服务未运行启动服务
timeout防火墙/网络问题检查防火墙

6.4 混淆功能问题

症状:启用Salamander后无法连接

排查步骤

1
2
3
4
5
6
7
8
# 1. 确认服务端启用了混淆
cat /etc/hysteria/config.yaml | grep -A3 obfs

# 2. 确认客户端混淆密码与服务端一致
cat client.yaml | grep -A3 obfs

# 3. 尝试关闭混淆测试
# 临时注释掉obfs配置测试连接

配置检查清单

1
2
3
4
5
6
7
8
9
10
11
12
# 确保服务端和客户端混淆配置完全一致
# 服务端:
obfs:
type: salamander
salamander:
password: SamePassword

# 客户端:
obfs:
type: salamander
salamander:
password: SamePassword # 必须与服务端一致

七、总结

7.1 协议优势

  1. 高速传输:基于QUIC的UDP传输,突破TCP限制
  2. 抗丢包强:Brutal算法在丢包环境下表现优异
  3. 部署简单:一键安装脚本,配置简洁
  4. 强伪装:HTTP/3伪装+Salamander混淆
  5. 功能丰富:ACL、多用户、流量统计等
  6. 跨平台:支持所有主流操作系统
  7. 安全性高:TLS 1.3加密,完美前向保密

7.2 协议局限

  1. UDP依赖:需要网络允许UDP传输
  2. 带宽敏感:需要正确设置带宽参数
  3. 客户端支持:部分客户端需要更新版本
  4. 资源占用:相比简单协议略高

7.3 适用场景建议

场景推荐方案说明
高丢包网络Hysteria2 + Brutal发挥抗丢包优势
高速需求Hysteria2 + 正确带宽突破TCP速度限制
抗审查场景Hysteria2 + Salamander强流量伪装
游戏加速Hysteria2UDP支持优秀
多用户管理Hysteria2 + ACL灵活用户管理
稳定优先Hysteria2 + BBR自适应网络

7.4 推荐配置

最佳实践配置(服务端)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
listen: :443

acme:
domains:
- your.domain.com
email: admin@example.com

auth:
type: userpass
userpass:
user1: StrongPassword1
user2: StrongPassword2

obfs:
type: salamander
salamander:
password: ObfuscationPassword

masquerade:
type: proxy
proxy:
url: https://www.google.com/
rewriteHost: true

quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520

最佳实践配置(客户端)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server: your.domain.com:443
auth: StrongPassword1

bandwidth:
up: 30 mbps
down: 100 mbps

obfs:
type: salamander
salamander:
password: ObfuscationPassword

socks5:
listen: 127.0.0.1:1080

http:
listen: 127.0.0.1:8080

tls:
sni: your.domain.com
insecure: false

参考资料