侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 69 篇文章
  • 累计创建 47 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

在 Linux 部署 shadowsocks-rust:版本校验、随机密钥与 systemd 管理

这篇记录用官方预编译程序部署 shadowsocks-rust 的过程。服务交给 systemd 管理,配置文件使用单独生成的密钥,并让进程以专用用户运行。

示例环境是使用 systemd 的 Debian/Ubuntu、x86-64 处理器,服务端端口选用 8388。下面固定使用官方已发布的 v1.25.0 演示,便于核对下载文件;其他架构或后续版本请到官方 Releases选择对应资产,不要把 x86-64 二进制直接用在 ARM 服务器上。

一、下载并校验程序

先准备 curl、xz-utils 和 python3,然后在普通用户终端执行:

mkdir -p ~/downloads/shadowsocks-rust
cd ~/downloads/shadowsocks-rust

SS_VERSION=v1.25.0
SS_ARCHIVE="shadowsocks-${SS_VERSION}.x86_64-unknown-linux-musl.tar.xz"
SS_RELEASE="https://github.com/shadowsocks/shadowsocks-rust/releases/download/${SS_VERSION}"

curl -fLO "${SS_RELEASE}/${SS_ARCHIVE}"
curl -fLO "${SS_RELEASE}/${SS_ARCHIVE}.sha256"
sha256sum -c "${SS_ARCHIVE}.sha256"

校验通过后再解压和安装。这里仅安装服务端与诊断时需要的服务程序:

tar -xJf "$SS_ARCHIVE"
sudo install -m 0755 ssserver /usr/local/bin/ssserver
sudo install -m 0755 ssservice /usr/local/bin/ssservice
/usr/local/bin/ssserver --version

install -m 0755 同时完成复制和执行权限设置;chown +x 是错误用法,设置执行权限应使用 chmod 或这里的 install。

二、建立服务用户和配置

首次部署时创建专用用户。若已经存在,不要重复创建:

id shadowsocks

仅当上一步确认用户不存在时执行:

sudo useradd --system --user-group --no-create-home \
  --shell /usr/sbin/nologin shadowsocks

创建仅 root 和服务组可访问的配置目录:

sudo install -d -m 0750 -o root -g shadowsocks /etc/shadowsocks-rust

下面的 Python 脚本生成一份严格 JSON 配置。它使用 32 字节随机数据构造 2022-blake3-chacha20-poly1305 的预共享密钥,且拒绝覆盖已有文件,避免重复执行时意外更换正在使用的密码:

sudo python3 - <<'PY'
import base64
import grp
import json
import os
import secrets

path = "/etc/shadowsocks-rust/config.json"
config = {
    "server": "0.0.0.0",
    "server_port": 8388,
    "method": "2022-blake3-chacha20-poly1305",
    "password": base64.b64encode(secrets.token_bytes(32)).decode("ascii"),
    "mode": "tcp_and_udp"
}
fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640)
with os.fdopen(fd, "w", encoding="utf-8") as stream:
    json.dump(config, stream, indent=2)
    stream.write("\n")
os.chown(path, 0, grp.getgrnam("shadowsocks").gr_gid)
os.chmod(path, 0o640)
PY

示例明确监听 IPv4。需要 IPv6 时,应结合服务器的 IPv6 连通性和系统双栈行为另行配置,不能只把地址改成 :: 就认定两种协议均已可用。

客户端需支持所选的 Shadowsocks 2022 方法,并使用配置中的同一密钥。不要使用文章中公开的固定密码。项目支持的方法与配置说明见 shadowsocks-rust 官方仓库。

三、编写 systemd 服务

使用 sudoedit /etc/systemd/system/shadowsocks-rust.service 创建服务文件:

[Unit]
Description=Shadowsocks Rust server
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=shadowsocks
Group=shadowsocks
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks-rust/config.json
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict

[Install]
WantedBy=multi-user.target

8388 不是特权端口,不需要进程以 root 运行。这里的 ProtectSystem 适用于该服务只读取配置、把日志交给 journal 的用法;如果以后增加文件日志或插件写入目录,应相应检查权限。

检查配置文件可读、JSON 有效,再启动服务:

sudo -u shadowsocks python3 -m json.tool /etc/shadowsocks-rust/config.json >/dev/null
sudo systemd-analyze verify /etc/systemd/system/shadowsocks-rust.service
sudo systemctl daemon-reload
sudo systemctl enable --now shadowsocks-rust.service

systemd-analyze verify 检查服务单元,不能替代程序运行时校验。启动后查看:

sudo systemctl status shadowsocks-rust.service --no-pager
sudo journalctl -u shadowsocks-rust.service -n 50 --no-pager
sudo ss -lntup | grep ':8388'

应确认 TCP、UDP 都有监听,并检查云平台安全组和主机防火墙是否按实际需求允许此端口。单纯看到服务是 active,并不代表公网客户端已经可以连接。

四、客户端连接与日常管理

在有权限查看配置的终端中读取密钥,再填入客户端:

sudo cat /etc/shadowsocks-rust/config.json

服务器地址填写实际可达的 IP 或域名,端口为 8388,方法与密码必须和服务端一致。连接后分别验证所需的 TCP 与 UDP 场景;普通网页能打开只验证了部分路径。

日常操作统一使用同一个服务名:

sudo systemctl restart shadowsocks-rust.service
sudo systemctl stop shadowsocks-rust.service
sudo systemctl disable --now shadowsocks-rust.service
systemctl is-enabled shadowsocks-rust.service

升级时先保留现有配置和可回退的二进制,再校验新版本下载文件、替换程序并重启。密钥不需要随二进制版本更新而更换;不要在升级时重新运行配置生成脚本。

0

评论区