Hysteria2 吉祥物

“不道德”的 Hysteria2 协议

因为 Xray 内核面板扛把子 3X-UI 作者宣布停更、Xray 内核长期以来不支持 TUN(而 v2rayN 的双核心解决方案在词元这儿不大能用),词元最近把服务端和客户端都换成了 sing-box。

要说 sing-box 的配置文件是真的好写,主要是它对 Xray 和 Mihomo 的写法都做了兼容处理,词元写惯了 Xray,转换过去没有压力,之前使用的 VMess、WS、TLS 和 CDN 的保险方案很快就转移过去了。

💡 如果您感兴趣,可以参考这个模板:chika0801/sing-box-examples,需要自行填写 UUID 和 Path,可以参考之前词元那则脚本搭建的博客。

但是今天词元不是要讲怎么把这协议迁移过去。毕竟,只要套上 CDN 且有最基本的加密,就基本不可能被封——原因不在于协议、特征什么的,而是 GFW 不会封禁 CDN 的 IP,“代价”太大。

词元想聊的是 Hysteria2,一个其实也不算很新的协议。

🤬 Hysteria2 是啥

Hysteria2 是一个以 UDP、QUIC 和 HTTP/3 为基础的协议。说它的技术本质,词元也搞不清(您可以去看看文档),但有几个基本特点是很好说清的:

  • 🎭 伪装成 HTTP/3 流量,理论上来说比第一代 Hysteria 特征减少。但是很可惜的是,HTTP/3 和 QUIC 本身就是特征,尤其是在某些地区,运营商会干扰、拦截这些流量(俗称“Q 死”)。
  • 📦 使用 UDP 包,且比普通 TCP 和 BBR 算法 TCP 的丢包重发策略更激进:
    • 普通 TCP 在丢包率高时,将其等同于“带宽小”,减速发包。
    • BBR 算法 TCP 在丢包率高时,以维持带宽稳定为目标,加速发包。
    • Hysteria2 则主动“抢占”带宽,按 Brutal 算法增加包的数量,尽力达到用户设定的带宽。
  • ☁️ 不能套 CDN,主流的 CDN 几乎没有支持 UDP 这种“暴力”的包,何况支持 HTTP/3 的 CDN 也很少。

第二点导致了很多争议,因为 Brutal 算法在努力达到用户设定的带宽时,有可能出现多倍发包的情况,而这在流量高峰期会导致网络更加拥挤。Hysteria2 和 Xray 开发者各执一词,前者认为这只是达到运营商和用户签订的“流量协议”的一种手段,而后者认为这会导致骨干网更加拥挤,影响其他协议的用户。

😁 当然,反过来 Hysteria2 开发者也指责 Xray 开发的 WebSocket、XHTTP 等协议是为了套 CDN,滥用 CDN 资源云云。

如果您对怎么吵的很感兴趣,请看:XTLS/Xray-core Issue #3547Hysteria 是多倍发包吗?

Hysteria2 的开发阵地主要是 Mihomo 内核,但是 sing-box 也有支持。

😁 Xray 和 Hysteria2 吵架的时候,V2Fly 和 sing-box 开发者默默地提供了 Hysteria2 支持。

⚙️ 搭建

不管道德不道德,反正词元家里是三百兆宽带,分到词元电脑头上只有百兆水平,跑满了也不到 RackNerd 承诺的 1 Gbps 的十分之一。

放个配置模板:

 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
{
  "inbounds": [
    {
      "type": "hysteria2",
      "tag": "Some Good Names",
      "listen": "0.0.0.0",
      "listen_port": [A],
      "up_mbps": 100,
      "down_mbps": 100,
      "obfs": {
        "type": "salamander",
        "password": "[B]"
      },
      "users": [
        {
          "name": "[C1]",
          "password": "[C2]"
        }
      ],
      "tls": {
        "enabled": true,
        "certificate_path": "[D1]",
        "key_path": "[D2]",
        "alpn": [
          "h3"
        ]
      },
      "masquerade": "[E]"
    }
  ],
  "outbounds": [
    {
      "type": "direct"
    }
  ]
}

需要您注意的大概是:

  • [A]:随便选择一个端口,记得在防火墙里开放端口的 TCP 和 UDP。
  • [B]:混淆密码,随机生成一个。
  • [C1][C2]:随意设置一组用户名和密码。注意这里可以不设置用户名,因为 sing-box 只会通过密码来验证身份。
  • [D1][D2]:可以根据词元之前的博客,通过 acme.sh 获取证书,把公私钥路径填入;也可以就在这儿搞 ACME 申请,详见 sing-box 文档
  • [E]:设置伪装域名,随便选择一个支持 HTTP/3 的网站即可。当然选择流量大的私人网盘或者开源软件镜像也好。
  • 还有一个,就是默认只允许 HTTP/3 流量通过的 ALPN 设置,也可以开放非 HTTP/3,只要验证不通过就会返回您设置的伪装域名。

相比于 Xray 复杂的参数,Hysteria2 就友好多了。

因为 Hysteria2 不支持套 CDN,而且可以直接开 TLS,用 NGiNX 代理就没有明显优势了。而且,UDP 还有一个很重要的功能就是“端口跳跃”,也就是连接并没有固定的端口,而是由客户端随机选择一个端口连接到服务端。这是因为国内运营商很喜欢封 UDP,但是一次一般只封一个端口,利用端口跳跃可以有效减少端口封禁的影响。

sing-box 并不能监听很多端口。因此,我们设置一个 iptables 转发规则:

1
sudo iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:25000 -j REDIRECT --to-ports [A]

那个 20000:25000 您可以随便选择一个范围,只要保证这里面没有正在使用的服务即可。

然后记得开放防火墙。firewalld 支持 20000-25000/tcp20000-25000/udp 这样的范围开放,记得 TCP 和 UDP 都要开。

然后在 Cloudflare 那儿添加一个解析记录,不要开启小黄云,直接指向您的 VPS 即可。

🖥 客户端

客户端词元选择了 NekoRay,在 AUR 上有打包。虽然作者更新并不是很勤快,但是也不需要那么先进,够用就好,况且这个客户端还是相当稳定的。

在 NekoRay 中选择“Server”“New Profile”,添加一个新节点。

image-20250202135629721

这里的参数按照服务端的配置填写即可。需要注意的主要是:

  • “Hop Port”请按 20000-25000,34567 跟打印机选择页数一样的格式填写。
  • “SNI”选填。

然后,欸,怎么延迟测试失败呀?这是因为 NekoRay 测速部分不支持 Hysteria2 的写法,会把地址当成 x.x.x.x:20000-25000 来访问,这都不是一个有效 IP,当然是测不了的。

直接连接测试一下吧。

🎯 测试

毕竟这是词元用过的第一个以速度为目标的协议,就加个速度测试环节吧。方法还是大家喜闻乐见的“YouTube 跑分”。

测试项目是 THE WORLD’S MOST BREATHTAKING VIEWS | Dolby Vision™ 12K HDR 60FPS,直接开 2160p60 最高画质。

image-20250202140908117

全程缓存健康基本在 10 秒上下浮动,速度也跑满了词元的带宽。

然后再来测测之前词元使用的 VMess、WS、TLS 加 CDN 方案。

image-20250202141152263

缓存健康出乎意料地还不错(可能是因为 YouTube 默认就是 10 秒左右),偶尔也能到 10 秒,但是速度很明显下来了,只有 6 MBps,丢包也变多了。可能是因为 CDN 是词元优选过的吧。

接下来把 CDN 关掉,直连 VMess、WS、TLS 节点。

image-20250202141457021

???

速度甚至更低了,但是缓存健康还不错,大概是因为 VPS 线路太烂,Cloudflare CDN 的线路都比它好,而 VPS 到 Cloudflare 的距离又很近吧。

如果您使用 Cloudflare 的测速工具测试的话,您会发现速度达不到您实际感知到的,而且丢包率奇高。这主要是因为 Cloudflare 支持了非常先进的 HTTP/3,本身就采用 UDP 包,而 Hysteria2 是通过 UDP 装 TCP 的方式减少丢包,对 HTTP/3 的流量没有加速效果。

image-20250202160518753

这仨“Bad”搞得,都不好发图去炫耀了……

🎆 下课

Hysteria2 真快,在平时访问网页的时候其实比看视频更明显,Google 有了和国内百度一样的加载速度。

Banner