Friday, August 26, 2016

使用ShadowSocks科学上网及突破公司内网

什么是ShadowSocks

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可选的地域较为丰富,而且有日本东京,这对于家里是联通网络的比较亲和,速度较好:

Server Location


在系统和应用方面Vultr提供的种类也比较丰富:

Server Type


 

Application


在价格方面,Vultr提供的最低价格为每月5美元,对应的性能足够满足ShadowSocks服务端的需求:

Server Price


注册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服务的例外。

原文:http://ift.tt/2bhw4y4




via 细节的力量 http://ift.tt/2blKGrt

No comments:

Post a Comment