「Shadowsocks」- shadowsocks-manager

  CREATED BY JENKINSBOT

Shadowsocks的管理器工具,用于多用户和流量控制。

环境要求

NODEJS

Node.js 10.*

REDIS

Redis

MANAGER ADDRESS

同时「服务端」要监听「管理地址」:

#!/bin/sh

# 对于shadowsocks-python实现
ssserver -c /etc/shadowsocks.json --manager-address 127.0.0.1:6001 -d start

# 安装

安装方法

更多的安装方法参考官方「README.md」手册。

#!/bin/sh

################################################################################
# 这里,我们从GitHub下载源码,然后NPM安装:
################################################################################
git clone https://github.com/shadowsocks/shadowsocks-manager.git
cd shadowsocks-manager
npm install
npm rebuild

################################################################################
# 或者直接全局安装
################################################################################
npm i -g shadowsocks-manager --unsafe-perm

安装的可执行程序

ssmgr
Shadowsocks Manager的主程序文件。

配置

工作原理

首先你要阅读「拓扑图」了解它的工作原理。了解了之后你才能明白如何进行配置:

# 第一步 #

假设有N台服务器,那么每台服务器上均需安装「shadowsocks」并启动「管理地址」的监听。

然后,并在每台服务器上启动一个「ssmgr」进程,以「type: s」的模式运行,负责通过「管理地址」来管理「shadowsocks」服务。

# 第二步 #

启动一个「ssmgr」进程,以「type: m」的模式运行。负责与模式为「type: s」的「ssmgr」进程通讯。

(!猜测!因为「shadowsocks」的管理功能不支持认证,所以要与它一起运行一个「ssmgr」进程,而「ssmgr」提供认证功能)

简单的原理图就是:

「shadowsocks」 <—> 「ssmgr(s)」 <—> 「ssmgr(m)」

通常,「shadowsocks」与「ssmgr(s)」在同一个节点上,而「ssmgr(m)」在另外的节点上。而且「ssmgr(m)」在一个节点上运行即可,它可以管理多个「ssmgr(s)」。

ssmgr type: m

配置文件:

# ssmgr-type-s.yaml
type: s

shadowsocks:
  address: 127.0.0.1:6001
manager:
  address: 0.0.0.0:4001
  password: '123456'
db:
  host: '1.1.1.1'
  user: 'root'
  password: 'abcdefg'
  database: 'ssmgr'

# 或者使用sqlite数据库,这需要Node.js安装模块
# db: 'ss.sqlite'

运行服务:

#!/bin/sh

ssmgr -c "ssmgr-type-s.yaml"

ssmgr type: s

配置文件:

# ssmgr-type-m.yaml
type: m

manager:
  address: 127.0.0.1:6002
  password: '123456'

plugins:
  flowSaver:
    use: true
  user:
    use: true
  account:
    use: true
  macAccount:
    use: true
  group:
    use: true
  email:
    use: true
    username: 'username'
    password: 'password'
    host: 'smtp.your-email.com'
  webgui:
    use: true
    host: '0.0.0.0'
    port: '80'
    site: 'http://yourwebsite.com'
    # cdn: 'http://xxx.xxx.com'
    # icon: 'icon.png'
    # skin: 'default'
    # googleAnalytics: 'UA-xxxxxxxx-x'
    gcmSenderId: '456102641793'
    gcmAPIKey: 'AAAAGzzdqrE:XXXXXXXXXXXXXX'
  # alipay:
  #   use: true
  #   appid: 2015012104922471
  #   notifyUrl: 'http://yourwebsite.com/api/user/alipay/callback'
  #   merchantPrivateKey: 'xxxxxxxxxxxx'
  #   alipayPublicKey: 'xxxxxxxxxxx'
  #   gatewayUrl: 'https://openapi.alipay.com/gateway.do'
  # webgui_telegram:
  #   use: true
  #   token: '191374681:AAw6oaVPR4nnY7T4CtW78QX-Xy2Q5WD3wmZ'
  # paypal:
  #   use: true
  #   mode: 'live' # sandbox or live
  #   client_id: 'At9xcGd1t5L6OrICKNnp2g9'
  #   client_secret: 'EP40s6pQAZmqp_G_nrU9kKY4XaZph'

db: 'webgui.sqlite'

# 同理,这个也可以使用MySQL数据库

运行服务:

#!/bin/sh

ssmgr -c "smgr-type-m.yaml"

配合「NGINX」使用

实际上就是对WebUI的方向代理:

server {
  listen         80;
  server_name    yourwebsite.com;
  rewrite        ^   https://$server_name$request_uri? permanent;
}
server {
  listen                 443 ssl http2;
  server_name            yourwebsite.com;
  ssl                    on;
  ssl_certificate        /xxx/chained.pem;
  ssl_certificate_key    /xxx/domain.key;
  location / {
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   Host             $http_host;
      proxy_set_header   X-Frame-Options  DENY;
      proxy_pass         http://127.0.0.1:8080;
  }
}

相关链接

GitHub/shadowsocks/shadowsocks-manager
centos6安装shadowsocks-manager和shadowsocks-libev
高级/配合 nginx 使用