基于 CentOS 配置 Shadowsocks 笔记

1 依赖和环境配置

1.1 升级 yum

$ yum update

1.2 安装 screen

$ yum install screen

关于 screen 的详情:http://www.vpser.net/manage/screen.html

1.3 安装 wget

wget 是一个 Linux 下一个下载文件的工具,在这里我们用来下载稍后的 lnmp 一键安装包。安装 wget 的方法是:

$ yum -y install wget

1.4 安装 LNMP

  1. 新建 screen:screen -S lnmp
  2. 下载并执行 LNMP 安装包:http://lnmp.org/install.html

1.5 安装 Python、Python-setuptools 和 pip

  1. Python 在 CentOS 中已经内置,因此不必特意安装;
  2. 安装 Python-setuptools 和 pip:
$ yum install python-setuptools && easy_install pip

2 安装 Shadowsocks

这一部分是关于安装单用户版 Shadowsocks 的方法,如果要安装多用户版 Shadowsocks,这一部分可以省略,直接跳到第 3 部分。

2.1 安装 Shadowsocks

$ pip install shadowsocks

2.2 创建 Shadowsocks 配置文件

$ vi /etc/shadowsocks.json

2.3 启动 Shadowsocks

$ ssserver -p 8000 -k password -m rc4-md5 -d start

2.4 停止 Shadowsocks

$ sudo ssserver -d stop

2.5 检查 Shadowsocks 日志

$ sudo less /var/log/shadowsocks.log

2.6 使用配置文件启动 Shadowsocks

$ ssserver -c /etc/shadowsocks.json -d start
$ ssserver -c /etc/shadowsocks.json -d stop

3 配置 ss-panel

这部分安装详细步骤可参考资料:

3.1 下载 ss-panel 源码

在站点根目录:

$ git clone https://github.com/orvice/ss-panel.git

clone 完成后的目录结构需要保证 /public 目录在站点的根目录下。可以在根目录使用 $ mv ss-panel/{.,}* ./ 命令将子目录内容移动到当前目录。

3.2 服务器配置

root /home/www/ss-panel/public;

location / {
   try_files $uri $uri/ /index.php$is_args$args;
}  

编辑完成后记得重启 nginx 服务。

3.3 安装 Composer 并执行

  1. 根目录下载安装 Composer:% curl -sS https://getcomposer.org/installer | php
  2. 把 Composer 设置为可全局调用:% mv composer.phar /usr/local/bin/composer

设置全局调用后,以后只需运行 composer 命令就可以使用 Composer,而不需要输入 php composer.phar

安装配置好 Composer 后,在根目录执行它:

$ php composer install

3.4 创建数据库并导入

在 Mysql 中创建 ss-panel 的数据库,并导入根目录中的 db.sql

3.5 配置 .env 文件

根目录中执行 $ cp .env.example .env,将 .env.example 复制一份重命名为 .env,然后修改其中的数据库等配置。

.env 文件中需要修改 muKey 字段,修改为任意字符串(最好只包含 ASCII 字符),后端需要使用到这个 muKey:

muKey = 'api_key_just_for_test'  

3.6 设置 storage 目录权限

chmod -R 777 storage

3.7 配置管理员帐号

$ php xcat createAdmin

4 部署 shadowsocks-manyuser

4.1 下载 shadowsocks-manyuser

$ git clone https://github.com/fsgmhoward/shadowsocks-py-mu.git

clone 后 shadowsocks 子目录才是我们需要的,外面的是 setup.py 的相关文件。

4.2 配置 shadowsocks-manyuser

进入 shadowsocks 目录,将 config_example.py 复制一份到 config.py

$ cp config_example.py config.py

修改其中第 15 行和第 29~31 行的内容:

# 启用 MultiUser API
API_ENABLED = True

# 就是在你的站点地址后面加个 /mu
API_URL = 'http://ss.prinzeugen.net/mu'  
# 还记得上面在 .env 中填写的 muKey 吗?把它填在这里
API_PASS = 'api_key_just_for_test'  

由于使用 Mu API 来与前端通信,所以不要修改 config.py 中任何关于数据库的配置。

4.3 运行 ss-manyuser 服务

$ python servers.py

ss-panel 新注册的用户所分配的端口均为其 id-1 的用户的端口号 + 1。比如 admin 用户(uid 为 1)的端口为 12450,那么后面注册的新用户的端口就会是 12451,12452 这样递增的。

4.4 防火墙配置

$ iptables -I INPUT -p tcp -m tcp --dport 端口号 -j ACCEPT
$ iptables-save

如果开放注册,需要这样配置 iptables:

# 注意是半角冒号,意为允许 12450 及以上的端口
# 也可以指定 12450:15550 这样的范围
$ iptables -I INPUT -p tcp -m tcp --dport 12450: -j ACCEPT

如果希望防火墙规则写入到系统中,防止每次重启后都需要重新配置,则需要编辑 /etc/sysconfig/iptables 文件。

5 配置 supervisor 监控 ss-manyuser

5.1 安装 supervisor

$ easy_install supervisor

5.2 初始化 supervisor 配置文件

$ echo_supervisord_conf > /etc/supervisord.conf

5.3 配置 supervisor 以监控 ss-manyuser 运行

[program:ss-manyuser]
command = python /root/shadowsocks-py-mu/shadowsocks/servers.py  
user = root  
autostart = true  
autorestart = true  
  • command就是ss的运行命令;
  • user是执行命令的用户;
  • autostart和autoresart指自动启动和自动重启;

5.4 运行 supervisor

运行的时候使用-c指定配置文件
supervisord -c /etc/supervisord.conf
如果不指定配置文件
supervisord

则配置文件会依次在下面的文件夹中寻找
$CWD/supervisord.conf
$CWD/etc/supervisord.conf
# /etc/supervisord.conf

可以通过以下命令管理 shadowsock-manyuser 的状态

$ supervisorctl {start|stop|restart} ss-manyuser

5.5 更新配置文件

$ supervisorctl update //更新配置文件
$ killall -HUP supervisord //重启 supervisor 服务以加载配置

5.6 把 supervisor 加入开机启动进程

$ vi /etc/rc.local
supervisord -c /etc/supervisord.conf
或
supervisord

5.7 查看系统进程

  1. 查看全部进程:$ ps -ef
  2. 通过过滤关键词查看进程:$ ps -ef | grep keyword

参考资料

  • https://teddysun.com/339.html
  • http://wuchong.me/blog/2015/02/02/shadowsocks-install-and-optimize/
  • http://shadowsocks.blogspot.jp/
  • https://prinzeugen.net/build-shadowsocks-sharing-site-with-ss-panel/
  • https://blog.phpgao.com/supervisor_shadowsocks.html