Table of Content

在新的一年里,GFW 越来越疯狂了,自由门的两个最新版和 VPNgate 彻底失效了,无界最新版 表现也很不好,DNS 采用了新的污染模式又搞得一批防 DNS 污染的软件失效了:GFW 以前是用固定几个不存在的 IP 地址来伪造查询结果,但最近改成用一大堆非目标网站的 IP 地址来伪造查询结果了。

不过有一个翻墙软件迄今为止还是非常坚挺的:Shadowsocks!

Shadowsocks 在普通的 socks 代理上进行了自定义加密方式等改进,客户端不需要安装,支持多个平台,迄今为止 GFW 还无法通过特制检测进行封杀,总的来说还是比较坚挺的,唯一的缺点就是需要自行租用 VPS 并部署服务器端,比较小白不友好,不过现在也有一些付费 Shadowsocks 账号提供商,价格比起 VPN 来要低上很多(这个就请有需要的人自行 google 吧,我不喜欢打广告)。

想知道为什么迄今为止 GFW 还没办法有效封杀 Shadowsocks 吗?

这要从 Shadowsocks 的原理说起了:简单来说,Shadowsocks 就是一个一重加密 socks 代理,本机上的客户端先与远程服务器(配置了 Shadowsocks 服务端程序的 VPS)端建立连接,远程服务器再与目标网站连接从而成功翻墙。(具体过程和 goagent 比较相似,(两者都是用 python 编写的)不过 shadowsocks 是原生支持 HTTPS 的,没有“服务器不开放 socks 接口”这种问题)

“听起来和普通的一重代理也没什么两样吗!自由门无界 VPN 不都是一重代理吗?但他们都很容易被封杀啊!”

当然是有不一样的地方了:

首先,VPN 无法进行远程 DNS 解析,所以很多时候在使用 VPN 的同时还要设定好一个国外的 DNS 服务器才能正常翻墙(很多人反映很多时候挂着 VPN 都无法正常打开 FB,推特等网站,其实就是因为没有设定国外 DNS 服务器而遇到了 DNS 污染); 而 Shadowsocks 默认就支持远程 DNS 解析(因为 socks5 代理支持远程 DNS 解析),这样就省去了配置国外 DNS 服务器的麻烦,同时还防止了信息泄露:DNS 查询直接递给远程代理服务器,然后通过墙外 DNS 服务器查询得到结果再传回客户端,这样 ISP 就无法通过 DNS 查询知道你访问了哪个网站了(而不支持远程 DNS 解析的 VPN 就留下了泄露访问信息的隐患),同时也避开了 DNS 污染。

自由门和无界还有很多公共代理的共同点就是都有很多人用,当有很多墙内客户端都在短时间内(或者说同时)长时间连接到一个或几个国外远程服务器上时,就会引起 GFW 的注意并被很快封杀; 而 Shadowsocks 则是要求用户自行租用 VPS 并部署 Shadowsocks 服务器端,相当于拥有了一个个人专用服务器,个人的流量非常小,GFW 注意不到,自然也就不会去封杀了(PS:小范围共享的服务器也不太会被 GFW 注意到的)。

接着说说流量特征的问题。OpenVPN 和 VPNgate 都是死在了特征检测上,通常来说基于证书的身份认证过程和密钥交换过程都会带来独特的协议指纹(OpenVPN 有着一套复杂完善的身份认证机制,估计GFW就是识别出了这一机制的协议指纹从而成功干掉 OpenVPN 的),从而使得他们在 handshake 阶段就被 GFW 识别出来并阻断了; Shadowsocks 的作者吸取了教训,直接放弃了服务器端身份认证,也抛弃了密钥协商过程( TLS 了连接就是在 handshake 阶段协商出随机密钥的),而是采取事先在服务器端设置好固定密钥的方式来应对加密连接的(设置 Shadowsocks 客户端和服务器端的时候要填写同一个密码,这就是事先设置好的用于加密和解密的密钥)。这样做就大大减少了协议特征,GFW 迄今为止也没能找到有效的识别方法。再加上自定义加密算法,GFW 更是难以寻找到明显的协议指纹了。

Shadowsocks 的安全系数主要取决于你使用的加密算法,建议使用默认的AES算法,那是安全系数最高的;RC4 算法作者也建议不要用了。Shadowsocks 没有身份认证机制,但事先放置密钥就可以防止 GFW 的中间人攻击了,问题不大;如果是自己搭建服务端,那么也不存在信息被泄露的问题了(服务端在自己手里啊),但同时逆向追踪难度也变小了;如果是使用公共账号或者购买付费账号,那么服务端的靠谱程度又成了问题。总的来说Shadowsocks 的安全系数和赛风三相差不多。

总结:Shadowsocks 跨平台,抗封锁能力很强,适用人群为无价值目标与低价值目标还有中等价值目标,客户端部署容易无需安装,唯一缺点就是服务端部署相对复杂对小白不友好(不过可以通过寻找或购买账号解决)。