Logo
Stash 玩家
Published on

为什么要使用 Stash ?

自从 Apple TV 支持了 VPN 和作为「旁路由」,我就陆续折腾了分流、规则、策略组,甚至 Javascript 等功能,加上之前入手过 Quantumult X、 Surge 和 Shadowrocket 这几款软件。iOS 平台上这些优秀的热门代理软件我都有深度使用过。Stash 作为后起之秀,对比前面的这些元老级别的 App 有什么优势和区别呢?本文就来简单的谈谈。

在开始之前,我想先讲讲我为什么要弄这个 Blog 。我是通过 酱紫表 认识和了解 Stash 的。在深入使用后发现它确实很好用和功能很多,但它的教程不是特别多,因此才想创建这个 Blog 把教程和覆写都整理起来。

Stash 占据着 Apple TV 的 App Store 付费榜第一名。着实是让老外感受了一把「神秘的东方力量」。也证明 Stash 逐渐受到了大家的认可。

stashtv-applestore

性能

既然要把 Apple TV 作为家里的旁路由网关,性能肯定是大家最关心的地方。但要准确的测试出这些软件的性能,并非易事。网速是有「木桶效应」的,不管是网线还是交换机的质量,都会影响到最终的网速。经过反复的折腾,我最终研究出一套能单纯测试出软件性能的方法。这里我们用 iOS 版的软件来进行测试,因为 iOS 下有 iPerf3 这样的工具可以帮助我们测试吞吐量。

但通常 iPerf Server 是在局域网内的,局域网的 IP 是会跳过代理,不进入代理软件的。经过研究发现,可以借助 nip.io 这个网站,让局域网 IP 也能进入到代理软件。具体的原理是,当软件查询 192.168.2.1.nip.io 这个域名时,代理软件会返回一个 198 开头的 Fake IP(如下图左下角所示)。这个 Fake IP 在真实的互联网是不存在的,是代理软件虚构出来的 IP ,作用是把这个流量重定向到代理软件里。这样我们就能测试代理软件在 DIRECT 直连模式下的转发性能,整个过程在局域网里也不会受到公网网络波动的影响。左上角的图一为不开任何代理软件,写纯 IP 的基准测试。在每个软件的测速结果下面,也附上了这个软件的网络统计信息,可以看到相应的测速流量也是确实通过了代理软件。测试结果如下:

ios-proxy-performance
查看大图

说实话这个结果有点让我惊掉了下巴,最贵的 Surge 的表现是最不稳定的。会有几次抖动到 15-20 Mbits/sec ,我也重复测试了几次问题还是依旧,我们能看到 Surge 的下载流量只有 300 MB ,而大家都是 10s 的吞吐量测试,他的下载总量是最低的。Quantumult X 是 729 MB;Shadowrocket 是 577 MB;而 Stash 是 966 MB;是在这次测试里最接近真实下载带宽的软件,是成绩最好的。如果考虑到这几款软件的售价,这个结果是让我很匪夷所思。

Surge 和 Stash 都内置了 iPerf 这样的工具可以方便我们去测试网络的情况,这次的测速我使用的是 Surge 内置的 iPerf ,因为这次的测速结果 Surge 的表现并不好,我一开始以为是 iPerf 软件有兼容性问题,所以就全程都用了 Surge 的进行测试。

这个结果代表了什么?

我们都知道当使用了代理协议后,测试的速度肯定都会有所下降的。因为会涉及到流量的加密和解密,性能会不如 DIRECT 。DIRECT 性能的测试,能代表一个更纯粹的测试结果。况且我们都是 24h 开着代理软件的, 我们的其他不走代理的流量也是通过 DIRECT 转发出去的。如果软件的 DIRECT 峰值低于你的带宽出口 (假设 1000M),那么你的网速就会受限于软件(假设 800M)。

分流

其实在以前,分流并不是一件那么重要的事情,因为「能用就行」,大家都是为了能上网。但自从流媒体和 Chat GPT 的出现,使得分流变得前所未有的重要。我们上网觉得快不快,除了看延迟之外,还得看带宽。如果你拿一个延迟是 10ms 但网速只有 10M 的线路来说,打开 Google 查资料速度是飞快的,但当你看 Youtube 的时候,就会觉得很卡,视频加载不顺畅。还有就是不同的流媒体地区,所包含的内容数量是不一样的,以 Netflix 来说,新加坡区的中文内容是比香港区要多的。这个时候,我们就需要用到分流,区分不同的网站,使用不同的线路。日常上网可以使用快的线路,而流媒体则可以选择解锁内容更多的线路。此外,现在也有很多服务提供商会区分线路的费用倍率,而流媒体通常会缓冲加载视频内容,一次加载一大段,因此选择倍率低延迟高的线路,也不会有很大的体感区别。

以分流来说,这些软件都基本能满足大家的需求。如果真的要排个序, Surge > Stash > Quantumult X 。他们都支持通过 RuleSet 引入大量规则而不影响性能。而 Stash 是基于 Clash Premium 核心的,Clash 在这方面一直都做的很不错,是紧追 Surge 的。最离谱的是 Stash 和 Surge 都支持逻辑规则,你可以像写代码一样的去写分流规则的逻辑。而 Surge 会支持如 PROTOCOL 这些小众一点的分流规则。而 Quantumult X 则不支持 DEST-PORT 这样的规则。

这些差异使得 Stash 和 Surge 能通过 Script 规则来禁用 QUIC 流量,让其回退到 HTTP2 。因为 QUIC 流量是基于 UDP 的,在部分运营商 UDP 的网络优先级会比较低,使得 QUIC 实际体验会比 HTTP2 要差。

Stash 禁用 QUIC:

rules:
  - SCRIPT,quic,REJECT,no-track
script:
  shortcuts:
    quic: network == 'udp' and dst_port == 443

和 Surge 禁用 QUIC:

AND,((PROTOCOL,UDP),(DEST-PORT,443)),REJECT-NO-DROP

最后,Quantumult X 在分流上也会有一些问题,它并不是按照规则的顺序来匹配规则的,以下内容引自 神机规则 维护者 @ConnersHua

规则类型优先级问题,在我看来这是很多余的设计,本来就是简单的前面规则覆盖后面规则的行为,非要搞类型优先级,那么就带来一些使用场景问题:

(在订阅时 DOMAIN 会转换成 host,这个 host 也是 Quantumult 作者自己造的轮子,以下仍以 DOAMIN 表述)

DOMAIN-KEYWORD 规则优先级带来的问题:

  1. 本来 DOMAIN-KEYWORD,adservice,REJECT 就能解决的问题,如果有条代理或者直连规则为 xxx.com 而它有广告域名为 adservice.xxx.com 我还要专门写一条 DOMAIN,adservice.xxx.com,REJECT
  2. 在自定义规则时,比如想对 Instagram 进行指定节点,那么你用 DOMAIN-KEYWORD,instagram,ProxyA 就存在优先级问题,因为其他人的规则中就可能存在 Instagram 的域名如 DOMAIN-SUFFIX,instagram.com,PROXYDOMAIN-SUFFIX,cdninstagram.com,PROXY

USER-AGENT 规则优先级带来的问题:

  1. 对于不同应用使用统一域名时不能再简单的使用 User-Agent 规则进行分流,比如说 YouTube 和 YouTube Music,其主要传输内容域名均为 googlevideo.com ,这时候你是不能写两条 DOMAIN-SUFFIX 的,那么在 Surge 一类的工具上简单的做法就是加一条 YouTube Music 的 UA 如 USER-AGENT,com.google.ios.youtubemusic*,PROXYUSER-AGENT,YouTubeMusic*,PROXY,但是在 X 中 UA 类型规则优先级极低也就没法用
  2. 有一些游戏应用是通过看广告解锁功能,解决方法也同上在广告规则前以 UA 规则指定直连来覆盖广告规则,但是同样是优先级问题造成没法用

如果说 DOMAIN-KEYWORD 规则的优先级问题解决方式是麻烦,那么 USER-AGENT 规则的优先级问题就是无解

协议

提到协议,就不得不说 Shadowrocket 是支持最多协议的软件。其次是 Stash > Surge > Quantumult X。Stash 比 Surge 多了 VLESS 和 Hysteria 协议。而 Stash 和 Surge 比 Quantumult X 多了 TUIC 和 WireGuard 协议。至于协议哪个好这个就见仁见智了,因为不同的协议其实代表了不同的方向和风格。在我看来,花钱在线路上比花精力研究协议的区别上收益更高,如果你是专线,什么协议都能稳得一逼。当然 Hysteria 这个除外,是专门为 恶劣网络环境进行优化的网络工具(双边加速) 的协议,用在一些线路上有奇效。

但 WireGuard 这个协议就很特殊,CloudFlare WARP 是基于 WireGuard 的。因此你可以在 Stash 和 Surge 上使用 WireGuard 连接到 CloudFlare WARP 。目前很多博主把 WARP 当成一个免费代理来用,在我看来这个不是他最重要的用途,因为他们直连的延迟比较高,需要配合 CloudFlare 优选 IP 才能获得较好的体验。使用 「代理链」 透过 CloudFlare WARP 来落地才是最爽的事情。他可以使你的出口 IP 解锁 Netflix 和 ChatGPT ,甚至跳过 Google Search 的人机验证等,你可以不需要关心你的服务提供商的出口 IP 质量。要知道「iCloud Private Relay」提供商也是 CloudFlare ,通过 WARP 我们能在代理软件里实现同款的功能。后续我也会写单独的文章来介绍如何在 Stash 上配置 CloudFlare WARP 代理链。

模块

这一块我觉得是目前 Stash 的短板,做的最好的是 Quantumult X 。它在「解锁软件功能」这方面比较有优势。有些「解锁软件功能」的模块只有 Quantumult X 会有,其次是 Surge 。但其实 Stash 在功能上是完全支持 JavaScript 脚本的,甚至支持了之前只有 Surge 支持的 MitM Over HTTP/2 。后续我也会在 Blog 里分享一些 Stash 的模块,比如 TestFlight 区域限制解除Google CN 重定向到 .comIPA 应用辅助安装器DualSubs 流媒体双语字幕 等等这些模块也已经原生支持 Stash 。随着时间的推移,相信原生支持 Stash 的模块也会越来越多。

总结

看完上面代理软件最常用的几点分析,其实你会发现它是最全面,最均衡的。 Stash 并不是在这些点都排名第一,但成绩都是很优异的,所以我觉得如果你是开发者,需要抓包和调试请求,那肯定是 Surge 最好,(50 USD + 15 USD 每年);如果你喜欢各种协议,简单无脑一键启动,那肯定是 Shadowrocket 最好(2.99 USD)。如果你喜欢用脚本,那肯定是 Quantumult X 最好(7.99 USD)。而 Stash (3.99 USD)的价格,上面提到的功能都有而且都做的不错,性价比确实是最高的。别忘了它还是一个晚其他软件面世的软件,现在就已经追上了这么多,后续肯定是很有潜力的。如果它能做得更好,我相信它的价格肯定也不只是 3.99 USD 了。