最近租用的一台 VPS 快到期了,打算在上面架设一下 Shadowsocks 玩玩,记录下架设过程。

简介

Shadowsocks是基于Socks5协议,使用类似SSH隧道的方式收发网络请求的一款开源软件,该软件由 @clowwindy 开发,最初只有Python版本,随后出现C++、C#、Go等多语言版本。 Shadowsocks最大的特点是可以保护网络流量、加密数据传输。

shadowsocks-libev 是一个 shadowsocks 协议的轻量级实现,是 shadowsocks-android, shadowsocks-ios 以及 shadowsocks-openwrt 的上游项目。其具有以下特点:

  1. 体积小巧,静态编译并打包后只有 100 KB。
  2. 高并发,基于 libev 实现的异步 I/O,以及基于线程池的异步 DNS,同时连接数可上万。
  3. 低资源占用,几乎不占用 CPU 资源,服务器端内存占用一般在 3MB 左右。
  4. 跨平台,适用于所有常见硬件平台,已测试通过的包括 x86,ARM 和 MIPS。也适用于大部分 POSIX 的操作系统或平台,包括 Linux,OS X 和 gwin 等。
  5. 协议及配置兼容,完全兼容 shadowsocks 协议,且兼容标准实现中的 JSON 风格配置文件,可与任意实现的 shadowsocks 端或服务端搭配使用。

shadowsocks-libev 包括服务端和客户端两部分,一共三个模块。

  1. ss-server:服务器端,部署在远程服务器,提供 shadowsocks 服务。
  2. ss-local:客户端,提供本地 socks5 协议代理。
  3. ss-redir:客户端,提供本地透明代理,需要与 NAT 配合使用,具体使用方法参见文档。

服务端

在安装服务端之前,需要先安装一些依赖库。

Ubuntu / Debain 环境下:

sudo apt-get install build-essential autoconf libtool libssl-dev libpcre3 libpcre3-dev asciidoc

Redhat / CentOS 环境下:

sudo yum install build-essential autoconf libtool gcc

编译安装:

./configure && make
sudo make install

配置文件(/etc/shadowsocks.json)模板(开启了OneTimeAuthentication):

{
  "server":"0.0.0.0",
  "server_port": 10444,
  "local_address": "127.0.0.1",
  "local_port":1080,
  "password":"password",
  "timeout":300,
  "method":"aes-256-cfb",
  "fast_open": false,
  "workers": 1,
  "one_time_auth":true
}

启动服务端,这里把下面的启动命令写入脚本中,每次只要执行脚本即可(-u参数为开启udp转发):

nohup ss-server -u -c /etc/shadowsocks.json &

其他命令行说明可以参考官方说明

也可以使用 Supervisor 后台运行 Shadowsocks,可以参考官方 wiki 里的这篇文章

客户端

Windows 客户端这里推荐使用 shadowsocks-go(编译版本),下载到相应系统的版本后,将配置文件中的内容修改好,改名为 config.json 运行主文件即可。

Mac 客户端推荐使用 GoAgentX,支持全局模式和智能模式。