协议边界与最小配置
type: hysteria2 对应重新设计的 Hysteria 2 协议。它运行在 QUIC 和 UDP 上,并把流量伪装成 HTTP/3,但不能连接 Hysteria 1.x 服务端。
节点需要名称、类型、服务器以及一个有效端口来源。可以填写单个 port,也可以填写 ports 启用端口跳跃;两者都没有时,客户端会以 invalid port 拒绝创建节点。
name必填- 节点名称,用于策略组和规则引用。
type: hysteria2必填- 选择 Hysteria2 实现,不是 Hysteria 1.x 的兼容模式。
server必填- 服务端域名或 IP 地址。
port / ports二选一- 填写单端口,或提供端口列表和范围以启用跳跃。
password认证- 填写服务端认证密码;当前构造器允许空字符串,但只有服务端明确允许空认证时才可省略。
认证与 TLS 校验
Hysteria2 使用 TLS 1.3。认证密码与 TLS 证书校验是两条独立链路,密码正确也不能替代可信证书和正确的服务器名称。
password认证- 服务端验证客户端身份的密码,使用 userpass 服务端时应按服务端提供的完整格式填写。
sniTLS- 设置证书对应的服务器名称;省略时使用 server。
alpnTLS- 官方示例使用 h3。只有服务端明确要求时才覆盖默认协商结果。
skip-cert-verify风险- 跳过证书校验,只适用于明确了解风险的测试或自签场景。
name-cert-verifyTLS- 单独指定证书名称校验目标。
fingerprintTLS- 固定服务端证书的 SHA-256 指纹。
certificate / private-keymTLS- 服务端要求客户端证书时成对填写。
端口跳跃
填写 ports 后,客户端从端口集合中建立连接并忽略单个 port。端口集合使用当前内核的端口范围语法,可用连字符表示范围,并用逗号或斜杠分隔多个值。
ports可选- 例如 443,20000-21000;服务端和防火墙必须开放完全相同的 UDP 端口集合。
hop-interval默认 30 秒- 使用固定秒数,或写成 15-30 让每次切换随机选取间隔。
- 最小间隔5 秒
- 当前实现会把小于 5 秒的起始值提高到 5 秒。
- 范围限制重要
- hop-interval 只能写一个范围,不能用逗号放入多个范围;未配置 ports 时该字段没有作用。
Salamander 与 Gecko 混淆
混淆用于改变 QUIC 数据包的可识别特征,不会把 Hysteria2 变成 TCP,也不能绕过网络对所有 UDP 的封锁。客户端和服务端必须使用相同类型和密码。
obfs可选- 当前支持 salamander 与 gecko;为空时禁用混淆。
obfs-password条件必填- 只要填写 obfs 就必须同时填写混淆密码,否则客户端会报 missing obfs password。
obfs-min-packet-size仅 Gecko- 设置握手分片的最小线上包大小,官方上游默认 512 字节。
obfs-max-packet-size仅 Gecko- 设置握手分片的最大线上包大小,官方上游默认 1200 字节。
- Gecko 范围约束
- 最大值应不小于最小值且不超过 2048 字节,Salamander 不读取这两个包大小字段。
带宽、拥塞控制与 QUIC 窗口
Hysteria2 的 up 和 down 与 Hysteria 1.x 不同,它们按方向决定是否使用 Brutal。填写 up 会为客户端上传方向启用 Brutal,填写 down 会把下载目标速率交给服务端方向处理。
客户端的 bbr-profile 只控制未启用上传 Brutal 时的本地 QUIC 发送方向,不会替服务端选择下载方向的拥塞控制。接收窗口属于 quic-go 高级参数,不应在不了解带宽时延积和内存成本时修改。
up / down可选- 填写 Brutal 速率;未写单位时按 Mbps 解释,值不应超过链路稳定可达速率。
bbr-profile默认 standard- 可选 standard、conservative 或 aggressive,只影响客户端未使用
upBrutal 时的上传发送方向。 initial-stream-receive-window高级- QUIC 单流初始接收窗口。
max-stream-receive-window高级- QUIC 单流最大接收窗口。
initial-connection-receive-window高级- 整个 QUIC 连接的初始接收窗口。
max-connection-receive-window高级- 整个 QUIC 连接的最大接收窗口。
Hysteria2 Realm
realm-opts 用于连接 Hysteria2 Realm 的 UDP 打洞和牵线服务。它默认关闭,只有服务端或 Realm 提供方明确给出参数时才应启用。
realm-opts.enable默认 false- 必须显式设为 true 才启用 Realm。
realm-opts.server-urlRealm- 牵线服务的 HTTPS 地址。
realm-opts.token / realm-opts.realm-idRealm- 分别填写牵线服务令牌和目标 Realm 标识。
realm-opts.stun-serversRealm- 用于发现公网 UDP 地址的 STUN 服务器列表。
realm-opts.sni / skip-cert-verify / fingerprint作用域- 这些子字段只作用于
realm-opts.server-url,不替代代理服务端的 TLS 字段。
基础示例与常见误配
先用单端口和无混淆配置验证认证与 TLS,再按服务端实际配置增加端口跳跃或混淆。
- 复制 Hysteria 1.x 的
auth-str或protocol,这些字段不属于 Hysteria2。 - 填写 obfs 却漏掉
obfs-password,节点会在创建阶段直接报错。 - 启用 ports 但服务端或防火墙没有开放同一端口范围,表现为周期性断连。
- 把
up和down写得远高于真实链路带宽,造成拥塞和丢包。
proxies:
- name: hysteria2-node
type: hysteria2
server: server.example.com
port: 443
password: replace-with-server-password
sni: server.example.com
alpn:
- h3
skip-cert-verify: false