如何用shadowsocks-go搭建自己的VPN服务器

by LauCyun Aug 29,2017 17:55:19 186,169 views

Shadowsocks是一个安全的Socks代理,用于保护网络流量不被干扰,也是开源的项目,非常感谢作者@clowwindy。主要特性包括:

  • 快速(异步I/O和事件驱动程序)。
  • 安全(所有的流量都经过加密算法加密,支持自定义算法)。
  • 支持移动客户端(专为移动设备和无线网络优化)。
  • 跨平台(可运行于包括PC,Mac,手机(Android和iOS)和路由器(OpenWrt)在内的多种平台上)。
  • 使用Socks5协议和可自定义密码的工业级算法加密,流量在网络传输过程中不易被他人读取。
  • 开源。
  • 易于维护。

具体而言,Shadowsocks将原来ssh创建的Socks5协议拆开成Server端和Client端,两个端分别安装在境外服务器和境内设备上,其原理如下图:


(图片来源:互联网)

Client和Server之间可以通过多种方式加密,并要求提供密码确保链路的安全性。

本文介绍的是在国外VPS环境下搭建Shadowsocks服务器的方法,完成服务端配置后,运行本地端就可以无障碍的访问被墙的站点。Shadowsocks需要同时具备客户端和服务器端,所以它的部署也需要分两步。

1 安装Shadowsocks服务端

最早我用的是shadowsocks,但是shadowsocks速度比较慢、资源占用也多,然后就用shadowsocks-libevshadowsocks-libev确实比Python版的速度快很多、内存占用也少了很多,但是shadowsocks-libev不支持多端口,所以现在用shadowsocks-go

shadowsocks-go的安装很简单,你可以下载二进制文件直接运行,也可以从源码安装。

1.1 二进制文件式安装(推荐)

直接下载shadowsocks-go,下载地址:https://github.com/shadowsocks/shadowsocks-go/releases

$ wget https://github.com/shadowsocks/shadowsocks-go/releases/download/1.2.1/shadowsocks-server.tar.gz

下载完成后,先解压到/opt/shadowsocks目录:

$ sudo mkdir -p /opt/shadowsocks
$ sudo tar -xzvf shadowsocks-server.tar.gz -C /opt/shadowsocks

解压后,一个文件名为shadowsocks-server的二进制文件,然后运行即可,如何运行请参考1.3。

1.2 源码式安装

如果你通过源码安装的方式安装shadowsocks-go的话,首先你需要安装golang,安装命令如下:

# ubuntu or debian
$ sudo apt-get install golang -y
# centos
$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ yum install golang -y

golang安装完成后,接着就是配置GOPATH,在~/.bashrc添加如下内容:

$ mkdir ~/.go
$ echo "export GOPATH=$HOME/.go" >> ~/.bashrc
$ echo "export PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
$ source ~/.bashrc

如何设置GOPATH,可参考:

设置完成后,执行go env检查一下,如果出现以下内容,说明设置成功:

$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/ubuntu/.go"
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

然后,就是安装shadowsocks-go:

# on server
go get github.com/shadowsocks/shadowsocks-go/cmd/shadowsocks-server
# on client
go get github.com/shadowsocks/shadowsocks-go/cmd/shadowsocks-local

根据你设置的GOPATH可能需要root权限。

1.3 运行

前面,我们通过二进制文件或者源码安装好了shadowsocks-go,那么接下来,就是如何运行它了。

首先,创建一个配置文件ss-config.json(官方例子:https://github.com/shadowsocks/shadowsocks-go/blob/master/config.json),配置如下:

$ vim /opt/shadowsocks/ss-config.json
{
    "server":"0.0.0.0",
    "local_port":1080,
    "port_password":{
        "80":"password1",
        "443":"password2",
    },
    "timeout":600,
    "method":"aes-256-cfb"
}

参数说明:

  • server:服务器 IP(IPv4/IPv6),注意这也将是服务端监听的 IP 地址,推荐设为0.0.0.0
  • server_port:服务器端口,建议使用80或者443等常用端口。
  • local_port:本地端端口,推荐设为1080
  • password:密码。
  • timeout:超时时间(秒),推荐设为600
  • method:加密方法,推荐用aes-256-cfb
    可选择的加密方法包括:
    • aes-128-cfb
    • aes-192-cfb
    • aes-256-cfb
    • bf-cfb
    • camellia-128-cfb
    • camellia-192-cfb
    • camellia-256-cfb
    • cast5-cfb
    • des-cfb
    • idea-cfb
    • rc2-cfb
    • rc4
    • seed-cfb
    • table
    默认是一种不安全的加密,具体可以参考:https://softwaredownload.gitbooks.io/openwrt-fanqiang/content/ebook/03.8.html

然后,我们就是运行shadowsocks-go了:

$ /opt/shadowsocks/shadowsocks-server -c /opt/shadowsocks/ss-config.json

你可以需要Supervisor之类的进程管理工具,帮你完成自动重启进程和开机自动启动等功能,当然你也可以自己写启动脚本。

2 安装Shadowsocks客户端

相比服务器端的安装而言,客户端的安装就简单了许多。

首先,根据操作系统下载相应的客户端。

然后,打开客户端,在「服务器设置」里新增服务器。然后依次填入服务器地址、服务器端口、你设的密码和加密方式。

然后启用代理,就可以实现科学上网了。

3 Docker镜像(只针对服务器端)

为了,减少大家部署的麻烦,特意制作了一个docker镜像,这个Docker镜像是基于Busybox,整个镜像只有 9.71 MB大小,非常的轻便!

镜像地址:https://hub.docker.com/r/laucyun/shadowsocks-go/,如果对此镜像的Dockerfile感兴趣的朋友可以前往Shadowsocks/shadowsocks-go/Dockerfile。好了,废话少说,开始介绍如何使用:

首先,下载shadowsocks-go镜像:

$ docker pull laucyun/shadowsocks-go:1.2.1

如果,没有安装docker的话,请参考:如何安装 Docker - LauCyun's Blog

下载完成后,就是启动shadowsocks,命令如下:

$ docker run -d --name=ss -p 80:80 laucyun/shadowsocks-go:1.2.1 -p 80 -k SS_SERVER_PASSWORD -m aes-256-cfb -t 600

如果你想通过配置文件的形式启动的话,命令如下:

$ docker run -d --name=ss -p 80:80 -p 443:443 laucyun/shadowsocks-go:1.2.1 -c /opt/shadowsocks/ss-config.json

如果你是通过配置文件启动的话,你需要修改配置文件,先把配置文件从容器(容器名为ss)复制出来:

$ docker cp ss:/opt/shadowsocks/ss-config.json ss-config.json

修改完成后,再把配置文件复制回容器中:

$ docker cp ss-config.json ss:/opt/shadowsocks/ss-config.json

最后,重启一下docker restart ss容器就ok了。

OK,一个属于自己的Shadowsocks服务器已经搭建好了!小伙子们,躁动起来吧~

 

更新日志:

Aug 29, 2017: 撰写

Nov 29, 2017: 修改文章部分错别字和内容、增加配置文件参数说明、增加推荐端口。

Tags