关于shadowsocks的一些思考

今天灵光一闪,决定看一下shadowsocks翻墙的原理。本身并不复杂,一张图基本可以说明:

wechatimg938

这里要提1个概念,就是socks5是什么?

这是一个已经很成熟的代理协议,被大多数操作系统,浏览器,客户端软件支持,以前翻墙大多数是这个协议。

在GFW外面部署1个sock5协议的server,在GFW内使用1个支持sock5协议的客户端连接server,通过一定的认证和加密将数据通过tcp socket按照sock5协议发送数据包给server,在server端会按sock5协议解密后将明文包转发给某个GFW外的目标机器,从而实现翻墙。

因为数据都是经过协商加密的,所以一开始GFW是没法发现的。后来socks5协议大量用于翻墙,GFW就开发了对应的流量识别策略,毕竟连接协商阶段的流量是明文的,因此总有办法拦截掉你的连接,所以socks5开始变得不是那么稳定了。

那么,shadowsocks又是如何翻墙的呢?

回头看一下最开始的图片,shadowsocks在客户端机器本地部署了一个socks5 server端,用户使用一个支持sock5的客户端软件(最常见的如:浏览器)连接这个sock5 server发送数据。

这个sock5 server是shadowsocks按照socks5协议开发的,它解密数据为明文后按照shadowsocks自定义的一种新的通讯协议(GFW没时间来分析这个协议)加密发送给在GFW外部署的shadowsocks server,这个server按照shadowsocks协议解密数据为明文,并将明文发给墙外的目标机。

shadowsocks之所以在客户端本地启动一个socks5代理server,是因为sock5协议已被大多数操作系统,浏览器,客户端软件支持,因此我们只需要配置一下浏览器通过shadowsocks的sock5 server代理,那么shadowsocks就可以拦截到浏览器的流量,通过重新包装发给远程的shadowsocks server了,这对于一个新的翻墙工具快速普及无疑是很有利的。

shadowsocks会不会被和谐?

我认为很难。

首先,我认为GFW也不会过度干预跨境流量,因为用途并不能完全确定,因此我们GFW外的shadowsocks server的IP地址通常不会被无脑拦截,除非IP所在的机房做了什么过份的事情,因此shadowsocks server的连通性应该可以保障。

其次,因为跨GFW通讯的数据流协议可以实现千变万化,只要稍作改动就可以让GFW的流量识别失效,因此流量识别也无法奏效。

但是,我天朝极有可能进一步加强dns污染,让你无法获取正确的站点IP,从而导致你的shadowsocks server无法正确的连接到目标服务器。不过shadowsocks的sock5代理如果能够识别流量类型为HTTP并订制一种在shadowsocks server端解析域名的加强协议的话,仍旧可以保障浏览网站的稳定性,但是非HTTP协议则很难实现。

另外,也可以通过一些立志于提供安全加密的第三方DNS服务(例如:Dnscrypt)来解决DNS污染问题,只不过提供这类dns服务的服务器IP很容易被GFW针对,极有可能被GFW无脑封杀,只能通过更高频率的变更的服务器IP来解决。

翻墙学习技术,请勿受不正当言论左右,保持独立思考

如需shadowsocks帐号,可以联系QQ:120848369,我可以低价的共享帐号给你。

2 responses to “关于shadowsocks的一些思考

发表评论

电子邮件地址不会被公开。