逗比根据地 更换域名为 doub.io,并且以后不在更换域名 ,请逗比们互相转告~
逗比交流群: 271866172 / 531201358

ShadowsocksR 多用户版服务端安装教程(SS-Panel后端)

Shadowsocks Toyo 148评论
文章目录
[显示]
本文最后更新于 2017年1月1日 18:57 可能会因为没有更新而失效。如已失效或需要修正,请留言!
注:多用户版需配合ss-panel等前端使用,查看SS-Panel教程。

这篇文章主要说明ShadowsocksR后端的安装教程,这属于后端教程,前端教程请看这里,新手扩展篇请看这里(教程都是配套的,建议放在一起看!)

如果你看不太懂,那么你需要看这个:SS-Panel 前后端详细演示安装 视频教程

SS-Panel教程特别声明!!!!!!!!!!!!!!!!!!!

此教程为多用户版,适合站长。如果你是个人使用,请查看单用户版教程:单用户版教程

以下命令均以root用户执行,或sudo方式执行。

以下部分内容可能需要VIM操作,不懂的可以看一下这个VIM小白教程


说明一下新手步骤,安装依赖 → 下载源码 → 修改数据库配置 → 设置脚本权限并运行脚本!

没了,就这么简单,不要想的那么复杂。

不会链接VPS的,你需要看着个:Linux SSH链接工具 Putty 新手详细使用教程

更多的Shadowsocks安装教程/一键脚本请看这里:Shadowsocks指导篇

注意:最新版本的ShadowsocksR服务端取消了 协议 兼容原版,影响解释看着个最后一个支持 协议 兼容原版的ShadowsocksR服务端版本看着个

基本库安装

Centos系统执行这个:

yum install python-setuptools
easy_install pip
yum install git

Ubuntu/Debian系统执行这个(推荐这两个系统,对新手友好):

apt-get update
apt-get install python-pip git -y

如果要使用 salsa20 和 chacha20 算法,请安装 libsodium(这个模块在不断更新可能本文章里的不是最新版,在这里看最新版本,并替换下面代码的版本号) :

apt-get install build-essential
wget --no-check-certificate -N https://github.com/jedisct1/libsodium/releases/download/1.0.11/libsodium-1.0.11.tar.gz
tar xf libsodium-1.0.11.tar.gz && cd libsodium-1.0.11
./configure && make -j2 && make install
ldconfig

如果曾经安装过旧版本,亦可重复用以上步骤更新到最新版,仅1.0.4或以上版本支持chacha20-ietf

安装cymysql

pip install cymysql

获取源代码

git clone -b manyuser https://github.com/shadowsocksr/shadowsocksr.git

执行完毕后此目录会新建一个shadowsocksr目录,其中根目录的是多用户版(即数据库版)子目录中的是单用户版。

子目录中的是单用户版(即shadowsocksr/shadowsocks)。

以下是相对路径,比如你在 /root 目录下执行上面的代码,那你的SS根目录就是 /root/shadowsocksr

根目录即 shadowsocksr

子目录即 shadowsocksr/shadowsocks

服务端配置

进入根目录:

cd shadowsocksr
cp mysql.json usermysql.json

shadowsocksr目录内,打开文件vi usermysql.json

"host": "127.0.0.1", //前端mysql域名/IP
"port": 3306, //mysql端口
"user": "ss", //mysql用户名
"password": "pass", //mysql密码
"db": "shadowsocks", //数据库名
注意:这里的数据库信息除了 host ,其他的必须和SS-Panel完全一致,服务端启动的时候会读取数据库信息!至于 host ,如果你的服务端和前端(SS-Panel)在一个VPS上,那就写localhost或者127.0.0.1,如果不在一起,请写前端(SS-Panel)所在VPS的ip或者域名!
还有一条要注意的,如果服务端和前端(SS-Panel)不在一个VPS上,那么数据库链接就属于远程链接了,这时候需要开启数据库用户的远程链接功能!
开启方法:在数据库——用户——编辑权限——登录信息中修改Host为任意主机“%”

配置文件config.json:

文件config.json复制一份到user-config.json,然后编辑:

cp config.json user-config.json
vi user-config.json
"method":"aes-256-cfb", //修改成您要的加密方式的名称
"protocol": "auth_sha1_compatible", //修改成您要的协议插件名称
"obfs": "tls1.0_session_auth_compatible", //修改成您要的混淆插件名称

如果需要修改协议插件和混淆插件,请根据单用户版服务端页面的选项对照说明修改参数。

默认是兼容模式,原版也可以用,SSR开启插件也可以用!

id //用户id数据库字段说明:

email //用户邮箱
pass //用户密码
passwd //ss密码
t //最后使用的时间
u //已上传流量
d //已下载流量
transfer_enable //可用流量(总量)
port //ss端口
switch //保留字段
enable //启用或禁用ss帐号(1启用,0禁用)
type //保留字段
last_get_gift_time //保留字段
last_rest_pass_time //保留字段

ShadowsocksR多用户板服务端默认开启UDP的

服务端运行与停止

运行:

python server.py

这句运行代码主要用于调试,关闭ssh后ss后端自动关闭,所以正式使用请使用下面的脚本运行!如果需要停止请按Ctrl+C键终止程序。

这时可查看有运行情况,检查有没有错误。如果服务端没有错误,而连接不上,需要检查iptables或firewall(centos7)的防火墙配置

通过脚本运行

脚本位于 /shadowsocksr 根目录,如果你没有在这个目录,请先进入根目录cd shadowsocksr

请分清楚,根目录 /shadowsocksr 和子目录 /shadowsocksr/shadowsocks !!!!!!!!!!!!!!!!

赋予脚本执行权限(执行一次就好)

chmod +x *.sh

后台运行不记录日志(ssh窗口关闭后也继续运行)

./run.sh

后台运行记录日志(ssh窗口关闭后也继续运行)

./logrun.sh

查看 SS日志(用 logrun.sh 脚本启动才会打开日志)

./tail.sh

停止运行

./stop.sh

注:通过脚本运行默认日志会保存在根目录的ssserver.log,可手动查看。

如果日志文件太大,需要清理,可以用下面这个命令 清空 日志文件。

cat /dev/null > ssserver.log

更新源代码

如果代码有更新可用本命令更新代码

进入shadowsocksr目录

cd shadowsocksr

执行

git pull

成功后重启ss服务

开机启动

一些人可能需要开机启动,我就一起写上吧。

首先设置开机启动文件的权限,并打开该文件。

Centos系统:

chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local

Ubuntu/Debian系统:

chmod +x /etc/rc.local
vi /etc/rc.local

然后在 exit 0 这一句代码(只有ubuntu/debian有这个 exit 0)的前面加上 下面这句代码(如果你的Shadowsocksr文件夹不在root目录下,请自行修改路径)

是使用不记录日志的 run.sh 脚本还是记录日志的 logrun.sh 自己看着改。

sudo bash /root/shadowsocksr/run.sh

然后按 ESC键 退出vi编辑模式,然后输入 :wq 保存并退出该文件,就完成了。

我以后不再写任何sspanel教程,也不再回复任何sspanel问题!

其它异常

无法连接Shadowsocks服务端,并且没提示错误或者提示IP被占用

如果Shadowsocks服务端没有提示错误,或者提示IP被占用,并且使用./stop.sh和./run.sh脚本重启后,依旧无法连接Shadowsocks,请重启当前VPS(这个问题我猜测可能是./stop脚本并不能完全关闭Shadowsocks所有连接,导致无法解决问题。正好Shadowsocks服务端默认随机启动,所以重启VPS可以解决这个问题。如果你知道原因或者其他更好的解决办法请在下面留言)。

Shadowsocksr无法连接到数据库!MYSQL:2003

经过我多次实验,发现这个问题都是出现在Shadowsocksr后端和数据库不在一个VPS上,这就说明了是数据库所在VPS的错误,先开放数据库的远程连接“%”,这个上面服务端配置里说的有方法。然后再打开你iptables防火墙配置文件(多半问题都是出现在这里,3306数据库端口没有对外开放)。


默认lnmp安装后,会封闭3306的端口,不允许外部链接,所以删掉这个规则重新添加开放规则就好了。

删掉原来的3306 DROP规则,然后加上开放3306端口规则。

iptables -D INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

服务端运行提示/日志正常,客户端填写也正确,但是依然无法连接!

这种情况一般都是防火墙搞的鬼(Debian/Ubuntu基本排除,多出现在Centos系统)。

iptables -L

看一下有没有什么东西阻止了ss端口,或者说是没有允许/开放ss的端口。

如果你看不明白,你可以先关闭防火墙,试一试是不是防火墙的问题导致的无法连接。

/etc/init.d/iptables stop

对了,部分VPS是没有吧iptables添加到服务里面,所以只能清空防火墙规则(也就是开放所有端口)

iptables -F

如果关闭后SS链接正常,那就是防火墙的问题,你可以随后慢慢排除防火墙规则。也可以直接 iptables -F 清空防火墙,但是我不建议这么做,一不小心就需要重装服务器了。


如果你的服务端python版本在2.6以下,那么必须更新python到2.6.x或2.7.x版本


如果运行一段时间后,你发现服务器无法连接,同时ssh连上去后,执行

netstat -ltnap | grep -c CLOSE_WAIT

显示的数值很大(超过50是严重不正常),那么请修改服务器的最大连接数,如果是ubuntu/centos均可修改

/etc/security/limits.conf

添加两行:

* soft nofile 32768
* hard nofile 131072

然后重启机器生效(详细的看这个Linux上的shadowsocks服务端优化方法

如果还是出现大量的too many open files错误,可以通过执行以下命令确定占用大量文件数的进程:

lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more

更多的Shadowsocks安装教程/一键脚本请看这里:Shadowsocks指导篇

转载自ShadowsocksR官方Github文档:https://github.com/breakwa11/shadowsocks-rss/wiki/Server-Setup(manyuser)

转载请超链接注明:逗比根据地 » ShadowsocksR 多用户版服务端安装教程(SS-Panel后端)
责任声明:本站一切资源均原创或收集自互联网,仅作交流学习之用,请勿用作商业!如造成任何后果,本站概不负责!

赞 (29)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(148)个小伙伴在吐槽
  1. 那个问下SSR服务端的进程名是什么,想做个监控进程的脚本
    Sakura_Love2017-01-12 19:54 回复
    • 就叫Pyhton,进程PID可以查看 cat /var/run/shadowsocks.pid 文件。
      Toyo2017-01-12 20:08 回复
  2. ip被占用有好的解决办法吗?不然用几分钟就死机了。。。。
    andysu2017-01-04 14:28 回复
    • IP被占用是因为你开了多个 SS服务端。
      Toyo2017-01-04 15:31 回复
      • 当我要添加第二台服务器的时候,(已有一台服务器与网站共享一个ip,并已开通服务),在这种情况下,又另外添加一个服务器,仅仅改serverinfo.py和 usermysql.json(网上找的方法)中对应内容时,就会出现这样的ip占用问题,我重装好多次了,我是想是都需要修改不同的服务器用不同端口或者什么。。。新手自学,好多天了,都没弄好,如果Toyo能指导一二,万分感谢!
        andysu2017-01-04 21:32 回复
        • IP占用是开了多个SS服务端导致的。
          Toyo2017-01-04 22:06 回复
          • 厚着脸皮再问下 :sad: ,这个问题怎么解决呢。。。一个服务端,怎么添加多个服务器呢。。。如果方便,请大神指导,如果不方便,也没有关系,已经非常感谢了! :idea:
            andysu2017-01-05 09:39 回复
          • 是因为我运行了两次python server.py 造成的吗?
            andysu2017-01-08 00:18 回复
  3. 能不能教一下怎麼用Shadowsocks-Go mu
    lok2016-12-30 11:14 回复
  4. 你好,我都安装好了调试的时候是可以翻墙的,但是我Ctrl C 关闭调试后 然后执行chmod +x *.sh之后为什么就不能连接了 SS客户端连上后就没法翻墙了
    盒子2016-12-29 21:49 回复
    • chmod +x *.sh 命令的意思是:给当前文件夹下面所有sh脚本文件赋予执行权限,你还要执行 ./run.sh 或者带日志的 ./logrun.sh 脚本,才算启动ShadowsocksR服务端。
      Toyo2016-12-30 00:02 回复
  5. 请问站长,user-config.json 是不是针对的是全局的参数? 怎么样设置才能限制SSpanel中 单个端口 同时在线客户端的最大数目? 我改了user-config.json 中的协议和协议参数后,如果设置协议参数为1,就变成了所有SSpanel中的端口最多有一个客户端同时在线了……
    lantudai2016-12-19 09:56 回复
  6. 站长你好,根据你的配置我在运行python server.py时遇到了这个问题: root@bbr:~/shadowsocks# python server.py loaded collections.OrderedDict IPv6 support Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner self.run() File "server.py", line 38, in run self.obj.thread_db(self.obj) File "/root/shadowsocks/db_transfer.py", line 198, in thread_db db_instance = obj() File "/root/shadowsocks/db_transfer.py", line 247, in __init__ self.load_cfg() File "/root/shadowsocks/db_transfer.py", line 254, in load_cfg cfg = json.loads(f.read().decode('utf8')) File "/usr/lib/python2.7/json/__init__.py", line 326, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 365, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Invalid control character at: line 12 column 17 (char 229)
    Jason2016-12-15 14:12 回复
    • 似乎是读取json配置文件出现了问题,具体不是很清楚,建议联系作者。
      Toyo2016-12-15 15:44 回复
  7. centos 7 执行第二句 easy_install pip ,报错。 Searching for pip Reading https://pypi.python.org/simple/pip/ Best match: pip 9.0.1 Downloading https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9 Processing pip-9.0.1.tar.gz Writing /tmp/easy_install-LZFNs8/pip-9.0.1/setup.cfg Running pip-9.0.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-LZFNs8/pip-9.0.1/egg-dist-tmp-iTuOXy /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires' warnings.warn(msg) warning: no previously-included files found matching '.coveragerc' warning: no previously-included files found matching '.mailmap' warning: no previously-included files found matching '.travis.yml' warning: no previously-included files found matching '.landscape.yml' warning: no previously-included files found matching 'pip/_vendor/Makefile' warning: no previously-included files found matching 'tox.ini' warning: no previously-included files found matching 'dev-requirements.txt' warning: no previously-included files found matching 'appveyor.yml' no previously-included directories found matching '.github' no previously-included directories found matching '.travis' no previously-included directories found matching 'docs/_build' no previously-included directories found matching 'contrib' no previously-included directories found matching 'tasks' no previously-included directories found matching 'tests' Adding pip 9.0.1 to easy-install.pth file Installing pip script to /usr/bin Installing pip2.7 script to /usr/bin Installing pip2 script to /usr/bin Installed /usr/lib/python2.7/site-packages/pip-9.0.1-py2.7.egg Processing dependencies for pip Finished processing dependencies for pip
    st2016-12-10 15:25 回复
    • 我不用Centos,Centos的问题我无法回答。
      Toyo2016-12-10 16:27 回复
  8. 你好站长,想问一下 如果要增加一个节点,是不是在一个新的vps上部署后端就可以了?需要修改什么文件么?我尝试了一下,可以连接远程的mysql 但是 ss启动后 不能够打开网页,显示网页错误, 是防火墙相关的原因么? 我看了前面的评论也没有一个解决办法, 谢谢了!
    ehco2016-12-10 11:36 回复
    • 添加其他节点,只需要重复 ShadowsocksR服务端安装步骤就行了,也就是 usermysql.json里面的IP要换成数据库所在VPS的IP。
      防火墙不会玩就直接iptables -F清空。
      具体错误我都不清楚无法判断
      Toyo2016-12-10 12:38 回复
      • 我就是这样做的 但是运行server.py 之后 :2016-12-10 05:15:23 INFO db_transfer.py:171 db start server at port [11634] pass [JT4tvCcI] protocol [auth_sha1_v4_compatible] method [aes-256-cfb] obfs [tls1.2_ticket_auth_compatible] 2016-12-10 05:15:23 INFO server_pool.py:127 starting server at [::]:11634 2016-12-10 05:15:23 WARNING server_pool.py:140 IPV6 /dev/urandom (or equivalent) not found 2016-12-10 05:15:23 INFO server_pool.py:153 starting server at 0.0.0.0:11634 2016-12-10 05:15:23 WARNING server_pool.py:165 IPV4 /dev/urandom (or equivalent) not found 2016-12-10 05:15:23 INFO db_transfer.py:171 db start server at port [11637] pass [FUPifHqB] protocol [auth_sha1_v4_compatible] method [aes-256-cfb] obfs [tls1.2_ticket_auth_compatible] 2016-12-10 05:15:23 INFO server_pool.py:127 starting server at [::]:11637 2016-12-10 05:15:23 WARNING server_pool.py:140 IPV6 /dev/urandom (or equivalent) not found 2016-12-10 05:15:23 INFO server_pool.py:153 starting server at 0.0.0.0:11637 2016-12-10 05:15:23 WARNING server_pool.py:165 IPV4 /dev/urandom (or equivalent) not found 一旦我用客户端 连接ss 就会显示 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files 2016-12-10 05:16:34 ERROR shell.py:50 [Errno 24] Too many open files
        ehco2016-12-10 13:17 回复
        • 你这种情况,我还是第一次见到,并不清楚解决办法,建议联系作者。
          Toyo2016-12-10 13:22 回复
      • 我把防火墙 -f 清空之后 ss客户端显示 2016-12-10 05:21:04 INFO db_transfer.py:171 db start server at port [11581] pass [ilr3VnRd] protocol [auth_sha1_v4_compatible] method [aes-256-cfb] obfs [tls1.2_ticket_auth_compatible] 2016-12-10 05:21:04 INFO server_pool.py:127 starting server at [::]:11581 2016-12-10 05:21:04 WARNING server_pool.py:140 IPV6 [Errno 98] Address already in use 2016-12-10 05:21:04 INFO server_pool.py:153 starting server at 0.0.0.0:11581 2016-12-10 05:21:04 WARNING server_pool.py:165 IPV4 [Errno 98] Address already in use
        ehco2016-12-10 13:22 回复
        • 你已经开了一个ShadowsocksR服务端了,他提示你 IP被占用了。
          Toyo2016-12-10 13:50 回复
          • 我还没有放弃,提示ip被占用是因为我有数据库的vps也运行了ssr服务端的原因么? 应该怎么解决呢?
            ehco2016-12-10 14:09 回复
            • IP指的是VPS本地的IP 0.0.0.0被占用了,就是你这个VPS上面开了多个ShadowsocksR服务端,导致冲突了。
              Toyo2016-12-10 14:22 回复
  9. Centos要运行这个pip install cymysql吗
    Ray2016-12-04 23:55 回复
  10. 博主你好我按照你的搭好了多用户板 但有两点不太明白 上面执行的修改配置文件还有运行脚本都是在/root/shadowsocks目录执行的吗 还是/root/shadowsocks/shadowsocks目录? 还有就是我在/root/shadowsocks 执行了python server.py 然后就停不下来了 关闭ssh也不行,他直接在后台运行了 网站一切正常 但是不知道怎么停止了
    云帆2016-11-18 14:10 回复
    • /root/shadowsocks目录是多用户的,python server.py是调试用的,Ctrl+c就会终止,关闭SSH也会终止,他只是前台运行,如果你把他搞成了后台运行,那我就不懂你是怎么搞的了。你可以试试./stop.sh脚本关闭。ShadowsocksR服务端和sspanel网站并不会互相影响。
      Toyo2016-11-18 14:25 回复
  11. 博主,在运行日志那里出现这样的提示: [root@zandeky shadowsocks]# python server.py loaded collections.OrderedDict IPv6 support INFO: loading config from user-config.json ERROR: found an error in config.json: No JSON object could be decoded config.json和userconfig.json都在/shadowsocks目录下且已经进行了配置,其他步骤没有提示错误,ssr无法连接,请问如何解决?
    爱哭的鬼2016-11-15 22:01 回复
    • 执行
      cp config.json user-config.json
      
      后,只需要修改user-config.json,文件,你的提示是 config.json 格式有错误。
      Toyo2016-11-15 23:42 回复
  12. 没一次成功的
    天の城2016-11-05 01:21 回复
    • 就这几个步骤,很简单,不知道为什么你们就是做不好。
      Toyo2016-11-05 10:18 回复
  13. raise OperationalError(2003, "Can't connect to MySQL server on %r (%s)" % (self.host, e.args[0])) OperationalError: (2003, "Can't connect to MySQL server on 'http://45.63.93.151/' (-2)") 求教
    nexus2016-11-03 11:01 回复
1 2 3