跳到主要内容
一个交易员两周写出来的“不是产品的产品”,把 VPN 的信任层拆了

一个交易员两周写出来的“不是产品的产品”,把 VPN 的信任层拆了

深潜
深潜

· 阅读约 9 分钟

Rayfish 这个项目最诚实的地方,不是它那套“无信任点对点 VPN”的叙事,是作者自己在 HN 讨论里说的一句话——这是“不是产品的产品”,不关心商业化。这句话比 README 里任何一个技术卖点都更接近这个项目的真实定位。一个不打算卖钱的东西,为什么值得拿出来拆?因为它的作者背景:一个在 Hyperliquid 上交易、运营 Infinite Field 交易公司的人,维护过 hypersdk 和 yawc 这些开源项目,然后用两个星期从仓库创建到发布,做了一个基于 Rust 和 iroh 的点对点网状 VPN。如果不先算这笔账,你很容易把 Rayfish 当又一个“去中心化 VPN”的故事,拿去和 Nostr、Scuttlebutt、Yggdrasil 放在一起问“区别在哪”——这个问题在 HN 讨论里也确实有人问了。但这个问法本身就是瘸腿分析。

账要拆开看。Rayfish 不是一个和 Yggdrasil 或 Nostr 抢同一块地皮的东西,它是作者给自己用的工具外溢。一个做去中心化平台交易的人,最需要的是把交易链路放在自己的基础设施上,而不是某个托管型 VPN 的服务器里。算到这一层,“无信任点对点 VPN”这句口号就落地了——不是“我们要改变世界”,是“我不想把信任交给一个我不认识的托管商”。

分三层来看这个东西的技术机制。

第一层,身份与地址派生。每个节点的身份由密钥对决定,IPv4 地址在 100.64.0.0/10 段派生,IPv6 地址在 200::/7 段派生,地址随身份走,不随物理网络位置变化。这意味着一个节点换网络、换机器,只要私钥不变,地址就保持稳定。这一层里最值得讲的是碰撞索引:IPv4 地址由公钥位和碰撞索引共同生成,当网络内出现 IP 冲突时,碰撞索引递增。作者在讨论中算过,加入新网络时与现有对等节点 IP 冲突的概率大约是四百万分之一,在这种情况下,协调者会要求新节点调整碰撞索引直到不冲突(来源:作者在 HN 讨论中的说明)。四百万分之一的概率,靠协调者人肉调。这就是无中央服务器系统的代价——不上一套全局共识协议,就得在极少数边界情况下用人肉兜底。这个设计在纯工程意义上不优雅,但诚实。

第二层,协议选择。Rayfish 不用 WireGuard,而是基于 iroh 和 QUIC,没有内核驱动,全部在用户空间运行。这个选择有几个含义。用户空间意味着部署门槛低一档,不需要加载内核模块。QUIC 的拥塞控制和多路复用天然适合网状传输,但同时也是它最大的弱点——作者在官方 README 里承认网状协议在传输层受限,发布版本之间可能不保持兼容。这句话如果出现在一个卖给企业客户的 VPN 产品的 README 里,就是灾难,它会直接劝退买家;但一个自用工具可以这么写,因为作者自己就是客户。版本兼容性在现代 VPN 产品里是底线,不是加分项,Rayfish 把它当成一句诚实的前置声明写出来,这件事本身就说明它没打算当产品卖。

第三层,准入与防火墙。Rayfish 默认关闭网络,加入方式是一次性邀请、可重复使用的密钥、或现有成员实时批准。任意成员可以被授予网络密钥并充当协调者,在原始创建者离线时仍可准入新对等节点。这个协调者角色很关键,它打破了“无中央服务器”这个概念的纯粹性。协调者不是中央服务器,它是一个被临时授权的网络密钥持有者,它可以在创建者不在线的时候继续帮人加入网络。Rayfish 没有 ACL,网络是逻辑分区,防火墙按主机配置,按官方 README 的说明,两者组合可以实现自定义 ACL。但这个“组合”意味着每个成员得自己配防火墙,管理成本被下放到每一个节点上。无信任的代价从来不是零,它只是换了一种支付方式。

这一段算得有点碎,但账不细算不清。机制的三个层次摆开后,可以做一个横向对比。WireGuard 的内核模型、托管型 VPN 的中央节点、Rayfish 的协调者模型,三者放在一起看。WireGuard 解决的是传输加密,身份和地址是分离的;托管型 VPN 的中央节点帮你解决发现、准入、转发,但你付出的代价是把流量交给一个服务器;Rayfish 把身份和地址绑在一起,把发现和准入交给网络内的协调者,把流量留在节点之间。有趣的是,它没有完全消灭“协调者”这个角色,只是把它从常驻中央节点变成了网络内部的一个临时授权方。HN 讨论里有人追问它与 Nostr、Scuttlebutt、Yggdrasil、DHT 等协议的区别,涉及到 iroh 的发现机制、中继回退以及 P2P 系统中的协调服务问题——这个追问的方向是对的:所有“去中心化”系统最后都得回答“谁来做协调”这个问题,Rayfish 的回答是“网络里某个被授权的人”。这不是缺陷,是一个诚实的折中。

还有一个功能值得单独提:ray connect 允许两个用户在无需共享房间的情况下直接建立连接。这实际上是在拆“房间”这个抽象层。在传统组网工具里,房间或网络是一个你需要先加入才能交流的容器;而 ray connect 把这个容器拆掉了,两个人可以直接连。这个设计和 Rayfish 用 MPL-2.0 许可证、作者希望代码始终开放的态度是一脉相承的——它不构建围墙,只提供通道。

机制拆完,利益格局就浮出来了。

这件事里有三方,各自拿走的东西完全不同。第一方是作者。他的收益不在钱,在控制权——他获得了不依赖托管型 VPN 的组网能力,这个能力对他的交易业务是刚需,不是玩具。把交易相关流量绕开第三方服务器,这个价值远超过他两周的沉默成本。第二方是托管型 VPN 服务商。Rayfish 如果被更多人用起来,它们首当其冲被绕开,因为 Rayfish 攻击的是它们作为“可信中央节点”的那层价值。在一个点对点 VPN 的世界里,托管商手里最大的资产就是用户对它的信任,以及它收钱管钥匙的资格。如果用户可以自己生成地址、自己建立连接、不用共享房间就能直接连,托管商靠什么收费?第三方是普通用户。他们付的不是月费,是排错和适配的钱——公开代码自己部署,出了问题要自己读源码,要接受项目没有经过第三方安全审计(来源:作者在 HN 讨论中的确认),不支持移动端,仅支持 Linux 和 macOS。对只想把几台机器连起来的用户来说,这笔账未必比付月费划算。

顺手把安装方式那笔账也算一下。讨论里有一场很长的关于 curl | sh 安装脚本安全性的争论,涉及 HTTPS 验证、校验和、签名、可复现构建与沙箱。这条我本来没打算细写,但它和 Rayfish 的核心逻辑完全同构:一个以“无信任”为卖点的工具,却用了一个在安全习惯上极不严谨的安装方式,这件事被社区反复批。但作者自己没什么压力,因为他本来就不靠这个赚钱,安全审计与否影响的是用户,不是他的核心利益。这种事要放在一个商业化的产品身上,会被骂到锁仓库——但 Rayfish 的定位让它能说出“没审计、没移动端”这种话,然后照常睡觉。免责声明写得很清楚,只是写在 README 角落而不是红头文件里。

另外两个在当前讨论中都明确存在的限制也值得一提:Rayfish 尚未经过第三方安全审计,并且协议在传输层受限导致发布版本之间可能不保持兼容。这两个限制加在一起,意味着任何把 Rayfish 当作多节点生产工具的人,都要自己承担安全盲区,还要自己处理版本升级时的兼容性断裂。对作者来说这不是问题,他维护的是自己的使用场景;对普通用户来说,这是隐藏成本。

到这一步,判断可以落了。

我的判断摆在这儿:Rayfish 这类“不是产品的产品”会越来越多,它们不是市场里抢用户的参赛者,而是某个具体操作者算完账之后决定“自己造比托管划算”的证据。它们的真实价值不在“又一个去中心化项目”这个标签里,在它们暴露了一个事实——托管型 VPN 的信任层是可拆的,一个两周写出来的用户空间程序就能绕开它大半。但如果你把 Rayfish 当产品用,你就是在替作者测试他的自用工具。它没经过第三方审计、传输层受限、版本间不兼容、不支持移动端,这些都不影响作者自己用,但足以让任何一个正经采购决策在看见 README 的第一页就把它划掉。这不是贬低它,是把它放回它自己选定的位置:一个交易员为自己造的组网工具,开源不等于产品化。作者说 Android 应用正在开发中——这件事本身也不改变我的判断,移动端能不能上线和它是不是一个产品,是两回事。

这个判断会在一个条件下被推翻:如果 Rayfish 开始做用户增长,开始处理版本兼容性问题,开始公布第三方安全审计结果,开始把安装方式从 curl | sh 升级成签名和校验和齐全的发布渠道——也就是说,如果作者开始把它当产品对待。到那天,我上面说的“不是产品的产品”就不成立。但在那之前,它就是一个“算完账决定自己造”的标准样本。账算到这,结论自己出来了。

深潜
深潜

把一个行业趋势拆到商业+技术+利益格局,最后给一句明确判断。

查看主页 →