在VPS上搭建ShadowSocks服务

添加用户组和用户

切换到root用户

  1. 添加用户组:
groupadd shadowsocks -g 1000
  1. 添加用户并修改密码:
useradd -m -g 1000 -G 100 -s /bin/bash ss
passwd ss

安装加速组件

OpenVZ架构VPS——安装LKL

LKL全称是Linux Kernel Library。

LKL (Linux Kernel Library) is aiming to allow reusing the Linux kernel code as extensively as possible with minimal effort and reduced maintenance overhead.

系统需求

  1. 只适用于OpenVZ架构 64bit 系统;
  2. 默认只转发9000-9999端口(即SS端口应设置在这个范围内);
  3. 推荐系统CentOS 7, Debian 8和Ubuntu 16;

安装

切换到root用户

首先安装git

apt-get update
apt-get upgrade
apt-get install git

一键安装命令:

wget https://github.com/91yun/uml/raw/master/lkl/install.sh && bash install.sh

判断安装成功

执行ping 10.0.0.2,如果能ping通则成功,否则失败。

修改转发端口

  1. 修改/root/lkl/run.sh,查找9000-9999,改成想要的端口段;
  2. 修改/root/lkl/haproxy.cfg,查找9000-9999,改成想要的端口段;
  3. 重启vps。

KVM架构VPS——更新内核并开启BBR

系统需求

  1. Debian 8.x 或者 Debian 9.x 系统, Ubuntu 14.04 或 Ubuntu 16.04;
  2. 如果不是新机器,建议先备份,升级内核有风险;

升级内核

Ubuntu网站上下载新内核安装包,目前4.9.x内核最新的版本为4.9.65。

mkdir kernel-tmp && cd kernel-tmp
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.65/linux-headers-4.9.65-040965_4.9.65-040965.201711240331_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.65/linux-headers-4.9.65-040965-generic_4.9.65-040965.201711240331_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.65/linux-image-4.9.65-040965-generic_4.9.65-040965.201711240331_amd64.deb
sudo dpkg -i *.deb

安装完成后重启,重启后检查内核版本:

root@s1 ~ # uname -r
4.9.65-040965-generic

配置生效

使用root用户

修改 /etc/sysctl.conf文件

cat >> /etc/sysctl.conf << EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

使内核配置生效

root@s1 ~ # sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

检查 BBR 是否已正确开启,如果出现 tcp_bbr 字样则说明没有问题。

root@s1:~# lsmod | grep bbr
tcp_bbr                20480  0

安装并配置ShadowSocks

安装

切换到ss用户

  1. 安装miniconda(可选)
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh && bash Miniconda3-latest-Linux-x86_64.sh
  1. 安装ShadowSocks
pip install shadowsocks

配置

mkdir shadowsocks && cd shadowsocks/
touch ssconfig.json
touch ss.pid
vi ssconfig.json

配置文件ssconfig.json内容:

{
    "server":"0.0.0.0",
    "port_password":{
        "port1":"password1",
        "port2":"password2",
        "port3":"password3"
    },
    "timeout":600,
    "method":"aes-256-cfb"
}

启动和停止ShadowSocks

普通方式

设置alias:

alias startss="cd ~/shadowsocks;ssserver -c ssconfig.json --pid-file ss.pid --log-file ss.log -d start"
alias stopss="cd ~/shadowsocks;ssserver -c ssconfig.json --pid-file ss.pid --log-file ss.log -d stop"

-c指定配置文件,—pid-file指定进程pid储存文件,--log-file指定日志文件,-d以服务启动。

切换到ss用户

startss
stopss

使用Supervisor

supervisor配置如下,运行时-q选项使程序只记录错误日志

[program:shadowsocks]
directory = /home/ss/shadowsocks
command = /home/ss/miniconda3/bin/ssserver -c ssconfig.json -q
autostart = true
autorestart = true
startsecs = 3
startretries = 3
user = ss
redirect_stderr = true
stdout_logfile = /home/ss/shadowsocks/error.log

更新supervisor并启动:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status
目录