Docker 安装 ShadowSocks 服务端或客户端
基本概念
- 服务端官方文档:https://github.com/shadowsocks/shadowsocks-rust/pkgs/container/ssserver-rust
- 客户端官方文档:https://github.com/shadowsocks/shadowsocks-rust/pkgs/container/sslocal-rust
关于 shadowsocks/ssserver-rust 和 shadowsocks/sslocal-rust,它们分别是 Shadowsocks Rust 版本的服务端和客户端程序。下面这个表格能帮你快速了解它们的核心区别和用途:
| 对比项 | ssserver-rust (服务端) | sslocal-rust (客户端) |
|---|---|---|
| 核心角色 | 代理服务的提供者,部署在远程服务器上 | 代理服务的使用者,运行在本地设备上 |
| 主要功能 | 监听端口,接收/解密客户端请求,转发至目标网站,并返回数据 | 接收本地程序的网络请求,加密后转发给服务端,并接收返回数据 |
| 运行位置 | 通常在有公网IP的服务器(如VPS) | 用户本地电脑、手机、路由器等 |
| 典型使用 | 提供翻墙或内网穿透能力 | 为浏览器、游戏等本地应用配置代理 |
组件功能与使用场景:
ssserver-rust:它是 Shadowsocks 代理链条的起点。你需要在防火墙后或受网络限制的远程服务器上部署它,由其负责处理所有客户端的连接请求和数据中转。sslocal-rust:它是你本地设备和远程服务器之间的桥梁。它启动后会在本地创建一个代理服务器(通常是 SOCKS5 代理),当你将应用(如浏览器)的网络流量指向它时,它便会负责后续与ssserver的加密通信。
注意:默认情况下,Docker 容器无法访问 IPv6。
服务端
使用以下命令为特定的加密方法(例如:aes-256-gcm,aes-128-gcm)生成一个安全且加密的密码:
使用 openssl 生成密钥:
shell
# 生成 32 字节(256位)的随机密钥(aes-256-gcm)
openssl rand -base64 32
# 生成 16 字节(128位)的随机密钥(aes-128-gcm)
openssl rand -base64 16
# 输出示例(aes-256-gcm):
L2JZ6K4fo9YTvj9ZM1pBcG2e7R3zV9K90T/Wj+k5NBw=服务端配置文件:server.json
json
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "L2JZ6K4fo9YTvj9ZM1pBcG2e7R3zV9K90T/Wj+k5NBw=",
"method": "aes-256-gcm"
}- "server":"0.0.0.0":表示服务端监听所有连接。
- "server_port":在服务器上为客户端连接开放的连接端口。
- "method":推荐使用 aes-256-gcm,它在安全和性能之间取得了良好平衡。
shell
# 从 github 的 docker 仓库拉取 ssserver-rust 镜像
docker pull ghcr.io/shadowsocks/ssserver-rust:v1.23.4
# 启动容器
docker run --name shadowsocks-server \
--restart always \
--network vpn \
-p 8388:8388/tcp \
-p 8388:8388/udp \
-v /opt/shadowsocks/server.json:/etc/shadowsocks-rust/config.json \
-itd ghcr.io/shadowsocks/ssserver-rust:v1.23.4客户端
客户端配置文件:client.json。其中需要指定远程服务器的信息。
json
{
"server": "my_server_ip",
"server_port": 8388,
"password": "L2JZ6K4fo9YTvj9ZM1pBcG2e7R3zV9K90T/Wj+k5NBw=",
"method": "aes-256-gcm",
"local_address": "127.0.0.1",
"local_port": 1080
}成功启动后,你就可以在本地使用 127.0.0.1:1080 这个 SOCKS5 代理地址了。
shell
# 从 github 的 docker 仓库拉取 sslocal-rust 镜像
docker pull ghcr.io/shadowsocks/sslocal-rust:v1.23.4
docker run --name sslocal-rust \
--restart always \
--network vpn \
-p 1080:1080/tcp \
-v /opt/shadowsocks/client.json:/etc/shadowsocks-rust/config.json \
-itd ghcr.io/shadowsocks/sslocal-rust:v1.23.4