Shadowsocks 占据着互联网历史上一个奇特的角落:一款 2012 年由中国一位开发者独自写出的代理,以开源形式发布,又被数以百万计的人悄然采用,成为绕过防火墙的主力工具。它常常被拿来和 VPN 比较,而且通常问错了问题——「哪个更好?」——可这两者其实并不是在做同一件事。

简短回答:Shadowsocks 是一种加密代理,设计目的是让流量在不被识别的情况下穿越国家级防火墙。VPN 则是覆盖你整台设备的加密隧道,设计目的是在你所处的网络面前保护隐私。两者有重叠,但应对的是不同的威胁——而正确的选择,取决于你真正面对的是哪一个威胁。

要点速览

  • Shadowsocks 是一种为绕过审查而生的加密 SOCKS5 代理;它从来不是作为隐私产品设计的。
  • 它的诀窍在于看起来什么都不是:没有握手特征,没有协议标识,只有毫无特征的加密字节。
  • VPN 覆盖设备上的每一个应用,在泄漏和连接掉线方面有标准化的行为;而代理的搭建方式千差万别。
  • 现代防火墙已经学会去标记那些「看起来什么都不是」的流量,所以经典的 Shadowsocks 不再是一张通行证。
  • 按威胁模型来选:抗审查、覆盖整台设备的隐私,或者——越来越常见的——把两者装进同一个应用里。

Shadowsocks 究竟是什么

2012 年,一位以 clowwindy 为名写作的开发者,发布了一个让个人流量穿过中国国家级防火墙的小工具。2015 年,在当局施压之后,他删掉了代码并退出。这个项目以社区维护的各种实现存续下来,并自那以后一直在被积极开发——它也是 Outline 等工具的基础。这段起源完全解释了它的设计:Shadowsocks 是由一个其问题在于防火墙、而非广告商的人造出来的。

从机制上看,Shadowsocks 是一对:你设备上的一个客户端,加上过滤网络之外某处的一台服务器。客户端通过 SOCKS5——标准的代理接口——接收应用流量,用现代的认证加密算法加密,再经由服务器转发,由服务器把它送往真正的目的地。

巧妙之处在于缺了什么。一个普通的加密连接会自报家门:TLS 以一个可识别的 hello 开场,VPN 协议以一个可识别的握手开场。而一个 Shadowsocks 代理连接,开场时什么都没有。从第一个字节起,整条流就是高熵的密文,没有头部、没有标识、也没有固定的数据包大小。没有特征可匹配,因为没有结构可看。

它与 VPN 有何不同

区别始于两者各自工作的那一层,并由此层层铺展开来。

覆盖范围。VPN 在操作系统层面创建一个网络接口,并把整台设备的流量都路由经过它——包括那些根本没有任何代理设置的应用。Shadowsocks 是一个代理:在经典意义上,它承载那些指向它的应用。移动客户端把整个系统经由一个本地隧道接口路由,从而模糊了这条界线,但那是你所安装的客户端的一个功能,而不是协议本身的保证。

失效时的行为。成熟的 VPN 应用对那些棘手的问题有标准化的答案:隧道掉线的那一刻流量会怎样、DNS 查询去往何处、有没有东西从边缘溜出去。而对 Shadowsocks 来说,这些答案完全取决于你选了哪个客户端、又是如何配置的——这一切协议本身都不保证。

信任。VPN 提供方是一家公司,你可以通过它的日志政策和过往记录去评估——我们在「不记录日志」到底意味着什么中考察的正是这些。Shadowsocks 服务器通常是自建的,或者从一些规模很小、往往匿名的转售者那里买来的。无论哪种方式,总有人在运营着另一端,并能观察到你的流量去了哪里。代理并没有消除信任端点的必要;它只是改变了你信任的对象,而面对一个转售者,你通常对其一无所知。

如果你想看这个比较更一般化的版本——代理对比 VPN,超出审查的范畴——那就是VPN 对比代理

为什么它能有效十年

深度包检测,究其本质,就是特征匹配:识别出协议,然后决定策略。Shadowsocks 没给它任何可识别的东西。这就给审查者留下了两个都不讨喜的选项——逐个封锁目标地址,对着廉价租来的服务器玩一场打地鼠,或者把所有无法归类的流量统统封掉,并接受由此殃及普通加密流量的附带损害。

多年来,这种附带损害不值得,于是 Shadowsocks 从这道缝里溜了过去。而这道缝一直在收窄。

「它还能用吗」如今成了一个真问题

两种反制手段改变了局面。第一种是主动探测:当审查系统注意到一个可疑连接时,它们自己去连同一台服务器,测试它如何回应,以此寻找代理行为。第二种更为直接。研究者在 USENIX Security 2023 上记录了:自 2021 年底起,中国的防火墙有时会干脆丢弃那些首批数据包看起来像是毫无特征的高熵数据的连接——而那种结构的缺失,恰恰正是当初让 Shadowsocks 隐形的东西。当审查者认定看起来什么都不是的流量本身就是信号时,看起来什么都不是就不再是一种伪装了。

社区从两个方向作出了回应。其一:把 Shadowsocks 包进真正看起来普通的传输里——真实的 TLS 会话、WebSocket 连接。其二:干脆模仿真实的协议——trojan 与 REALITY 家族的后继工具,即便被探测,也呈现为正常的 HTTPS。较新的 Shadowsocks 规范也加固了协议,以抵御那些抓住旧版本的探测把戏。这场猫鼠游戏仍在继续;一个简单工具在哪儿都能悄悄好用的时代,已经结束了。

转向 QUIC

最新的篇章贯穿着 QUIC,也就是 HTTP/3 底层那个加密的 UDP 传输。如今很大一部分普通网页流量都是 QUIC,这让它成为绝佳的掩护:一条呈现为 HTTP/3 的隧道,看起来像是日常浏览,而非噪声。这正是人们搜索「QUIC VPN」时真正关心的东西——Hysteria2 和 TUIC 这类较新的绕行工具,借 QUIC 来获取掩护、并在漫长有损的线路上换取性能,而 IETF 的 MASQUE 工作正在把基于 HTTP/3 的代理标准化。苹果用同一族思路构建了 iCloud Private Relay——iCloud Private Relay 对比 VPN讲了它的对比。

QUIC 也不是终局。审查者可以、也确实会在敏感时期成片地限速或封锁 UDP,这会把流量重新推回到 TCP 与 TLS 的伪装上。没有哪种传输能在哪儿都赢——这正是绕行工具不断多样化的原因,也是为什么真正持久的问题不是「用哪种协议」,而是你的工具能不能换装。

你需要哪一个?

按你眼前真正面对的问题来分:

  • 网络不让你出去。在 VPN 协议被识别并丢弃的地方,混淆是决定成败的因素,而一个用默认设置的标准 VPN 协议可能干脆连不上。这是 Shadowsocks 的主场——而同样的需求也催生了混淆版的 WireGuard 分支,我们在AmneziaWG 对比 WireGuard中讲过。
  • 你想在网络和你的 ISP 面前保护隐私。覆盖整台设备、可预测的 DNS 处理,以及隧道掉线时合乎情理的行为,比那些奇异的传输更重要。这是 VPN 那一栏,也是绝大多数日常用途:酒店 Wi-Fi、ISP 画像、不可信的网络。VPN 如何绕过审查更细致地划出了这两个世界之间的界线。
  • 两者都要。身处重度过滤网络的人,通常需要两者兼得:既有 VPN 的覆盖,又有不自报家门的流量。在过去,这意味着你得自己用各种零件拼装出一套方案。如今,它越来越意味着一款连接开箱即混淆的 VPN。

Snap VPN 是从 VPN 这一侧来处理这件事的:底层是 WireGuard,并对连接施加我们自有的混淆技术,使它不会向检测系统递上一个教科书式的 VPN 特征。我们不公开网络层的具体做法——伪装一旦被记录就老化得很快——但目标正是这整篇比较所指向的那个:覆盖整台设备的隐私,同时仍能在 VPN 流量被猎杀的网络上连上。

常见问题

Shadowsocks 是 VPN 吗?不是。它是一种加密代理。移动客户端可以把整台设备的流量经由它路由,这让它用起来像 VPN,但 VPN 应用所标准化的那些保证——设备级路由、泄漏处理、隧道掉线时的行为——并不是 Shadowsocks 协议本身的一部分。

Shadowsocks 还能用吗?在许多地方、许多时候,能——但经典的 Shadowsocks 不再是一张通行证。现代审查系统会标记完全加密的「无结构」流量,并主动探测可疑的服务器,所以当下的方案要倚靠加固过的规范、TLS 包装,或后继协议。

有什么比 Shadowsocks 更好?这取决于「更好」需要指什么。就今天的躲避检测而言,那些模仿真实 HTTPS 或借道 QUIC 的后继者更有优势。就普通网络上的日常隐私而言,一款不记录日志的 VPN 是更简单、也更完整的工具。

Shadowsocks 安全吗?加密是可靠的——现代的认证加密算法,公开规范。真正的风险在别处:运营你服务器的那个人能看到你的流量去了哪里,而从随机来源下载的客户端可能被做过手脚。自建解决了前者;只安装官方版本解决了后者。

结论

  • Shadowsocks 是一种靠没有可识别形态来工作的抗审查代理。VPN 则是一条覆盖整台设备的隐私隧道。
  • 它们应对的是不同的威胁,而「更好」只有相对于你的威胁才说得通。
  • 审查者追上了「看起来什么都不是」,于是这片领域转向了看起来像某种真实的东西——TLS、WebSocket、QUIC。
  • 对大多数人、在大多数时候,务实的答案是一款 VPN——最好是一款不向检测硬件自报家门的。

如果你用的是 iPhone,想要一款运行 WireGuard、会混淆自身连接、又不打听你是谁的 VPN——没有邮箱、没有账户、没有流量日志——Snap VPN 已在 App Store 上线。