初代博弈 - VPN
GFW部署之后,根据它的工作原理判断出只要有不探明数据包的真实意图,那么可以通过连接一台符合GFW认为合理的服务器作为中转来替代去做想做的事情,然后把结果同步回来全部过程加密,那么这一套完整的逻辑就很合理了。这套逻辑也正是很多初期http代理、VPN、SSH代理这些突破封锁的实现方式,这里拿SSH代理的这个流程示意。
本地网络上的计算机发送一个请求建立加密通道的数据包,接入骨干网域名解析,发现访问的并非Google或者是Facebook,而是一台允许访问的国外服务器。放行数据包,经过中转服务器解密出真实想要访问的地址转到Google,然后再返回数据给中转服务器,再经过墙再传回本地计算机。会发现这样一来就完美规避掉了GFW的一切有效探测手段。首先数据流量不再是明文而是加密数据,GFW看不到关键字。第二是DNS解析的时候发现访问的对象是允许的服务器而不是Google,DNS也正常解析。这里有一个问题就是GFW又逐渐发现越来越多的流量都是这种类似的模式。
先发送一个数据包请求和一个服务器建立加密连接,紧跟着一个代理请求,这就是特征。VPN和HTTP代理曾经一度非常流行,后来由于太多用户使用这种方式来翻墙,所以GFW根据这些特别有明显特征的这种流量做了两件事。第一屏蔽掉VPN用的端口,以后在用VPN需要申请报备,审核通过才可以用。第二慢慢积累提供VPN服务主机的IP,屏蔽掉这些IP。经过打压,VPN这种代理翻墙的这种方式就慢慢死掉了。
消除特征 - Shadowsocks
重头戏来了,Shadowsocks出现可以说是一个拐点。Shadowsocks引出了一个把代理服务器拆分成本地和远程两个的这种概念,实现经过GFW流量全部加密,从而消除明显的流量特征的这个概念。后来衍生出来的SSR、v2ray等都是基于类似的这个原理,下面来讲一下具体原理。
同样是从本地计算机发出一个数据包,给本地的shadowsocks服务器发送数据加密请求。这里说的这个本地服务器指的是电脑上或者手机上装的Shadowsocks翻墙软件,当然这个本地服务器也可以是翻墙路由器或者是软路由,这些硬件形式可以有很多种但是逻辑是一样的。本地网络因为在本地所以不过墙,而且瞬间能完成加密然后发送加密数据,经过DNS解析通过骨干网到达国际出口。GFW因为探测不到具有特别明显特征的流量所以也放行,到达远程中转服务器也就是远程的shadowsocks服务器。这个可以是自己的VPS也可以是机场的服务器,然后解密数据转发到Google得到回应,数据发送回来经过远程中转服务器的加密,发送加密数据到达GFW。因为探测不到特征特别明显的流量,也不是HTTP的明文数据,所以GFW无法嗅探到敏感词,只好放行到达本地shadowsocks服务器。这套流程就是shadowsocks的基本工作原理和逻辑。
后面出现的SSR和v2ray,虽然具体细节上有一些微小差异,但都是基于这种基础的逻辑。目前各种各样的这种加密方式和算法基本都是在GFW这个位置用于伪装和消除特征的。至于为什么GFW不封锁所有的国际加密流量,是因为相比翻墙的这个流量,超过99%的这些通信流量都是正常的需求,如果把这些所有的国际加密流量都封锁掉,那中国真的就成了局域网。所以目前来说shadowsocks这种实现原理是相对安全的。和VPN的翻墙模式最大的区别在于VPN的特征很明显,过墙的数据遵循一个固定的一套路,都是先发送一个建立加密通道的数据包。shadowsocks则是在本地完成加密过墙,数据已经是加密数据,所以GFW无法探测到这个固定的模式和特征。
三大方式
- 软件翻墙(VPN、Shadowsocks等)
- 硬件翻墙(路由器翻墙)
- 网关模式翻墙
1.软件翻墙
VPN【Virtual Private Network,虚拟私有网络】
最早应用在一些大公司,根据私密通讯的需求产生。相对普及之后,不少有私密和安全通讯需求的个人也慢慢用起了VPN。VPN的好处是端对端加密,避免通讯流量被中间劫持之后泄密。并且近乎所有的流量都能被代理。缺点上面说过了,特征很明显【都是最先发送一个建立加密通道的数据包】,容易被GFW探测。VPN从绝对用户基数上说是主流。
Shadowsocks、SSR、V2ray、Trojan、Xray
这些手段都采用本地服务器加密流量,发送至远程服务器再进行转发的这种方式来突破GFW的封锁,所以把这些都归到一类。协议并非越新越复杂越好,一定要亲自尝试。
软件方式的翻墙手段有一个比较明显的缺点,就是绝大多数的软件都没有很高的底层权限,只能代理应用层的网络流量。
就算打开了所谓的全局代理模式,全局的意思指代表作为翻墙软件本身所接管到的所有的流量全部转发到代理服务器。但是有些软件跑在系统层,权限更高甚至不遵循这个操作系统代理规则,根本不把通讯流量交给翻墙软件接管,这种情况下就没有办法实现翻墙了。比较有代表性的应用有一系列的UWP应用【微软商店下载的那些软件】、应用程序商店本身、VR设备的客户端,还有很多的游戏流量等,都不遵循系统代理的设置。
2.硬件翻墙(路由器翻墙)
路由器是本地网络接入互联网的最后一个环节,并且独立于电脑,所以可以无视计算机操作系统的代理规则,强制接管所有的网络流量来实现真全局代理。路由器翻墙的原理可以理解把翻墙软件部署在了路由器上,连接路由器的网络设备都可以通过路由器翻墙。路由器翻墙的原理和实现,以及协议算法这些概念都跟刚才讲的软件的部分基本一致,不过仍然存在一些差异。
路由器翻墙相比软件翻墙有一个明显的优点,就是可以应用于无法安装翻墙软件的网络设备,帮助这些设备能实现传说中的透明代理。路由器翻墙的缺点也很明显,路由器的CPU算力基本上只能满足最基础的路由功能,然而却要让它进行大量的加密解密运算,导致的结果就是网络通讯会产生卡顿,带宽跑不满宕机。大体上来说,路由器翻墙确实存在这个性能的瓶颈问题。
引出下一个要讨论的一个话题,软路由。软路由简单来说就是改造过的路由器。一台软路由可以理解为一台小型的计算机,你甚至可以在上面装操作系统,这类软路由的性能足够强大,也具备刚才所说的优点,可以拖家带口带着所有的网络设备一起翻墙。通讯流量再限于只能代理外部流量或者是应用层流量,性能方面也不再是短板,也不用担心可能会带来网络问题。但是软路由也有缺点,第一软路由相对比较贵。入门级的性能的这个软路由动辄几百上千。第二配置起来相对繁琐。技术门槛确实比较高,涉及到虚拟机、linux这些相关的知识。第三点稳定性。在复杂的网络环境中,多一个硬件设备就多一道出现问题的可能,第四点日常维护相对繁琐。比如固件更新、更换节点都需要进后台调试。建议可以根据需求同时部署软路由和使用客户端软件翻墙,不冲突。有了自己的翻墙中转服务器就可以灵活的部署在任何需要的软件和平台上。
3.网关模式翻墙
网关模式可以理解为在局域网里面,不需要一个专属的像路由器这样的硬件,而是通过一台计算机上跑的软件来实现路由器的功能。比较有代表性的有Windows下的Clash和Mac操作系统下的Surge。在本地局域网里面部署了一台运行了Surge或者Clash的电脑当做网关,可以接管局域网里面其他所有网络设备的所有流量同时翻墙。这种方式的优点在于第一异常的方便,无论是切换节点还是调试都比路由器、软路由效率更高,直接在电脑上跑的软件里面进行操作,不用登录路由器后台之类的,如果是出现问题或者是更换节点这些操作点几下鼠标就完成了。第二个优点翻墙的性能要碾压路由器甚至软路由。因为是靠电脑的CPU来进行加密解密运算,而和电脑的CPU的对比,是路由器或者软路由的CPU性能的几十上百倍的。第三个优点便于集中管理。家里所有的网络设备,只需要在网络设置里面填好路由和DNS就能够实现全部设备透明代理。从实用和便捷的角度来说,网关模式翻墙要大幅优于软路由,也大幅优于刷了第三方固件的路由器。