目前我的博客里面还是 Shadowsocks 相关的文章看的人最多,所以我这里干脆汇总整理一下。

1 什么是 Shadowsocks

Shadowsocks 据传早期是由一名知乎员工(clowwwindy)开发,从一开始就是不属于任何公司的开源软件。不过在 Shadowsocks 广为流行之后,这名员工被有关部门请去喝茶,其本人 Github 名下的 Shadowsocks 代码仓库也被清空,只留下内容为「Removed due to regulations」。不过 Shadowsocks 的代码被很多人 Fork,所以 Shadowsocks 的活力并未受到影响。

后来 Shadowsocks 又被开发者(breakwa11)发展成 ShadowsocksR,加了很多加密、流量混淆插件,比原版更安全、更稳定、更快速。不过这名作者随后被人肉,代码被迫删除。

Shadowsocks 为一种代理软件。对于软件工程不熟悉的人,通常会混淆代理VPN二者的概念,网络上有很多文章来讲解这二者的区别。按照「What’s the Difference Between a VPN and a Proxy?」这篇文章的说法,代理的作用为隐藏你的真实 IP,让你以服务器的 IP 的身份来访问站点。不过代理的链接并不一定保证加密。另外,代理的实现层级比较高,一般的应用程序需要主动连接代理才会进行访问。而 VPN 的核心特点链接加密。且 VPN 的实现层级比较低,可以全局起效果。

2 Shadowsocks 部署

2.1 海外服务器

任何翻墙技术的本质都是将网络流量发送给一台位于中国大陆防火墙之外的服务器,由服务器访问目标网站再把响应数据发送给客户端。因此,一台海外服务器是必须的。目前云计算技术成熟,租赁一台海外的虚拟服务器的唯一困难,基本就是你需要一张 VISA 信用卡来支付美元。没有 VISA,PayPal 应该也是可以的,PayPal 可以绑定借记卡。

有非常多的厂商提供虚拟服务器租赁服务,这个可以按照价格和服务器的地理位置,根据自己的需要选择。我自己选择的是 DigitalOcean 位于洛杉矶的机房。Ping 的延时大概在 200ms 以内。另外还需要补充的是,对于校园网用户,国内的校园网大多支持 Ipv6 且 Ipv6 部分的流量是不计费的。因此在租赁服务器时选择支持 Ipv6 的机器就非常重要了。

Shadowsocks 服务对于服务器的性能要求不高,因此一般选择最便宜的一档就可以了,例如 DigitalOcean 最便宜的一档是 1GB 内存,单核 CPU,25GB SSD 磁盘,1 TB 流量,价格 5 美元/月,并且支持 IPv6。

Digital Ocean 的价目表

2.2 Shadowsocks 服务端安装

Shadowsocks 发展到今日已经是相当成熟的大众产品了,有众多安装方法可供选择。这里我选择了teddysun开发的一键安装脚本系列。

teddysun 的脚本在广为流行之后,也开始面临了当局的压力,放弃了更新,并且删除了教程文章。Shadowsocks 发展到今天,真是有很多人付出心血的结果。

teddysun 本人的 Github 项目仓库的代码在 master 分支上还有保留,故方便使用。

一般情况下,我们使用shadowsocks-all.sh脚本就可以了。

2.3 跳板服务器

Shadowsocks 适用面比较广,因此成了防火墙关注的重点。目前防火墙已经能够对 Shadowsocks 的流量特征进行识别,从而直接屏蔽你的 VPS IP。解决这个问题的方法是流量混淆,Shadowsocks 生态中有不少相关的插件。这里我采用了比较“莽”的方法,即找一个跳板服务器,在跳板服务器和 VPS 之间建立 SSH 隧道,从而将 Shadowsocks 流量特征转化成 SSH 流量特征。在过去的两三年里,这个方法一直稳定的绕过了防火墙的检查。关于跳板服务器的使用和配置方法可以进一步查看我的这两篇文章:

2.4 其他

3 客户端配置

参见文章:Shadowsocks 上手配置