Hysteria 2 流量混淆怎么配?用 Salamander 彻底防止主动探测与特征识别

有些地方宽带或者校园网/公司内网会对 UDP 或 QUIC 做针对性的干扰,明明端口通着、域名证书也正常,连上一两分钟就断,断了之后得过很久才能恢复。

如果你的节点只是被运营商针对特定单一端口进行限速,按我们之前写的《Hysteria2端口跳跃怎么配》设置一段端口池定期切换就能解决;但如果切了端口依然频繁被阻断,说明中间设备已经识别出了 QUIC 协议最初的握手特征并触发了主动探测。Hysteria 2 自带的 Salamander 混淆机制就是专门处理这种深度特征识别的。这篇按官方规范讲清楚它的作用、配置方法,以及什么情况下根本不需要开。

为什么有些环境会掐断普通的 TLS

在默认配置下,Hysteria 2 走的是标准 HTTP/3(QUIC)握手。

对于大部分家庭宽带来说,这没有任何问题;但在策略严格的特定局域网或出口审计设备看来,这存在两个突破口:

  1. QUIC 握手包头明文特征:QUIC 协议建立连接最初的 Client Initial 报文里包含固定的协议版本标识,深度包检测(DPI)能借此直接识别出“这是非主流浏览器的 QUIC 连接”;
  2. 主动探测截杀:中间设备怀疑某个海外 IP 端口在跑代理时,可能会伪造请求包去敲这个端口。普通服务端如果返回了特定的 TLS 握手报错,就等于主动承认了该端口开着特定服务。

除了使用混淆之外,很多建站站长还会通过配置伪装网站来规避探测:伪装网站本身怎么配看《Hysteria2伪装网站怎么配?masquerade的file、proxy、string三种模式详解》,和真实网站共用 443 的配法看《Hysteria2能和Nginx共用443端口吗?能套Cloudflare吗?官方文档怎么说》。

Salamander 混淆是怎么防探测的

Hysteria 2 的 Salamander 混淆机制原理很简单:在最外层直接用密码做一次不可逆的伪随机流加密。

  • 特征全抹平:无论是 QUIC 协议头还是数据载荷,经过混淆后在网络层看来就是一堆完全无规律、高熵的随机字节,找不到任何协议特征码;
  • 非自己人直接静默丢弃:外部探测设备拿随机数据包来扫描时,因为不知道你的混淆密码,服务端解密失败后不会回传任何 RST 报文或错误提示,而是直接静默丢弃;
  • 探测端发了包却像打在黑洞里,没有任何握手回执,也就无法通过主动探测来给你的端口定性。

服务端配置:加上 obfs 段即可

前提是节点已经装好、能正常连接(还没装的先照 Hysteria2一键安装脚本 把服务跑起来)。服务端的 /etc/hysteria/config.yaml 只需要在根层级加入 obfs 这一节:

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

tls:
cert: /etc/hysteria/certs/server.crt
key: /etc/hysteria/certs/server.key

auth:
type: password
password: 你的登录密码

# 开启 Salamander 混淆
obfs:
type: salamander
salamander:
password: 你的混淆密码_建议字母数字组合

修改完重启服务:

1
sudo systemctl restart hysteria-server.service

注意:混淆密码是用于外部数据包伪装的,和前面的客户端登录密码 auth.password 分开,建议不要设成一样的。

客户端怎么配置

服务端开了混淆,所有连接的客户端就必须填对应的混淆密码,否则完全无法解密握手。

1. 官方客户端 / Clash Verge Rev

在节点配置中加入 obfs 字段:

1
2
3
4
5
6
7
8
server: your-domain.com:443
auth: 你的登录密码
obfs:
type: salamander
salamander:
password: 你的混淆密码_建议字母数字组合
tls:
sni: your-domain.com

2. Sing-box

在 outbounds 的 hysteria2 对象里添加 obfs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"type": "hysteria2",
"tag": "hy2-out",
"server": "your-domain.com",
"server_port": 443,
"password": "你的登录密码",
"tls": {
"enabled": true,
"server_name": "your-domain.com"
},
"obfs": {
"type": "salamander",
"password": "你的混淆密码_建议字母数字组合"
}
}

什么时候不要开启混淆

混淆并不是开启就一定更好,遇到下面这两种情况建议关掉:

  1. 你当前的宽带本来就很通畅:混淆会增加微小的 CPU 运算量,并多占几个字节的包头空间,日常网络如果不受干扰,保持原生配置效率最高。如果遇到持续跑大流量时速度跑不满,优先排查《Linux 内核 UDP 缓冲区与 sysctl 调优实战》,不要盲目加混淆;
  2. 本地网络对未知 UDP 粗暴降速:少数地区运营商对识别不出协议特征的高熵 UDP 数据流会实行更严厉的 QoS 压制。如果开了混淆反而比不开慢得多,说明中转设备对纯随机 UDP 有策略,直接关掉即可。