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」服务。
假设有N台服务器,那么每台服务器上均需安装「shadowsocks」并启动「管理地址」的监听。
然后,并在每台服务器上启动一个「ssmgr」进程,以「type: s」的模式运行,负责通过「管理地址」来管理「shadowsocks」服务。
# 第二步 #
启动一个「ssmgr」进程,以「type: m」的模式运行。负责与模式为「type: s」的「ssmgr」进程通讯。
(!猜测!因为「shadowsocks」的管理功能不支持认证,所以要与它一起运行一个「ssmgr」进程,而「ssmgr」提供认证功能)
启动一个「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 使用