shadowsocks

目前 shadowsocks 中还在不断更新的只有 shadowsocks-libev,本文主要介绍这个。

shadowsocks-libev

ubuntu 的安装很简单,一条命令即可,不过貌似对 Ubuntu 版本有要求
sudo apt install shadowsocks-libev
安装的可能不是最新版,最新版请手动编译

CentOS Install

按官网说明安装软件,建议采用手动方法,原因一是能保证用的是最新版,二是出了问题容易上网搜索解决。
website

按下面进行无脑操作。。

1
2
3
4
5
6
7
8
9
yum install epel-release -y
yum install gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y

git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
git submodule update --init --recursive

./autogen.sh && ./configure && make
sudo make install

接下来需要将配置文件拷贝到常用路径
添加配置文件:

1
2
3
cp ./rpm/SOURCES/etc/init.d/shadowsocks-libev /etc/init.d/shadowsocks-libev
cp ./debian/config.json /etc/shadowsocks-libev/config.json
chmod +x /etc/init.d/shadowsocks-libev

Single User

编辑 vim /etc/shadowsocks-libev/config.json

1
2
3
4
5
6
7
8
{
"server":["[::0]","0.0.0.0"],
"server_port":8388,
"local_port":1080,
"password":"barfoo!",
"timeout":60,
"method":"chacha20-ietf-poly1305"
}

该配置同时支持 Ipv6 和 Ipv4,并采用 ss3.0 支持的 AEAD 加密方式。
编辑 /etc/init.d/shadowsocks-libev 修复一些历史bug

1
2
3
4
5
// old
DAEMON=/usr/bin/ss-server

// new
DAEMON=/usr/local/bin/ss-server

修改权限并重启软件

1
2
chmod 755 /etc/init.d/shadowsocks-libev
/etc/init.d/shadowsocks-libev start

multi user

多用户配置有多种方法,官方推荐通过给每个用户一个配置文件,启动多个ss-server实现。
还有种方法如下,通过启动ss-manager实现
多用户配置文件与单用户不同,我们配置文件目录创建一个ss_manager.json

1
2
3
4
5
6
7
8
9
10
{
"server": ["[::0]","0.0.0.0"],
"local_port": 1080, # 本地端口,自行设定
"timeout": 600, # 超时毫秒数
"method": "chacha20-ietf-poly1305",
"port_password": {
"8388": "barfoo1", # 端口号与密码
"8389": "barfoo2"
}
}

设置开机启动

1
2
chkconfig --add shadowsocks
service shadowsocks start

若是针对多用户情况,需要手写开机启动脚本,方法如下:
应在/usr/lib/systemd/system下新建一个.service文件,例如 ssmanager.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=shadowsocks manager # 服务的描述
After=network.target # 该服务跟在哪个服务后启动

[Service]
Type=forking # 启动时的进程行为,forking是以fork形式从父进程创建子进程,子进程创建后父进程退出
ExecStart=/usr/local/bin/ss-manager --manager-address /var/run/shadowsocks-manager.sock -c /etc/shadowsocks/ss_manager.json # 启动服务时执行的命令
PrivateTmp=true # 使用私有临时文件目录

[Install]
WantedBy=multi-user.target # 附挂在multi-user.target下

所有配置文件与脚本都设置完毕,使用systemctl开启服务。

1
2
3
4
5
6
7
8
9
# 更改.service文件后,都要重载守护进程更新systemctl
systemctl daemon-reload
# 启动服务
systemctl start ssmanager.service
# 查看服务状态,若为绿色active(running)则说明服务成功启动
systemctl status ssmanager.service
# 设置服务开机自启动
systemctl enable ssmanager.service
# 还可使用systemctl restart ssmanager.service重启服务,使用systemctl stop ssmanager.service停止服务

开启防火墙白名单

很多人按照教程的配置完后,发现并不能使用,原因是端口被防火墙关闭了。
输入如下代码开启防火墙端口白名单:

1
vim /etc/firewalld/zones/public.xml

在文件中适当位置添加下面代码:

1
2
<port protocol="tcp" port="[server port]"/>
<port protocol="udp" port="[server port]"/>

[server port] 填你的端口号。
重启防火墙

1
firewall-cmd --complete-reload

开启多进程

shadowsocks-libev 一个进程只能开启一个端口,因此我们要开启多个进程,对应每个进程使用一份相应的配置文件,从而达到多用户使用的目的
配置完多份配置文件后w在 /etc/init.d/shadowsocks 相应位置添加如下代码,一下代码仅供参考,读者可根据实际需求修改,这些代码的意思都很简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 配置文件位置
CONF1=/etc/shadowsocks-libev/config1.json

# 检测配置文件是否存在
if [ ! -f $CONF1 ] ; then
echo "The configuration file1 cannot be found!"
exit 0
fi

# 定位到 pid 文件
PID1=/var/run/$NAME/pid1

# 开启进程
daemon $DAEMON -c $CONF1 -f $PID1

# 杀死进程
killproc -p ${PID1}

# 移除 pid 文件
rm -f ${PID1}

在原来的脚本里有跟上面代码极其相似的地方(数字1没有),把上面的6段代码插入到原来脚本中对应相似的代码后面即可。

client