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 使用