使用 Blinksocks 搭建 Shadowsocks 服务

Socks5 是一种基于 TCP 的网络通信协议,有点类似于 Http,通常用于网络代理,而 Shadowsocks 是 对 Socks 协议进行加密,封装,具体不过多介绍。

Socks 是一种通信协议,所以跟语言无关,因此他有很多的客户端实现,因为它主要用于代理通信,因此建议使用 Nodejs 或者 Go 来搭建 Shadowsocks 服务,这样在使用方便和较高的性能之间达到较好的平衡。

这里使用 Nodejs 开发的 Blinksocks 来搭建 Shadowsocks 服务,Blinksocks 的通信过程如图:

blinksocks

Blinksocks 支持 Socks5/Socks4/Socks4a 和 HTTP 协议,可以配置 ACL 权限控制,还支持 v2ray-vmess,v2ray-vmess 是另外一种流行的网络代理协议,对于新手来说建议使用 shadowsocks, 因为 shadowsocks 协议更加简单,不同平台支持的客户端多,尤其考虑到 android 平台或者 openwrt 这种路由平台。

搭建 Shadowsocks 最重要的是拥有一个境外服务器,这里推荐 Linode, 像 Vultr 支持微信付款,因此国人太多,网络貌似不太稳定。可以选择日本的节点,当然也可以在阿里云,腾讯云买境外服务器,但是价格会贵一点,还要备案,如果是企业用的话,也是不错的选择。

服务器上配置 Blinksocks 基于 CentOS 7 版本,因为 Blinksocks 是 Nodejs 写的,因此首先需要在系统上安装 Nodejs 环境,CentOS 自带的 nodejs 版本太老了,有两种方式安装 Nodejs 最新版,一种是使用 Nodejs 安装器 Nvm 安装, 一种是使用 Nodesource 源安装。

  1. Nvm 官方网站:https://github.com/nvm-sh/nvm 可自行查看文档,安装比较方便。

  2. 这里主要推荐 Nodesource 源安装,因为 Nvm 是将 nodejs 安装到用户目录,普通的使用场景是没有什么问题的,但是如果需要安装用 C/C++ 写的 nodejs 扩展的时候,它需要编译,因此需要 nodejs 的源代码头文件,它会找不到而出现很多莫名其妙的错误。

Nodesource 安装文档:https://github.com/nodesource/distributions

  1. 安装 Nodejs

登录到服务器,首先更新系统然后安装 Nodesource 源:

yum update -y
curl -sL https://rpm.nodesource.com/setup_12.x | bash -
yum update
yum install nodejs -y

可以通过 node --version 来查看 nodejs 是否安装成功。

  1. 安装 Blinksocks

执行命令:

npm install -g blinksocks

完成之后可以执行:blinksocks --help 查看帮助。

  1. 配置 Blinksocks

执行 blinksocks init 就会在当前目录下生成配置文件,我们只需要 blinksocks.server.json 就可以了, 打开该文件,将里面的删掉,输入:

{
  "service": "tcp://0.0.0.0:64358",
  "key": "xxxxxxxxxxxxxxx",
  "presets": [
    {
      "name": "ss-base"
    },
    {
      "name": "ss-stream-cipher",
      "params": {
        "method": "aes-256-cfb"
      }
    }
  ],
  "log_path": "bs-server.log",
  "log_level": "info",
  "log_max_days": 30
}

这里的 server 是配置监听的地址和端口,key 是密钥,非常重要。预设里面的 name 是配置 shadowsocks 协议和加密方式,下面是配置日志。

  1. 启用 Blinksocks 服务

有两种方式启用 Blinksocks 服务,一种是使用 PM2,Nodejs 的一个进程管理器,一种是使用系统内置的 Systemd 管理。

4.1 PM2 管理

安装 pm2, 执行: npm i -g pm2 即可。启动服务:

pm2 start blinksocks -i 2 -- -c blinksocks.server.json

这里的 -i 2 参数是使用集群模式,可以更有效地利用CPU。

使用 pm2 list 可以查看服务状态:

pm2

4.2 使用 Systemd

创建一个 Systemd 的 unit 文件 blinksocks.service,输入:

[Unit]
Description=blinksocks
After=network.target
Wants=network.target

[Service]
ExecStart=/usr/local/bin/blinksocks /root/blinksocks.server.json
Restart=on-failure

[Install]
WantedBy=multi-user.target

注:这里需要注意的是 ExecStart=/usr/local/bin/blinksocks /root/blinksocks.server.json 里的 /usr/local/bin/blinksocks 的路径,不同的 nodejs 安装方式会不一样,可以通过执行:which blinksocks 获取

将文件移动到 /etc/systemd/system/ 目录: mv blinksocks.service /etc/systemd/system, 然后就可以启动服务了,执行:sudo service blinksocks start。可以使用 sudo service blinksocks status 查看服务状态:

systemd

注: 如果系统开启了防火墙,务必将相应的端口开放,而且要同时开放 TCP 和 UDP 协议。

  1. 手机客户端安装

Shadowsocks 还支持蛮多手机客户端的,比如说纸飞机影梭,但是有广告,而且界面比较丑,但是支持的功能多,这里推荐一个开源客户端 Brook, 网址: https://github.com/txthinking/brook 因为界面看起比较舒服。下载对应的手机客户端,安装打开,选择 shadowsocks 协议,然后配置服务器地址端口和密码,这里的密码就是之前在 blinksocks.server.json 里面配置的 key ,点击开启即可。

brook

现在即可打开 YouTube 上网了。