适合自己的才是最好的


最近有很多关于 Shadowsocks 安全性以及各种解决方案的讨论,比如 这个 和 这个,还有这个。实际上讨论的范围不仅限于 Shadowsocks,但不可否认它是目前最流行的翻墙工具,所以也是最大的目标。当然了,这类的讨论不会有什么明确的结论,谁都说服不了谁。重要的是大家表达了自己的观点和需求,让旁人也能更好的了解翻墙中可能碰到的各种问题。


于是我也来凑个热闹,说说 V2Ray 的设计理念。
来源: https://www.v2ray.com/blog/2017/design.html


首先,V2Ray 是什么?V2Ray 是一个网络代理工具。什么是代理?代理是当 A 和 B 想说话但不能直接对话时,要找 C 来传话,这时 C 就是代理。那么在这个过程中,C 有哪些职责?很简单,把话传到,把话传对,并且不泄露给除 A、B 之外的人。
看似这个描述很简单,把它应用到代理软件中,可以表述为下面的内容:
  • 开放网络连接,使得 A 和 B 可以间接地进行正常通信;
  • 通信内容不能被第三方知晓;
  • 网络连接要稳定,不能间歇或永久地失效;
之所以没有写成一二三条,是因为上述三条的优先级,在不同的人看来是不一样的。
大多数人的选择应该会是“正常通信”。毕竟翻墙工具诞生的意义就是让用户访问被墙的网站,比如 Google 被墙了,我架设一个 Shadowsocks 服务器就又可以访问 Google 。至于我在 Google 上搜索了什么,都是一些人畜无害的内容,我想别人也没兴趣知道。只要这个工具能让我爽快地访问 Google,它就是一个好工具。这种情况我们称为“速度优先”。
另外一些人可能就比较注重私密性,不管我在搜索一些什么内容,可能也就是一些网红八卦,但我就是不想让别人知道,被别人知道了我就不爽。这种情况我们称为“隐私优先”。
还有一些人对服务器的稳定性有需求,平时我不怎么翻墙,而一旦需要的时候,就一定要可以及时翻出去。几百万的大单,谈不成这个月就要喝西北风了。这些人对翻墙服务(或服务器)的稳定性要求很高,服务不能断线。而断线的情况有很多种,比如翻墙协议被识别了,或者服务器被探测了,都可以造成翻墙服务失效。这种情况我们称为“稳定优先”。
上述的三种情况在翻墙工具中都有相应的功能,比如“速度优先”可能的问题是 ISP 的 QoS 限制,应对方式是流量混淆。又比如“隐私优先”可能需要工具提供完美的加密方式。而“稳定优先”需要翻墙服务器不被探测,翻墙协议需要减少特征。正是由于这些纷繁复杂的功能,引起了大量的讨论。观众不明就里,而开发人员则忙于推销自己的产品。有些问题呢,就越讨论越看不懂了。
从 V2Ray 的角度来看,这是一个不可调和的矛盾。每个人的需求不同,适合自己的才是最好的。不能因为开发人员觉得一项功能好,就强加给用户。用户用着没效果,也不会感谢开发者。
举个例子,Shadowsocks 最近的一次协议升级,使用 AEAD 算法取代了 OTA,提供了更好的加密特性。这个升级在“速度优先”的用户看来是完全没有意义的。因为 AEAD 只是加强了数据完整性,对于 QoS 和可被探测性没有任何改进。也就是说,在客观环境不变的情况下,升级到 AEAD 不会在翻墙速度上有任何提升。于是很多人就会问,到底要不要升级 AEAD,升完对我有什么好处。由于惰性,在没有明显优势的情况下,AEAD 的推广有着很大的阻力。
V2Ray 则尝试从另一个角度来解决这样的问题:提供很多功能,让用户根据自己的需求自由组合。虽然各种组合并不一定能满足所有人的需求,但总比只有一个选择来得好。
对于上述的三个需求,V2Ray 分别提供了不同的特性:
  • 速度优先:VMess 协议、mKCP 协议、Mux.Cool 协议,内部路由分流
  • 隐私优先:TLS (完整实现,非伪装)
  • 稳定优先:HTTP 伪装、BT 伪装等,以及 Mux.Cool 协议。
V2Ray 在设计时已考虑到多个功能相互组合的使用,比如你可以使用 VMess + TLS 来达到隐私和速度的双重保证,或者使用 VMess + Mux 来提升速度和稳定性。也考虑到不同的用户的需求不同,V2Ray 的所有功能都可以选择打开或关闭,不会把任何一个功能强加给用户。不同的配置可以达到不同的效果,而在 V2Ray 中,你只需要一个配置文件就可以应对这些不同的需求。
当然 V2Ray 的功能远不止上述这些,如果你现在的翻墙工具已不能满足你的日常需求,何不试一下新的轮子呢?
发表评论