使用shadowsocks搭建个人代理实现科学上网

Github、Google、StackOverflow访问慢还怎么干活😞

概述

本文首先简短的介绍了”墙”是什么以及shadowsocks的工作原理,让读者对于为什么翻墙以及如何翻墙有个基础的了解。之后对于shadowsocks(之后简称ss)的服务器端与客户端的配置提供了较为详细的配置步骤。在VPS(虚拟专用服务器)的选择上,这里采用了AWS(Amazon Web Services),对于新用户可以免费使用一年,网速经测试youtube720p没有问题,对于网速及机房位置要求较高的用户可使用AWS付费服务器或者推荐两个VPS提供商:VultrBandwagonHost(其官网G20期间被墙了,提供一个官网备份网址)。

GFW

GFW(防火长城)也称中国国家防火墙,就是我们俗称的”墙”。GFW的作用主要是政府爸爸用于监管不当言论以及防止网络危害,以达到自我审查、全面监控的作用。GFW封锁网络常见的几种方法:

  • DNS劫持
    当你访问不被允许的域名时,你ISP(互联网服务供应商)提供的DNS服务器将返回一个不正确的IP地址或不返回。

  • DNS污染
    由于DNS劫持可以通过修改域名解析服务器的方式解决,所以系统需要使用DNS污染来封锁一些域名,在直接访问国外DNS服务器的时候,也会被GFW实施DNS污染。

  • IP封锁
    IP封锁指的是国内把国外服务器的IP加入了系统的黑名单,导致大部分地区甚至全国无法直接访问服务器。由于系统是分布式的,所以有可能出现部分地区可以访问,部分地区不能访问的情况。这也是为什么我们通过修改hosts文件可以翻墙但经过一段时间之后又无效的原因。

  • 服务器防火墙IP过滤和服务器宕机
    这两种情况的对外表现是一样的,IP封锁的最后一个可达IP是中国的,而服务器防火墙IP过滤和服务器当机时的最后一个可达IP却是国外的。

  • 基于关键词的TCP连接重置
    由于http协议是明文,我们通过http协议访问国外网站时都会有记录,如果出现某些敏感关键词时,便会强制断开TCP连接。

  • 无状态的TCP连接重置、SSL证书过滤、SSL劫持、HTTP会话劫持等在此不再赘述,有兴趣的自行google。

GFW示意图

shadowsocks

由于我们可以通过境外代理的方式绕过GFW的过滤,通过加密数据使得GFW无法进行内容解析,从而避免被屏蔽的问题。shadowsocks将SSH创建的Sock5协议拆成server和client两个端,shadowsocks-local一般由本机或者路由器,不经过GFW,所以避免了GFW通过特征分析进行干扰。

shadowsocks原理图

shadowsocks的客户端可以在这里下载,根据自己系统自行选择:下载地址

shadowsocks server配置

1.创建

在服务器选择上,这里选择了AWS(Amazon Web Services),其提供一年免费使用时间,可供小白进行实验,配置成功后在使用过程中对硬件与网速不满意的可在自行根据需求购买,推荐两个VPS:VultrBandwagonHost
AWS注册在这里不在详述(你要连注册都不会就真的没救了)。注册过程中绑定信用卡/借记卡时可能会扣1-2美元的预授费。
注册成功进入之后,在顶部栏服务中选择EC2,右边的机房地址自行选择,这里国内用的话推荐东京,速度还不错,100ping左右。

主界面

依次选择: 启动实例———>Amazon-linux-AMI——>实例类型选择默认免费套餐——>审核和启动

Amazon-linux-AMI

核查实例启动这里直接点启动,安全组配置之后在设置。启动时,会让选择现有密钥对或创建新密钥对,这里由于第一次,选择创建新的,名称自己填,然后点下载,会下载your_name.pem的一个文件,记得存好。之后点启动。

pem

2.连接

由于chrome已弃用 NPAPI 无法从浏览器直接连到SSH客户端,所以需要使用独立SSH客户端,这里使用PuTTY进行连接,下载页面已给。由于PuTTY无法识别私钥.pem格式,所以首先需使用PuTTYgen进行转换格式,并使用PuTTY进行连接,具体的文档可以参考这里,说的很详细,不再啰嗦。配置好之后记得save下,以便下次快速使用。连接成功后如下图。

connected

3.配置

首先是ss的安装,可直接使用pip安装

1
pip install shadowsocks

使用vim编辑ss配置文件。vim基本操作如下:

命令 解释
Esc 进入命令模式
:wq 保存并退出
:wq test.txt 保存并退出,文件名为test.txt
:q! 强制退出
i/Ins 进入编辑模式

使用vim编辑文档后,输入以下内容,并保存为json格式文件

1
2
3
4
5
6
7
8
{
"server":"VPS的IP地址", #注意这里填私有IP地址,因为其系统并不能够识别到自身的公网IP地址
"server_port":8388, #服务器端口,最好大于5000,如何在启动服务时发现address can not access,可能是端口已被使用的原因
"local_port":1080,
"password":"1234567890", #认证密码
"timeout":300,
"method":"aes-256-cfb" #加密方式,推荐使用aes-256-cfb
}

这里我将配置保存为ss-config-tokyo.json,然后根据配置文件启动ss:

1
ssserver -c ss-config-tokyo.json -d start

这样会在后台启动运行shadowsocks,若需要停止,可以输入

1
ssserver -d stop

server的log日志在/var/log/shadowsocks.log中,可以使用cat进行查看,若想在前台运行并观察实时日志,可以使用:

1
ssserver -c ss-config-tokyo.json

由于AWS默认只允许20端口的SSH协议访问,所以还需修改其安全组策略,允许Sock5(TCP)协议的访问。若想ping通服务器查看延时,还需添加ICMP的权限。
在其实例的安全组入站规则中,添加如下规则:

类型 协议 端口范围 来源
自定义TCP规则 TCP 8388 0.0.0.0/0
所有ICMP ICMP 0-65535 0.0.0.0/0

ICMP规则建议在测试完ping之后就删除掉。

Shadowsocks Client 配置

打开软件并如下配置,服务器IP填服务器的公网IP地址:

client

右键小图标可以看到其提供的内容,如下图。PAC指根据规则表中的内容,值为1的进行代理,表中没有的则不进行代理。全局模式是所有访问的网址均需要代理。服务器里可以根据不同的服务器地址进行切换,我们可以在不同地域的实例创建多个服务器,以供选择。

浏览器配置

Chrome等浏览器需使用插件使其指向本地代理即可完成翻墙。chrome下推荐SwitchyOmega 插件,这里可以下载。下载安装后将其选为系统代理即可。