因为 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 #3547 和Hysteria 是多倍发包吗?。
Hysteria2 的开发阵地主要是 Mihomo 内核,但是 sing-box 也有支持。
😁 Xray 和 Hysteria2 吵架的时候,V2Fly 和 sing-box 开发者默默地提供了 Hysteria2 支持。
⚙️ 搭建
不管道德不道德,反正词元家里是三百兆宽带,分到词元电脑头上只有百兆水平,跑满了也不到 RackNerd 承诺的 1 Gbps 的十分之一。
放个配置模板:
|
|
需要您注意的大概是:
[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
转发规则:
|
|
那个 20000:25000
您可以随便选择一个范围,只要保证这里面没有正在使用的服务即可。
然后记得开放防火墙。firewalld
支持 20000-25000/tcp
和 20000-25000/udp
这样的范围开放,记得 TCP 和 UDP 都要开。
然后在 Cloudflare 那儿添加一个解析记录,不要开启小黄云,直接指向您的 VPS 即可。
🖥 客户端
客户端词元选择了 NekoRay,在 AUR 上有打包。虽然作者更新并不是很勤快,但是也不需要那么先进,够用就好,况且这个客户端还是相当稳定的。
在 NekoRay 中选择“Server”“New Profile”,添加一个新节点。
这里的参数按照服务端的配置填写即可。需要注意的主要是:
- “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 最高画质。
全程缓存健康基本在 10 秒上下浮动,速度也跑满了词元的带宽。
然后再来测测之前词元使用的 VMess、WS、TLS 加 CDN 方案。
缓存健康出乎意料地还不错(可能是因为 YouTube 默认就是 10 秒左右),偶尔也能到 10 秒,但是速度很明显下来了,只有 6 MBps,丢包也变多了。可能是因为 CDN 是词元优选过的吧。
接下来把 CDN 关掉,直连 VMess、WS、TLS 节点。
???
速度甚至更低了,但是缓存健康还不错,大概是因为 VPS 线路太烂,Cloudflare CDN 的线路都比它好,而 VPS 到 Cloudflare 的距离又很近吧。
如果您使用 Cloudflare 的测速工具测试的话,您会发现速度达不到您实际感知到的,而且丢包率奇高。这主要是因为 Cloudflare 支持了非常先进的 HTTP/3,本身就采用 UDP 包,而 Hysteria2 是通过 UDP 装 TCP 的方式减少丢包,对 HTTP/3 的流量没有加速效果。
这仨“Bad”搞得,都不好发图去炫耀了……
🎆 下课
Hysteria2 真快,在平时访问网页的时候其实比看视频更明显,Google 有了和国内百度一样的加载速度。