Shadowsocks 安装指南

admin | 世界杯足球赛事

Shadowsocks 安装指南

shadowsocks,

docker

1. 简介

shadowsocks 原版是使用 python 开发的,后来推出了其他语言实现的版本。这里推荐使用 shadowsocks-libev 版本,这是 C 语言的实现版,运行速度更快,占用资源更少。

shadowsocks-libev 主要包含以下组件:

ss-server (服务端-单用户)

ss-local (客户端)

ss-manager (服务端-多用户)

ss-tunnel

ss-redir (转发-可做透明代理)

ss-nat

参考资料: https://github.com/shadowsocks/shadowsocks-libev

这里主要介绍前三个组件的使用,其他组件待补充。

1.1 ss-server

ss-server 是服务端程序。它跟 python 版本的 ssserver 类似,不过它不再支持 “port_password” 的配置,变成了单端口单用户模式。

示例配置如下:

config.json

{

"server": "0.0.0.0",

"server_port": 8388,

"password": "password",

"timeout": 60,

"method": "chacha20-ietf-poly1305",

"user": "nobody",

"fast_open": true,

"reuse_port": true

}

关键参数:

参数 解释

server 服务器监听地址,一般可设为 0.0.0.0 。

server_port 服务器监听端口。

password 密码。

method 加密方式。推荐使用 chacha20-ietf-poly1305 。

1.2 ss-manager

python 版本的 ssserver 既是单端口单用户程序,也是多端口多用户。 而 libev 版本做了区分,把多端口多用户做成了 ss-manager 。

示例配置如下:

manager.json

{

"server": "0.0.0.0",

"port_password": {

"8388": "password_1",

"8389": "password_2",

},

"timeout": 60,

"method": "chacha20-ietf-poly1305",

"fast_open": true,

"reuse_port": true

}

关键参数:(其他参数见 ss-server)

参数 解释

port_password 监听端口和该端口对应的密码。这是跟 ss-server 最大的区别,由原来的单个端口和密码变成可设置多个端口和密码。

注意: 这里没有用户名的概念,通过给不同的端口设置不同的密码来区分不同的用户。这个配置也可以没有,后续可以通过其他程序来动态添加和删除用户。

1.3 ss-local

ss-local 为客户端程序。配置文件跟 python 版本的类似。

示例配置如下:

config.json

{

"server": "xxx.xxx.xxx.xxx",

"server_port": 8388,

"local_address": "0.0.0.0",

"local_port": 1080,

"password": "password",

"timeout": 60,

"method": "chacha20-ietf-poly1305",

"user": "nobody"

}

关键参数:

参数 解释

server 服务器地址,具体的服务器 ip 。

server_port 服务器监听端口。

password 密码。需要跟服务器一致。

method 加密方式。需要跟服务器一致。

local_address 客户端监听地址。设为 127.0.0.1 只给本机代理; 设为 0.0.0.0 可以共享给别人。

local_port 客户端监听端口。

2. 安装使用(debian)

2.1 安装

apt install shadowsocks-libev

若服务器只运行单用户,推荐直接修改默认的配置文件即可。若需运行多用户,建议停掉系统服务: systemctl disable shadowsocks-libev ,然后创建一个 ss-manager 的系统服务。

2.2 运行 ss-server

2.2.1 以 Systemd 系统服务方式运行

安装完成后,它会在系统里注册一个服务,开机时默认运行 ss-server ,默认加载的配置文件为 /etc/shadowsocks-libev/config.json 。

按实际情况修改该配置文件,然后启动服务即可: systemctl start shadowsocks-libev 。

2.2.2 直接通过命令运行

运行命令

ss-server -c config.json -f /tmp/ss-server.pid

2.3 运行 ss-local

2.3.1 以 Systemd 系统服务方式运行

— Jinkin Liu 2021/11/08 14:58

在 /etc/shadowsocks-libev/ 目录下创建 local 所需的配置文件 client.json ,然后运行命令 systemctl start shadowsocks-libev-local@client.service 即可。(@后面的名字跟配置文件的名字要一致。)

2.3.2 直接通过命令运行

运行命令

ss-local -c config.json -f /tmp/ss-local.pid

2.4 运行 ss-manager

2.4.1 直接通过命令运行

ss-manager 以 root 身份加 -a 切换用户的方式运行时,子进程 ss-server 无法创建。如果想以普通用户身份运行时,需要创建一个普通用户

useradd -m -s /bin/bash shadowsocks

以普通用户身份运行

# 切换用户

su - shadowsocks

ss-manager --manager-address /tmp/ss-manager.sock --executable $(which ss-server) -c manager.json -f /tmp/ss-manager.pid

# manager-address 就是管理端,也可以使用 ip 和端口,如下

ss-manager --manager-address 127.0.0.1:10001 --executable $(which ss-server) -c manager.json -f /tmp/ss-manager.pid

2.4.2 管理

可以使用老牌的 nc 工具来管理用户的增减。 安装方式 apt install netcat-openbsd 。

使用 nc 连接 ss-manager :

# -u 表示使用 udp 通信。

nc -u -U /tmp/ss-manager.sock

# 或者

nc -u 127.0.0.1 10001

连接上去之后,有4个管理命令可用:

list 列出当前所有监听的端口和对应的密码。

ping 列出每个端口的总流量。

add 增加一个端口和密码。格式示例: add: {“server_port”:8838, “password”:“my_password”} 。注意 add: 的冒号之后必须有个空格,否则会报命令错误。

remove 删除一个端口。 格式示例: remove: {“server_port”:8838} 。

使用完毕后,使用 Ctrl-C 退出 nc 。

参考资料: https://github.com/shadowsocks/shadowsocks/wiki/Manage-Multiple-Users

2.4.3 以 Systemd 服务方式运行

— Jinkin Liu 2021/02/02 14:39

创建文件 /etc/systemd/system/shadowsocks-libev-manager.service

shadowsocks-libev-manager.service

[Unit]

Description=Shadowsocks-libev Manager Service by ljskr

Documentation=man:shadowsocks-libev(8)

After=network.target

[Service]

# Type=simple

# CapabilityBoundingSet=CAP_NET_BIND_SERVICE

# AmbientCapabilities=CAP_NET_BIND_SERVICE

User=nobody

Group=nogroup

LimitNOFILE=32768

# ExecStart=/usr/bin/ss-manager -c /etc/shadowsocks-libev/manager.json --manager-address 127.0.0.1:10001 --executable /usr/bin/ss-server

ExecStart=/usr/bin/ss-manager -c /etc/shadowsocks-libev/manager.json --manager-address /tmp/ss-manager.sock --executable /usr/bin/ss-server

[Install]

WantedBy=multi-user.target

3. 通过 docker 运行

3.1 获取镜像

docker pull shadowsocks/shadowsocks-libev:latest

3.1 ss-server

docker-compose.yml

version: '3'

services:

shadowsocks:

image: shadowsocks/shadowsocks-libev

ports:

- "8388:8388"

environment:

- METHOD=chacha20-ietf-poly1305

- PASSWORD=password

restart: always

3.2 ss-local

# 需要先在当前目录下创建一个 sslocal.json 的配置文件,内容见前文介绍 。

docker run -d -p 1080:1080 \

-v $(pwd)/sslocal.json:/home/sslocal.json:ro \

--name ss \

--restart=always \

shadowsocks/shadowsocks-libev:latest \

ss-local -c /home/sslocal.json