网上的教程不是不全就是过时,自己解决问题,做个笔记。
安装 LNMP 环境
LNMP 是常用的 web 环境 Linux, Nginx, MySQL, PHP 的简称。
NGINX
安装 Nginx :
sudo apt-get update
sudo apt-get install nginx
MySQL
同理:
sudo apt-get install mysql-server
安装过程中会提示设置数据库管理员密码。
PHP
Ubuntu 自带的 PHP 版本太老了,所以得安装最新的 PHP 7。
添加 PPA:
sudo add-apt-repository ppa:ondrej/php
如果有乱码,试试下面的这个:
sudo apt-get install language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
完了就开始装吧。
sudo apt-get update
sudo apt-get install php7.0 php7.0-fpm php7.0-mysql php7.0-gd php7.0-curl php7.0-mbstring php7.0-dom
部署 SS-Panel 前端
下载 ss-panel。目录随意,比如我的放在 /var/www
git clone https://github.com/orvice/ss-panel.git
进入目录,使用 composer 安装需要的依赖。
curl -sS https://getcomposer.org/installer | php
php composer.phar install
再安装 redis:
sudo apt-get install redis-server
添加 MySQL 数据库:
Tips: 若想更改默认加密方式,请先在添加数据库前查看下文“进阶”。
mysql -u root -p
mysql>create database shadowsocks;
> use shadowsocks;
> source /var/www/ss-panel/db-160409.sql;
> flush privileges;
> exit;
配置 NGINX
创建配置文件:
sudo vim /etc/nginx/sites-enabled/ss-panel
加入以下代码:
server {
listen 80;
server_name example.com;
root /var/www/ss-panel/public/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
复制并修改 SS-Panel 配置文件
进入到 ss-panel 文件夹,复制配置文件:
cp .env.example .env
修改其中的信息,其中 yourpasswd 记住修改:
# database 数据库配置
db_driver = 'mysql'
db_host = 'localhost'
db_port = '3306'
db_database = 'shadowsocks'
db_username = 'root'
db_password = 'yourpassword'
db_charset = 'utf8'
db_collation = 'utf8_general_ci'
db_prefix = ''
设置密码
redis 密码
修改配置文件,在 /etc/redis/redis.conf
找到 requirepass
一行,设置自己的密码。并且终端进行如下操作:
redis-cli
>config set requirepass yourpasswd
OK
>config get requirepass
(error) ERR operation not permitted
>auth yourpasswd
>OK
>config get requirepass
>
加盐等操作
可以仔细看 ss-panel 的配置文件 .env
,在 salt
中添加随机字符串。
添加一个管理员账户
php xcat createAdmin
开启 nginx 服务器:
sudo service nginx start
好了,现在访问网站应该就可以看到 SS-Panel 界面了。前端界面到此部署完毕。
如果出现 “Slim Application Error。A website error has occurred. Sorry for the temporary inconvenience.” 那你可能还需要更改ss-panel文件夹的读写权限:
chmod -R 777 ss-panel
部署后端 shadowsocks-manyuser
下载代码:
git clone -b manyuser https://github.com/mengskysama/shadowsocks-rm.git
安装 cmysql 依赖:
sudo pip install cymysql
(如果没有安装 pip,用 apt-get install python-pip
安装一遍即可)
进入 shadowsocks-rm/shadowsocks 目录,修改 config.py 文件的以下项,记得替换 yourpassword 为自己刚刚设置的密码:
#Config
MYSQL_HOST = 'localhost'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASS = 'yourpassword'
MYSQL_DB = 'shadowsocks'
然后就完成了!python servers.py
试试,如果没有报错就可以正常运行了。
守护进程
screen -S shadowsocks
在此窗口执行 python servers.py
。退出时按 Ctrl+A+D
。
回到 session:
screen -R
开机自启动
需要开机自启动的两个服务:redis 和 manyusers。
检查 redis 是否已经添加开机自启,关机自关
update-rc.d redis-server defaults
manyusers
在 /etc/rc.local
中添加:
/usr/bin/nohup /usr/bin/python /etc/shadowsocks-rm/shadowsocks/servers.py
进阶
更改默认链接密码加密方式和密码长度
加密方式的实质改变
shadowsocks-rm/shadowsocks
中的 config.py
可以修改 SS-METHOD
,推荐使用 aes-256-cfb
。
加密方式的表象改变
在 db-160409.sql 中的 User 配置中将加密方式从 rc4-md5
改为 aes-256-cfb
。
在随机生成的密码中修改长度,并添加特殊字符
vi ss-panel/app/Utils/Tools.php
更改其中 $length 和字符集
//获取随机字符串
public static function genRandomChar($length = 8)
{
// 密码字符集,可任意添加你需要的字符
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
为管理员和用户采用新的密码长度
管理员:
vi ss-panel/app/Command/XCat.php
在 function createAdmin
中修改$user->passwd = Tools::genRandomChar(6);
用户:
vi ss-panel/app/Controllers/AuthController.php
在 // do reg user
下修改 $user->passwd = Tools::genRandomChar(6);
连接故障排查
若不能连接,检查防火墙配置。SS-Panel 的端口是递加的,也就是说如果第一个用户的端口是 1000,那么新增用户的端口会是 1001, 1002……也就是说防火墙只要开启一个范围段的端口即可。举例如果要开启 1000-1050 的端口,可以sudo ufw allow 1000:1050/tcp
或者iptables -I INPUT -p tcp -m tcp --dport 1000:1050 -j ACCEPT
。
ss-panel 界面的个性化
编辑界面可以进入 ss-panel/resources/views
中修改相应php文件。
加速
Linux 内核中提供了若干套 TCP 拥塞控制算法,这些算法各自适用于不同的环境。
reno是 最基本的拥塞控制算法,也是 TCP 协议的实验原型。
bic 适用于rtt较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是 2.6.8 到 2.6.18 之间的 Linux 内核的默认算法。
cubic 是修改版的 bic,适用环境比 bic 广泛一点,它是 2.6.19 之后的 linux 内核的默认算法。
hybla 适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。
我们需要做的工作就是将TCP拥塞控制算法改为 hybla 算法,并且优化 TCP 参数。
要求 Linux 内核 3.5 或以上。
增加系统文件描述符的最大限数
编辑文件 limits.conf
vi /etc/security/limits.conf
增加以下两行
* soft nofile 51200
* hard nofile 51200
启动 ss-manyuers 服务器之前,设置以下参数
ulimit -n 51200
调整内核参数
修改配置文件 /etc/sysctl.conf
:
fs.file-max = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
修改后执行 sysctl -p
使配置生效。
相关
以上加速方法已经过时,Debian 9 开启 BBR 加速的方法,见 Enable BBR on Debian Stretch 。