这篇是我整理的一份 SS2022 部署备忘:用 Docker 在 Ubuntu 上跑 shadowsocks-rust,再把同一个节点填进 Shadowrocket 或 Mihomo。示例端口统一用 8388,地址和密钥都留作占位符。照着操作时,先确认端口没有被现有服务占用;如果改了端口,服务端、云安全组和客户端也要一起改。
下面的安装命令都在 Ubuntu 服务器的 SSH 终端执行。准备好 Ubuntu 22.04/24.04、公网 IP、sudo 权限,以及支持 SS2022 的客户端。
先把密钥和配置写对
如果服务器还没有 Docker,先安装它:
sudo apt update
sudo apt install -y docker.io openssl nano
sudo systemctl enable --now docker
sudo docker version
这里选用 2022-blake3-aes-256-gcm。它的密码不是随手写的一串字符,而是 32 字节随机密钥的 Base64 表示。在服务器上生成一次,妥善保存完整输出,末尾的 = 也不要漏掉:
openssl rand -base64 32
如果改用 2022-blake3-aes-128-gcm,则要用 openssl rand -base64 16。这里的 16 和 32 指 Base64 解码后的字节数。
创建服务端配置文件:
sudo install -d -m 700 /etc/ss2022
sudo nano /etc/ss2022/config.json
把刚才生成的密钥填入 password:
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "替换成完整的 Base64 密钥",
"method": "2022-blake3-aes-256-gcm",
"mode": "tcp_and_udp"
}
保存后收紧文件权限:
sudo chmod 600 /etc/ss2022/config.json
0.0.0.0 是服务端监听地址,客户端要填服务器的公网 IP,不是这个地址。配置文件和后面的客户端 YAML 都含有密钥,别把填好真实值的文件公开上传。
启动容器,别忘了 UDP
先在云服务商的安全组里放行 8388/TCP 和 8388/UDP。如果机器还经过路由器,也要转发这两个协议的端口。已经启用 UFW 的服务器,可以补上:
sudo ufw allow 8388/tcp
sudo ufw allow 8388/udp
sudo ufw status
这一步只适用于正在使用 UFW 的机器。准备新启用 UFW 时,要先放行实际使用的 SSH 端口,免得把自己锁在服务器外。
然后拉取镜像、启动容器:
sudo docker pull ghcr.io/shadowsocks/ssserver-rust:latest
sudo docker run -d \
--name ss2022 \
--restart unless-stopped \
--network host \
-v /etc/ss2022/config.json:/etc/shadowsocks-rust/config.json:ro \
ghcr.io/shadowsocks/ssserver-rust:latest
这里使用宿主机网络,因此没有写 -p 端口映射。--restart unless-stopped 会在 Docker 重启后恢复容器,手动停止的容器则保持停止。先看容器和端口是否正常:
sudo docker ps -a --filter name=ss2022
sudo docker logs --tail 50 ss2022
sudo ss -lntup | grep ':8388'
看到容器处于 Up、TCP 和 UDP 都在监听,只能说明服务端启动了。最终还是要在客户端打开网页,确认代理真的能转发流量。
在客户端填同一个节点
Shadowrocket 里手动新增 Shadowsocks 节点,地址填服务器公网 IP,端口填 8388,算法选 2022-blake3-aes-256-gcm,密码粘贴刚才生成的完整密钥。UDP 转发开启;这里没有配置插件或混淆,也不需要开启 UDP over TCP。保存、选中节点并打开网页试一次。
使用 Mihomo 内核的 Clash 客户端,可以在自己的电脑上保存下面这份基础配置为 ss2022.yaml,再替换地址与密钥:
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
proxies:
- name: "Ubuntu SS2022"
type: ss
server: "替换成服务器公网 IP"
port: 8388
cipher: 2022-blake3-aes-256-gcm
password: "替换成完整的 Base64 密钥"
udp: true
proxy-groups:
- name: "代理选择"
type: select
proxies:
- "Ubuntu SS2022"
- DIRECT
rules:
- MATCH,代理选择
导入后,在“代理选择”里选 Ubuntu SS2022,并开启客户端的系统代理。这份 YAML 只用于确认连接:进入 Mihomo 的流量都会匹配最后一条规则,并没有国内外分流;需要接管更多应用时,再按客户端情况配置 TUN。
连不上时,先查这几处
有延迟,不等于网页能打开。 先核对服务端和客户端的算法、端口、密钥是否完全一致。2022-blake3-aes-256-gcm 要使用解码后 32 字节的密钥;不要把 128 位算法与 256 位密钥混用。改了服务端配置后执行 sudo docker restart ss2022,客户端也要同步保存新值。
接着在服务器上看日志,并在客户端实际发起一次网页请求:
sudo docker logs --follow --since 1m ss2022
如果日志里没有对应连接,回头检查安全组、UDP/TCP 放行、客户端是否真的选中了节点。日志出现解密或连接错误,再查密钥、服务端出网和 DNS。按 Ctrl+C 只是退出日志查看,不会停掉容器。
还有一个容易漏的地方是系统时间。SS2022 会校验请求时间,客户端和服务器相差超过 30 秒时,请求会被视为重放。服务器可用 timedatectl status 检查时间同步,必要时执行 sudo timedatectl set-ntp true;客户端设备也打开自动校时。时区不同没关系,实际时间要准。
平时需要重启、停止或查看日志,分别用 sudo docker restart ss2022、sudo docker stop ss2022 和 sudo docker logs --tail 100 ss2022。镜像用了 latest 标签,日后更新时先看项目的发布说明,再决定是否拉取新版。
参考:shadowsocks-rust 官方 Docker 说明 · SS2022 协议说明 · Mihomo Shadowsocks 配置说明