ShadowSocks是基于Socks5协议,使用类似SSH隧道的方式收发网络请求的一款开源软件,该软件由 @clowwindy 开发,最初只有Python版本,随后出现C++、C#、Go等多语言版本。ShadowSocks最大的特点是可以保护网络流量、加密数据传输,可有效防止GFW(Great Firewall of China)封杀网络请求。
用ShadowSocks科学上网的概念
在以前,我们访问互联网的资源都是简单而直接的,用户的请求发送到资源服务方,比如Google、Facebook等,然后资源服务方直接将内容响应给用户,世界多么美好。
但是,在1998年时候,中国创建了互联网边界审查系统,称之为中国国家防火墙(GFW),这堵墙横在了用户和互联网资源服务方之间,用于监控和过滤互联网国际出口上的内容,监控国际网关的通讯,对认为不匹配国家官方要求的传输内容,进行干扰、阻断、屏蔽。
从此之后好多有价值的网站就被堵在了墙后。
但是由于对知识的渴望,人们想到了绕过GFW的办法,那就是在境外搭建一个国内用户的代理,国内用户与代理之间建立加密的通道,由境外代理请求被墙的网络资源,再通过加密通道返回给国内用户。代理的类型也有多种,像HTTP、Socks、VPN、SSH等。以SSH隧道为例:
因为SSH本身基于RSA加密技术,所以GFW就无法对数据传输过程加密的数据进行分析,从而避免被重置链接、阻断、屏蔽等问题。
但是GFW也不会懵B一世,人家也会学习,由于在创建SSH隧道的过程中有较为明显的特性,所以GFW还是可以通过分析连接的特性进行干扰。此时ShadowSocks横空出世,先看看图示:
简单来说,ShadowSocks分为客户端和服务端,用户发出的请求基于Socks5协议与ShadowSocks客户端进行通信,一般情况下SS客户端都在本机,通过ShadowSocksX、GoAgentX等应用启动,所以这一步是不会经过GFW的,然后ShadowSocks提供了多种加密方式供客户端和服务端之间进行通信,并且在经过GFW时是普通的TCP协议数据包,没有明显的特征,而且GFW也无法解密分析,从而实现绕墙访问资源。
搭建ShadowSocks服务器
根据上文描述的ShadowSocks的实现原理,我们首先需要搭建一个境外的ShadowSocks服务器,这部分也是唯一需要我们花点小钱的地方。
以下文章内容均在MacOS下实践。
购买VPS
我使用的是 Vultr 的VPS,他家的VPS可选的地域较为丰富,而且有日本东京,这对于家里是联通网络的比较亲和,速度较好:
在系统和应用方面Vultr提供的种类也比较丰富:
在价格方面,Vultr提供的最低价格为每月5美元,对应的性能足够满足ShadowSocks服务端的需求:
注册Vultr账号,绑定信用卡,选择自己中意的系统和价格后立即就会为你部署好VPS:
当VPS的状态为Running后,就表示VPS已经启动了,然后为该VPS配置我们的SSH公钥:
大家可以看看北京联通ping东京VPS的速度,还是很给力的:
使用该 链接 注册可获得20美元的优惠卷。
安装ShadowSocks
我们使用Python版的ShadowSocks进行安装,首先需要下载 pip-8.1.2.tar.gz ,然后使用工具将其上传至VPS,我使用的是Commander One,通过SFTP连接VPS:
使用Terminal连接VPS,一步一步输入以下命令解压安装pip:
tar -xzvf pip-8.1.2.tar.gz cd pip-8.1.2 python setup.py install
然后通过pip安装ShadowSocks:
pip install shadowsocks
成功后可以看到如下信息:
Collecting shadowsocks Downloading shadowsocks-2.8.2.tar.gz Installing collected packages: shadowsocks Running setup.py install for shadowsocks ... done Successfully installed shadowsocks-2.8.2
配置ShadowSocks
进入到etc目录下,创建shadowsocks.json文件,并添加如下内容:
{ "server":"你的VPS的IP", "server_port":8388, "local_port":1080, "password":"设置一个连接密码", "timeout":600, "method":"aes-256-cfb", "auth": true }
该文件就是ShadowSocks的配置文件。
然后输入如下命令启动ShadowSocks服务:
ssserver -c /etc/shadowsocks.json -d start
最后清空防火墙规则:
iptables -F
至此ShadowSocks服务端就配置完成并可以使用了。
ShadowSocks客户端
Mac上ShadowSocks客户端的选择无非就是ShadowSocksX、GoAgentX、Surge这三个,前两者配置起来都大同小异,ShadowSocksX本身就是专门开启SS客户端服务的应用:
GoAgentX提供的服务类型更多,包括SS服务:
配置项都是一样的,把ShadowSocks服务端的配置信息一一对应就可以了。
Surge启SS服务的方式有点不同,因为应用在界面操作上没有提供创建SS服务的选项,但其实它是支持SS服务的,可能因为怕被请喝茶吧。所以需要在Surge的配置文件里添加SS服务相关的信息,如何配置网上有很多,这里就不再累赘了。
至此就打通了ShadowSocks客户端与服务端的通道,可以畅游墙外的世界了。
突破公司内网
一般情况在家我们在本机启着ShadowSocks客户端就可以了,但是如果在公司上外网需要走HTTP代理的话就不行了,因为ShadowSocks客户端需要走公司提供的代理才能连接到服务端,而上文中的客户端应用统统不支持额外代理功能,所以此时就需要用到另外一个工具 Proxifier ,该工具的作用就是接管运行中的所有应用发出的所有请求,然后通过代理进行转发,这样就可以让不支持代理的应用也可以走代理了。
打开Proxifier,选择Proxies选项卡设置公司的HTTP代理以及本地Socks5代理:
然后启动ShadowSocks客户端,比如启动GoAgentX,此时选择Proxifier的Rules选项卡,就会发现Proxifier自动捕获到了名为ss-local的应用,就是由GoAgentX开启的SS客户端,将其的代理规则设置为之前创建好的公司代理:
然后将Default的代理规则设置为之前创建好的本地Socks5代理:
这样就可以让ShadowSocks客户端通过公司代理连接服务端了:
你还可以设置其他的规则,让特定的应用走特定的代理,比如我让Git还是走了公司代理,这样Git服务就会从Default规则里剔除掉,相当于加了走SS服务的例外。
评论 在此处输入想要评论的文本。