3 月 29 2015
安装配置Shadowsocks Manyuser + SS-Panel
本文共被喵星人侦察过98,604次。。。写在前面:这个坑我挖了好几天了然而懒癌泛滥一直停留在标题阶段。。。
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 年 10 月 19 日 @ 09:07
@Ericduan: 是啊,不然为啥要用这个。。。Manyuser这个分支还可以实现流量控制等功能。。。
Ericduan
2015 年 10 月 23 日 @ 09:30
@大懒猫:好吧,我决定还是进化一下,升级到manyuser版本,这周争取弄好。另外觉得ss-panel不是很适合做服务提供商,能想到的就是把邀请码页面藏起来,然后卖邀请码,哈哈。
厘米
2015 年 11 月 07 日 @ 15:46
博主,请教一下manyuser怎么启用chacha20加密方式啊?网上搜到的都是单用户版的~我试了下显示ERROR method chacha20 not supported
打酱油
2015 年 11 月 08 日 @ 21:22
原以为博主和github上面的作者是一个人,都喜欢猫。
大懒猫
2015 年 11 月 08 日 @ 21:25
@厘米:manyuser这个分支比较老了,暂时只能支持到rc4-md5.不支持chacha20
大懒猫
2015 年 11 月 08 日 @ 21:26
@打酱油:我也希望我有这么牛逼啊。。。然而并没有。。。
厘米
2015 年 11 月 08 日 @ 21:27
@大懒猫:原来如此,谢谢解答!
Ericduan
2015 年 11 月 16 日 @ 23:03
拖了快一个月才来弄,哎,俺的拖延症要改改了。升级到many user版本了,真是省心啊,感谢楼主。希望翻墙的生意能好起来。vps也能卖出去。
放的地方
2015 年 11 月 26 日 @ 15:08
为什么开了 server.py之后,SS-PANEL 申请后账号,运行OK, 但删除了这个账号之后,手机还能连上?
大懒猫
2015 年 11 月 26 日 @ 18:05
@放的地方:后台要更新需要一段时间,并不是删除了实时就不能用了的。或者你也可以手动重启后端。
云霄
2015 年 11 月 30 日 @ 10:11
我的新注册用户端口从10000开始的 但是新注册的端口都是每次跳4-5 这样 比如下一个就是10004 再一个就是10009 正常吗?
然后删除用户 等了十几分钟也没变化 一样可以用…. 只能重启么..
大懒猫
2015 年 11 月 30 日 @ 13:13
@云霄:新的端口确实是随机一个数字增加的,这是正常的。你可以写一个每天自动重启后端的脚本,解决这个问题。
liji_jordan
2015 年 12 月 12 日 @ 13:24
@大懒猫:@大懒猫:请问一段时间是多久呢?
Elven
2015 年 12 月 23 日 @ 13:27
博主,为什么用户流量使用完后,系统不能停掉端口嘞?可用流量成负的了….
wzgeda
2015 年 12 月 25 日 @ 12:57
单用户能多人使用吗?
大懒猫
2015 年 12 月 25 日 @ 23:04
@wzgeda:可以的,现有的版本没有用户数量的限制。。。
freeman
2015 年 12 月 25 日 @ 23:07
@大懒猫:了解了
污基灰
2016 年 01 月 10 日 @ 14:19
折腾了两天,终于把各种难题都解决了,先是PHP安装不成功,后来环境都装上了,前后端也装好了,又发现没法登陆后台,最后四处找才发现,应该是把panel里面的几个sql导入到mysql里而不是shadowsocks里面的sql。现在终于能够愉快的跟小伙伴们装逼炫咯。万分感谢。
lucifer
2016 年 01 月 14 日 @ 22:50
@污基灰:
前端后端不是共用一个数据库吗?
污基灰
2016 年 01 月 15 日 @ 10:37
@lucifer:
是共用一个数据库,但是要导入的表文件不是shadowsocks文件下的,而是用ss-panel文件下的5个表。
yang
2016 年 01 月 23 日 @ 14:05
您好 我配置好ShadowsocksManyuser以后客户端连接一直是time out 重装vps数次 ShadowsocksManyuser 和sspanel 同步没有问题,就是客户端无法链接。使用一键端搭建的ss可以访问 这种方式就不行 求解 求联系方式。
Robert Lee
2016 年 01 月 24 日 @ 16:44
@yang:估计是防火墙里没开端口吧
Robert Lee
2016 年 01 月 24 日 @ 16:45
我还很好奇的想点开你说的清水寺论坛,居然已经无法访问了~~~~
yang
2016 年 01 月 24 日 @ 16:46
@Robert Lee:太对了!我直接关闭防火墙了,不知道隐患大不大
Robert Lee
2016 年 01 月 24 日 @ 20:35
@yang:你应该只开需要的端口,如果要开ss的端口,例如要开放10000~20000,那么
iptables -I INPUT -p tcp –dport 10000:20000 -j ACCEPT
iptables -I INPUT -p udp –dport 10000:20000 -j ACCEPT
service iptables status
service iptables save
环境centos
tomcb
2016 年 01 月 26 日 @ 23:04
感谢,按着教程前段装上了,但是打开ADMIN的时候就自己跳到USER页面去了,进不了管理后台,请问应该怎么解决?
LNMP。Ubuntu
大懒猫
2016 年 01 月 26 日 @ 23:10
@tomcb:你试试访问 /admin/login.php
tomcb
2016 年 01 月 27 日 @ 10:40
@大懒猫:
/admin/login.php可以打开,但登陆完后又跳去了/user/index.php
AresCNZJ
2016 年 01 月 31 日 @ 12:17
你好,有个问题想要咨询下,昨天我把manyuser的文件夹全删了重装后端后,新注册用户的端口和密码连不上,这是为什么呢,iptables里已经开启10000~20000端口。
大懒猫
2016 年 01 月 31 日 @ 12:37
@tomcb:那可能是你的用户没有加入到admin那个表里面。。。
大懒猫
2016 年 01 月 31 日 @ 12:38
@AresCNZJ:你删除之后有没有重新启动后端?
AresCNZJ
2016 年 01 月 31 日 @ 12:42
@大懒猫:我强制删除后端所有文件夹和文件后重新安装的后端,新注册用户的端口和密码数据库里user表中有了,但就是连不上
大懒猫
2016 年 01 月 31 日 @ 12:46
@AresCNZJ:之前的用户可以连接?
AresCNZJ
2016 年 01 月 31 日 @ 12:46
@大懒猫:是的,之前的都可以连接
AresCNZJ
2016 年 01 月 31 日 @ 13:04
@大懒猫:找到问题了,但搞不懂为什么,我进入服务器再manyuser已经运行的基础上再次用了python server.py命令运行,虽然有报错提示已经运行,但注册的各端口都重新显示pass,然后所有账号都正常了,新注册的也正常了,感谢博主的耐心回答
c
2016 年 02 月 17 日 @ 20:40
我管理员密码怎么试都不对,请问在哪里可以找到密码么…小白第一次弄
zjh
2016 年 06 月 26 日 @ 02:41
求助版主!SS PANEL V3,管理员修改用户信息的时候显示错误403,但用户可以自己修改信息。只有管理员是酱紫,是怎么回事?
大懒猫
2016 年 06 月 27 日 @ 10:47
@zjh:有可能是个bug?我现在没有再用V3所以暂时帮不了你。。。
zhouhao
2016 年 07 月 14 日 @ 21:32
听说博主开了邮件通知,我提交个疑惑。我现在功能都正常了,我现在要把他的数据表整合到我原有的cms上,就加了vpn_表前缀,现在前端可以连上登陆。config.py中的数据表前缀改怎么写
大懒猫
2016 年 07 月 14 日 @ 21:49
@zhouhao:似乎并没有开发相关的配置。。。你可以自己修改程序
zhouhao
2016 年 07 月 14 日 @ 22:47
@大懒猫:谢谢,通过其他方法已经解决了
worldlink
2016 年 08 月 11 日 @ 11:03
GOOD!
P
2016 年 09 月 10 日 @ 18:57
请问这个如何处理!
root@YunServer:/srv/www/html/shadowsocks-rm/shadowsocks# python servers.py Traceback (most recent call last):
File “servers.py”, line 35, in
from dbtransfer import DbTransfer
File “/srv/www/html/shadowsocks-rm/shadowsocks/dbtransfer.py”, line 5, in
import cymysql
ImportError: No module named cymysql
root@YunServer:/srv/www/html/shadowsocks-rm/shadowsocks# ^C
大懒猫
2016 年 09 月 13 日 @ 17:09
@P:错误提示写的很清楚了,cymysql模块没有装好
P
2016 年 09 月 16 日 @ 12:08
@大懒猫:
对的!!谢谢
天の城
2016 年 11 月 04 日 @ 22:50
请问博主 遇到如下的问题 改如何解决
2016-11-04 22:48:49 INFO server_pool.py:138 starting server at [::]:1025
2016-11-04 22:48:49 WARNING server_pool.py:152 IPV6 [Errno 97] Address family not supported by protocol
2016-11-04 22:48:49 INFO server_pool.py:165 starting server at 0.0.0.0:1025
2016-11-04 22:48:49 WARNING server_pool.py:178 IPV4 [Errno 98] Address already in use
2016-11-04 22:49:43 INFO auto_block.py:59 Read hosts.deny from line 321
2016-11-04 22:49:50 INFO db_transfer.py:531 db start server at port [1025] pass [CsNWUt] protocol [auth_sha1] obfs [http_simple]
rocky
2016 年 11 月 11 日 @ 17:05
前后端都配置好了
但是本地测试的时候报错
504 Connect to google.com:80 failed: SOCKS protocol error
The following error occurred while trying to access http://google.com/:
504 Connect to google.com:80 failed: SOCKS protocol error
Generated Fri, 11 Nov 2016 17:04:00 中国标准时间 by Polipo on windows10.microdone.cn:8123.
看评论要该config.json
但是不知道怎么改,里面默认也是aes256
大懒猫
2016 年 11 月 11 日 @ 22:26
@rocky:
看起来像是你本地的代理设置有问题?
大懒猫
2016 年 11 月 11 日 @ 22:42
@天の城:看起来你启用了IPv6但是你的服务器并不支持IPv6。。。关掉IPv6试试
rocky
2016 年 11 月 12 日 @ 10:17
@大懒猫:嗯,解决了