Hysteria 2 流量混淆怎么配?用 Salamander 彻底防止主动探测与特征识别
有些地方宽带或者校园网/公司内网会对 UDP 或 QUIC 做针对性的干扰,明明端口通着、域名证书也正常,连上一两分钟就断,断了之后得过很久才能恢复。
如果你的节点只是被运营商针对特定单一端口进行限速,按我们之前写的《Hysteria2端口跳跃怎么配》设置一段端口池定期切换就能解决;但如果切了端口依然频繁被阻断,说明中间设备已经识别出了 QUIC 协议最初的握手特征并触发了主动探测。Hysteria 2 自带的 Salamander 混淆机制就是专门处理这种深度特征识别的。这篇按官方规范讲清楚它的作用、配置方法,以及什么情况下根本不需要开。
为什么有些环境会掐断普通的 TLS
在默认配置下,Hysteria 2 走的是标准 HTTP/3(QUIC)握手。
对于大部分家庭宽带来说,这没有任何问题;但在策略严格的特定局域网或出口审计设备看来,这存在两个突破口:
- QUIC 握手包头明文特征:QUIC 协议建立连接最初的 Client Initial 报文里包含固定的协议版本标识,深度包检测(DPI)能借此直接识别出“这是非主流浏览器的 QUIC 连接”;
- 主动探测截杀:中间设备怀疑某个海外 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 | listen: :443 |
修改完重启服务:
1 | sudo systemctl restart hysteria-server.service |
注意:混淆密码是用于外部数据包伪装的,和前面的客户端登录密码 auth.password 分开,建议不要设成一样的。
客户端怎么配置
服务端开了混淆,所有连接的客户端就必须填对应的混淆密码,否则完全无法解密握手。
1. 官方客户端 / Clash Verge Rev
在节点配置中加入 obfs 字段:
1 | server: your-domain.com:443 |
2. Sing-box
在 outbounds 的 hysteria2 对象里添加 obfs:
1 | { |
什么时候不要开启混淆
混淆并不是开启就一定更好,遇到下面这两种情况建议关掉:
- 你当前的宽带本来就很通畅:混淆会增加微小的 CPU 运算量,并多占几个字节的包头空间,日常网络如果不受干扰,保持原生配置效率最高。如果遇到持续跑大流量时速度跑不满,优先排查《Linux 内核 UDP 缓冲区与 sysctl 调优实战》,不要盲目加混淆;
- 本地网络对未知 UDP 粗暴降速:少数地区运营商对识别不出协议特征的高熵 UDP 数据流会实行更严厉的 QoS 压制。如果开了混淆反而比不开慢得多,说明中转设备对纯随机 UDP 有策略,直接关掉即可。