public:software:ss_install

Shadowsocks 安装指南

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

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

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 。

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 最大的区别,由原来的单个端口和密码变成可设置多个端口和密码。

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

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 客户端监听端口。
apt install shadowsocks-libev

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

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.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.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
docker pull shadowsocks/shadowsocks-libev:latest
docker-compose.yml
version: '3'

services:
  shadowsocks:
    image: shadowsocks/shadowsocks-libev
    ports:
      - "8388:8388"
    environment:
      - METHOD=chacha20-ietf-poly1305
      - PASSWORD=password
    restart: always
# 需要先在当前目录下创建一个 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
  • 最后更改: 2021/11/08 15:00
  • 由 Jinkin Liu