3 月 29 2015
安装配置Shadowsocks Manyuser + SS-Panel
本文共被喵星人侦察过98,605次。。。写在前面:这个坑我挖了好几天了然而懒癌泛滥一直停留在标题阶段。。。
2015-07-06 update:新版ss-panel更新了一些地方,文章下面更新了。
前段时间响应王老板的号召,IEC的一些牛(xian)逼(de)哄(dan)哄(teng)的小伙伴们一起弄了一个清水寺论坛,做这个肯定不是为了自己弄着好玩儿,我们也想着把这个网站推出去,于是我们想着搞一些大新闻,就能增加知名度。然而其中某个环节就是让我来搞一个你懂得的服务来服务大众。一开始想着直接开个页面用户名密码公布出来大家想用就用,后来觉得这样太Low逼了,也显得不够专业。想起了在V2EX上看到过ss-panel这种东西,查了查资料感觉很简单,但是实际部署的时候遇到了坑。。。为了避免自己或者其它的人踩进坑里于是决定写点什么。。。于是就有了这篇文章。。。
SS-Panel是由Orvice写的一款配合ShadowsocksManyuser的前端程序。这货是用世界上最好的语言PHP写成的,所以你需要一个支持php的VPS。由于用了奇怪的新特性所以只支持PHP5.4以上的版本。当然为了存储用户数据还需要mysql的支持。
SS-Panel的安装很简单,下载这个ZIP包(由于作者现在在开发V3版本但是还没有完成,所以旧的链接下载的未完成版本不能使用现有的配置方法,请下载SS-Panel V2使用。)然后解压放到Web目录(绑定个域名或者子目录啥的都行,最好是https的,原因不解释),建立一个数据库和一个用户,赋予权限之后,打开解压的目录,将lib/config-simple.php改名成config.php然后修改下配置。必须改的配置是数据库用户、数据库密码、数据库名和本站URL,其他的站点名称之类的看心情修改。签到数值神马的直接参考配置文件中的注释就可以。然后将sql目录中的所有sql文件都导入配置文件中指定的数据库。没有问题的话这个SS-Panel就搭建好可以访问了。管理地址是<URL>/admin 默认的用户名、密码是admin 12345678 不知道是作者犯懒还是别的神马原因,admin用户的用户名密码想要修改只能去改数据库。。。不过也不是很麻烦啦。具体方法文章后面再介绍。
前端搭建好了,木有后端支持神马都是白搭。后端搭建的方法略微繁琐但是其实也是很简单的。首先需要安装一些依赖。我用的CentOS,于是直接
yum -y install python-pip m2crypto pip install cymysql
就可以啦。然后找个目录把ShadowSocks Manyuser下载下来
git clone -b manyuser https://github.com/mengskysama/shadowsocks.git
之后进入目录shadowsocks/shadowsocks里面,修改Config.py,指定数据库用户、密码、数据库之后就可以咯~运行
python server.py
后端程序就跑起来了~但是这里是坑了我的第一个地方。一开始的时候按照网上的办法给SS-Panel和ShadowSocksManyuser各自建立了一个数据库和一个用户,然后都装好后发现SS-Panel的配置中对于后端的配置只有名称、地址等几项,并没有配置管理地址、密码什么的的地方,让我百思不得其解,后来在V2EX上的某个帖子上发现:这俩货应该用同一个数据库!想想也是,SS-Panel本来就是一个前端的壳子而已,用同一个数据库也是应该的。。。研究了一下发现ShadowSocksManyuser对于用户的端口密码的控制是在user这个表中的,而SS-Panel的user这个表和SSManyuser的结构基本上是一样的。所以配置好SS-Panel之后配置ShadowSocks Manyuser的时候只需要填写SS-Panel的数据库用户密码神马的就搞定了。
第二个坑在于,我配置完SS-Panel和manyuser之后发现,这货注册新用户之后分配的端口是从5开始。。。5 10 15巴拉巴拉。。。当时我就震惊了,这么不人性化的设计,这样迟早会吧80神马的端口都分出去,迟早出问题。。。于是就找SS-Panel或者ShadowSocksManyuser怎么修改分配的端口范围,后来发现问题出在我自己这里,SS-Panel默认的数据库中带有一个用户,这个用户默认的端口是50000,之后新建的用户都会以第一个用户为基准端口号递增。我第一次装完后直接删掉了测试用户,所以端口号就是从0开始递增得了。手动修改数据库或者重新导入数据库,总之吧uid最低的用户的端口设置成为50000或者其他的,之后的用户端口就会依次递增啦。当然这个用户密码还是建议修改一下~
第三个不能算坑的坑,这货admin的用户名密码要手动修改数据库。。。还好数据库中的密码只是简单的MD5了一次而已。所以直接戳开数据库,打开ss_admin表直接诶修改里面的admin_name email和pass就可以了。pass是明文密码一次MD5得到的,很容易算出来。
150706 update: 新版的SS-Panel数据库中不再单独存储Admin用户名和密码,而是和user共用一套用户名和密码。admin这个表中只存了user中作为管理员的user_id,所以想要添加管理员的话就去数据库中增加对应的user_id就可以了。默认ID为1的用户是管理员。
还有一个坑就是如果想用supervisor之类的守护程序来保证ShadowSocksManyuser后端的稳定运行的话,在配置文件的command里面不能只写 python /server.py 我一开始就是这么写的,然后发现后端总是连接不上,看了一下Supervisor的日志发现这货直接error然后退出了。。。仔细看了看wiki之后发现command里面要加一个参数才行。。。所以command一行应该变成类似这样
command = python <PATH>/server.py -c <PATH>/config.json
这样就可以愉快的用Supervisor保证后端持续运行了。config.json里面带一个用户名密码端口,然而不用管它,这个密码和端口连接不上的。如果你要是觉得不保险的话可以把这个也改掉。
有人可能会问,想要配置多节点怎么办?很容易。。。只要mysql里面允许数据库的用户远程登录(建议用一个单独的用户,给比较少的权限),然后然后再配置后端的时候数据库地址填写前端SS-Panel所在的服务器的地址,然后数据库用户名密码什么的和之前的一样就可以了。然后再去SS-Panel配置里面加上这个新节点的名称和地址就可以了。ShadowSocksManyuser会自动去远程数据库中读取用户的端口密码等值。对于同一个用户来说,在所有节点的端口和密码都是相同的。
150706 update: 最新版的ss-panel有一些奇怪的问题,在开发者修复之前可以参考 issue 里面ilazycat和 604542720 提出的几个issue来手动解决一下。以下是链接 1 2 3
大懒猫
2015 年 07 月 28 日 @ 11:02
@kevin:前两天出去了没看。。。每个用户的端口和密码肯定是不一样的啊,如果你想让每个用户的端口和密码都一样那还有什么必要装SS-Panel呢?
连接密码是用户可以自己改的,但是端口是随机分配的,分配完了用户就不能自己随意修改了。你如果想让每个用户的连接密码都是固定值的话需要自己修改SS-Panel用户注册部分的代码。
kevin
2015 年 07 月 28 日 @ 11:17
@大懒猫:我创建了一个节点,在后台管理面板中添加了一个,用户账号点击节点,要是连接ss的端口号和密码每个人注册的都不一样的的话,然后我不去修改的话,别人不是连不到我的shadowsocks了吗,shadowsocks的端口肯和密码肯定不会变的
forhelp
2015 年 07 月 28 日 @ 19:23
怎样添加节点?前端配置好了,后端没搞好呀,是不是ShadowsocksManyuser没启动呀?
ll
2015 年 07 月 29 日 @ 08:55
按以上方法架设好了 欢迎免费来用 http://www.szmth.com
大懒猫
2015 年 07 月 29 日 @ 10:48
@forhelp:你装好Supervisor之后有没有启动Supervisor的服务?
forhelp
2015 年 07 月 29 日 @ 13:23
@大懒猫:
可以了,原来是加密方式不对,默认是rc4,配置好后端还需要修改config.json
forhelp
2015 年 07 月 29 日 @ 13:24
@大懒猫:
我没有配置Supervisor,直接用nohup凑合一下
大懒猫
2015 年 07 月 29 日 @ 14:44
@forhelp:nohup的话如果挂了不能自动启动。。。所以用supervisor好一点。。。
forhelp
2015 年 07 月 29 日 @ 16:31
@大懒猫:
也是,不过我不会配置supervisor,网上教程太麻烦,不系统,还请您出个教程,方便新手!
kevin
2015 年 07 月 30 日 @ 09:10
博主,您好!
我已经搭建完毕,后端进程已经运行,但是在PC上就是无法访问google等网站,之前用的ss一键包是可以使用的,后来卸载了,安装的ss和Panel,就无法使用了。。
forhelp
2015 年 07 月 30 日 @ 11:33
@kevin:
你启动了后端服务没?不能退出ssh,除非你配置了Supervisor 或者后台启动,你ping一下端口开放没,加密方式是否出错,默认是rc4
kevin
2015 年 07 月 30 日 @ 11:45
@forhelp:
root 2798 2762 0 11:08 pts/2 00:00:01 python server.py
服务是后台运行的
netstat -anp | grep 100
tcp 0 0 0.0.0.0:10001 0.0.0.0:* LISTEN 2798/python
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 2798/python
端口也是打开的
“method”:”rc4-md5″
jon里显示的加密方式
kevin
2015 年 07 月 30 日 @ 11:51
@kevin:
防火墙我也是关闭的
kevin
2015 年 07 月 30 日 @ 12:23
重启了机器,已经好了,感谢楼主!
顺便问一下楼主ss-panel的附加模块哪里有?
大懒猫
2015 年 07 月 30 日 @ 14:51
@kevin:你要什么样的附加模块?似乎目前只能自己开发需要的其他功能。。。
诗人博客
2015 年 07 月 30 日 @ 16:55
ss-panel + many user
多节点 , 能具体点吗 ?
forhelp
2015 年 07 月 30 日 @ 17:38
@诗人博客:
实现多节点,首先另一台VPS/DS需要安装ShadowsocksManyuser,然后访问/admin添加即可
诗人博客
2015 年 07 月 30 日 @ 18:24
@forhelp:我用的github上的ss-panel ,登陆后居然不能编辑节点. 还有个问题要请教, ss-panel 怎么能集成支付功能 ?
forhelp
2015 年 07 月 30 日 @ 19:51
@诗人博客:
不能编辑节点?重新安装吧,目前官方没有给出支付模块,需要自己开发哦
大懒猫
2015 年 07 月 30 日 @ 21:09
@诗人博客:编辑节点要登陆后台才可以,地址是/admin不是/user
kevin
2015 年 08 月 01 日 @ 12:02
@大懒猫:
比如支付模块。我在用户中心看到有什么A套餐B套餐之类的。
还有问一下博主,邮件怎么集成到SS里
大懒猫
2015 年 08 月 07 日 @ 11:46
@kevin:这些都要自己开发的,SS-Panel的作者都没有集成这些的。
hello
2015 年 08 月 14 日 @ 16:53
ss panel 怎么样根据用户套餐显示节点
大懒猫
2015 年 08 月 14 日 @ 16:54
@hello:现在版本的SS-Panel还没有这个功能,想要实现的话需要自己开发。。。
604542720
2015 年 08 月 15 日 @ 09:28
用了两个月了,前天开始出现一个蛋疼的问题,ss的每个端口每隔一个小时自动跑一小段流量,大小在几百B左右,同时影响的还有last keep live 字段,博主有出现这种情况吗?
大懒猫
2015 年 08 月 15 日 @ 13:44
@604542720:几百B的话。。可以忽略的吧。。。我似乎也遇到了,没有用着的测试账号每个月也会有几十K流量,不过这个太少了可以忽略不计。。。
604542720
2015 年 08 月 15 日 @ 13:46
大小不是问题,但是会影响其他的参数,比如用户在线时间
大懒猫
2015 年 08 月 15 日 @ 13:52
@604542720:这个我也没太大的感觉。。。而且现阶段的话用户在线时间这个参数并没有什么作用吧。。。个人觉得这个应该是SS-Manyuser的问题i,不是SS-Panel的问题。。。
机器侠
2015 年 08 月 17 日 @ 02:05
博主 你能否 详细 说说 多节点的设置添加要怎么操作 可能是我对数据库理解不够 卡在添加多节点,添加了 其他VPS的SS 不能工作
大懒猫
2015 年 08 月 17 日 @ 07:20
@机器侠: 其他的VPS的防火墙设置对不对?有没有开放端口?
机器侠
2015 年 08 月 17 日 @ 10:59
@大懒猫:
VPS防火墙都是关闭的 数据库用户名 密码 都保持一致 sql端口 也是 % 访问权限 我不知道哪里是我忽略的 这个环节 你 可以再文章里面重新编辑呀
机器侠
2015 年 08 月 17 日 @ 11:01
每个节点都要装ss-panel 吗?
大懒猫
2015 年 08 月 17 日 @ 13:52
@机器侠:不是啊,SS-Panel只有一个就可以,但是manyuser每个都要有。
机器侠
2015 年 08 月 17 日 @ 14:55
manyuser每个都要有 数据库地址都填写 跟用户名密码都填写 ss-panel VPS上的?
Andy
2015 年 08 月 19 日 @ 20:43
运行后报错
ERROR [Errno 99] Cannot assign requested address Traceback (most recent caLL Last): \
File “root/shadowsocks/shadowsocks/server_pooL.py”, Line 66, in _Loop mgr.add_to_Loop(Loop)
File “root/shadowsocks/shadowsocks/bsyncmgr.py”, Line 56, in add_to_Loop self._sock.bind((Config.AMNAGE_BIND_TP, Config.MANAGE_PORT))
File /usr/Lib/python2.7/socket.py, Line 224, in meth return getattr(seLf._sock,name)(*args)
error: (Errno 99] Cannot assign requested address
UnhandLed exception in thread started by Traceback (most recent caLL Last):
File /root/shadowsocks/shadowsocks/server_pooL.py, Line 73, in _Loop os.exit(0)
AttributeError: ‘module’ object has no attribute ‘exit’
大懒猫
2015 年 08 月 19 日 @ 22:26
@Andy:这样的话是端口被其他程序占用了吧。。。导致后端没启动
spo
2015 年 08 月 26 日 @ 10:57
报这种密码错误是什么原因呢,用的是注册用户时生成的密码
2015-08-26 10:46:24 WARNING unsupported addrtype 250, maybe wrong password
2015-08-26 10:46:24 ERROR [30005]can not parse header
2015-08-26 10:46:26 WARNING unsupported addrtype 193, maybe wrong password
2015-08-26 10:46:26 ERROR [30005]can not parse header
2015-08-26 10:46:27 WARNING unsupported addrtype 219, maybe wrong password
2015-08-26 10:46:27 ERROR [30005]can not parse header
小明
2015 年 09 月 08 日 @ 06:43
我照你的教程,安装完前端之后,然后打开域名/admin 为什么会出现一片空白?是不是因为我还没装后端?
大懒猫
2015 年 09 月 10 日 @ 20:48
@小明:你看一下错误日志,看看是哪里导致的
朝舞
2015 年 09 月 14 日 @ 17:07
太菜了,居然只支持PHP5.4 我网站在PHP5.3上跑的没问题,切到php5.4 就有问题。
但是这个前端面板在5.4上没问题。真实奇了怪了ZBLOG 有那么差
qinshou
2015 年 10 月 14 日 @ 10:27
SS-Panel的安装很简单,下载这个ZIP包然后解压放到Web目录
这里的zip包里,没有lib目录 没有这个文件.lib/config-simple.php
也没有sql目录下的sql文件
求解.
大懒猫
2015 年 10 月 14 日 @ 10:30
@qinshou:
开发者现在master上放了一个未完成的分支。。。
https://github.com/orvice/ss-panel/archive/v2.zip
下载这个吧。
qinshou
2015 年 10 月 14 日 @ 10:31
我找到原因了.
作者在github里说明了,v3版本还没有完成, 你那个地址是v3版本的…..
目前只能用v2版本的.
V2版本地址如下:
https://codeload.github.com/orvice/ss-panel/zip/v2
qinshou
2015 年 10 月 14 日 @ 16:51
有以下疑问
1.ss-panel 里怎么不能新增用户.?
2.需要修改默认节点吗, 那个节点地址是ip+端口的形式吗?
3.想增加更多的端口,在ss-panel里找不到设置. 难道是修改json配置文件?
有以上疑问,感谢您百忙之中来解惑,灰常感谢
大懒猫
2015 年 10 月 14 日 @ 23:16
@qinshou:
1、新增用户的话请生成邀请码然后让用户自己注册
2、默认节点肯定要改成你自己的啊,地址是IP或者域名
3、Manyuser区分用户的方式就是不同端口,每个用户都会分配一个不同的端口
0.0
2015 年 10 月 16 日 @ 03:21
关于空白 当时是直接去作者项目那下载覆盖php解决的 感觉是配置文件兼容的问题?
大懒猫
2015 年 10 月 16 日 @ 12:15
@0.0:你说的哪里的空白?
Ericduan
2015 年 10 月 16 日 @ 17:30
1. 前端是搭成功了,不过后端使用的是remi的repo,通过yum安装的,貌似没有配置数据库的地方,必须使用git上的那个many user版本么?
2. 如何限制客户端多个设备登录,比如最多允许shadowsocks客户端有2个同时科学上网。
大懒猫
2015 年 10 月 16 日 @ 17:32
@Ericduan:
1、后端当然必须使用manyuser这个分支,remi上面的shadowsocks是单用户的。
2、这个SS-Panel没有提供相关的方法,对于Shadowsocks这种比较轻量级的梯子似乎也不好做客户端数量的限制,我暂时是不知道有什么办法可以做到,如果你找到了方法也请分享出来。
Ericduan
2015 年 10 月 19 日 @ 09:04
@大懒猫:
多谢博主的回复。我暂时使用的是remi的多端口来实现多用户,根据用户在ss-panel上注册生成的端口和密码,然后手动ssh系统后台写到ss的shadowsocks.json配置文件里,目前只有几个人在用。manyuser版本的,是用户注册时就自动在后台生效了么?