集成 Snell 代理 + ShadowTLS 的 Docker 镜像,三个组件均为 Go 实现:Snell v6 服务器、ShadowTLS 服务器、启动程序,跑在 scratch 基础镜像上。
镜像就是
lovechen/snell-go:latest(=:6.0.0b3-v2)——latest同名同 tag,docker compose pull即升级。 本版使用 ShadowTLS v2;从旧版升级,客户端把shadow-tls-version=3改成=2即可(PSK / 密码 / SNI 全不变)。
scratch 基础镜像,体积小(约 18 MB),无系统依赖;多架构 amd64/arm64mkdir snell-go && cd snell-go
cat > docker-compose.yml << 'EOF'
services:
snell:
image: lovechen/snell-go:latest
container_name: snell-go
ports:
- "6333:6333/tcp"
- "6333:6333/udp"
- "6334:6334"
volumes:
- ./config:/app/config
environment:
- TZ=Asia/Singapore
restart: always
EOF
docker compose up -d
docker logs snell-go # 查看自动生成的 PSK / 密码 / 客户端配置
docker run -d --name snell-go \
-p 6333:6333/tcp -p 6333:6333/udp -p 6334:6334 \
-v $(pwd)/config:/app/config --restart always \
lovechen/snell-go:latest
[Proxy]
# Snell 直连
Snell-Direct = snell, server_ip, 6333, psk=your_psk, version=6, reuse=true, tfo=true
# Snell + ShadowTLS(注意 shadow-tls-version=2)
Snell-TLS = snell, server_ip, 6334, psk=your_psk, version=6, reuse=true, tfo=true, shadow-tls-password=your_password, shadow-tls-sni=gateway.icloud.com, shadow-tls-version=2
把参数替换为 docker logs snell-go 里显示的实际值。shadow-tls-sni 要填一个支持 TLS 1.3 的站点(默认 gateway.icloud.com),且客户端与服务端一致。
服务端零改动:同名镜像 lovechen/snell-go:latest,docker compose pull && docker compose up -d 即可;./config 目录原样挂着,PSK / ShadowTLS 密码 / SNI 全保留(协议版本由镜像决定,不从配置读回)。
客户端只改一个字:shadow-tls-version=3 → shadow-tls-version=2。
cd /data/docker-compose/snell/ 2>/dev/null || { mkdir -p /data/docker-compose/snell && cd /data/docker-compose/snell; }
docker compose down 2>/dev/null; docker rm -f snell 2>/dev/null
cat > docker-compose.yml <<'EOF'
services:
snell:
image: lovechen/snell-go:latest
container_name: snell
ports:
- "63333:6333/tcp"
- "63333:6333/udp"
- "63334:6334"
volumes:
- ./config:/app/config
environment:
- TZ=Asia/Singapore
- SHADOWTLS_SNI=gateway.icloud.com
restart: always
EOF
docker compose pull && docker compose up -d && sleep 3 && docker compose logs --tail 40
SHADOWTLS_SNI 可在 environment 里改(填支持 TLS 1.3 的站点)。./config 不动则密钥不变,客户端零改动(只把 shadow-tls-version 设为 2)。
首启自动生成两个 32 位随机密钥(crypto/rand)并存到 config/:
snell-server.conf:Snell PSKshadowtls.conf:ShadowTLS 密码 / SNI重启复用已存配置(删文件才重新生成)。配置目录由程序自动创建。
SHADOWTLS_SNI(env):握手伪装的站点,默认 gateway.icloud.com;设了就每次启动强制覆盖并持久化。建议填支持 TLS 1.3 的站点。SHADOWTLS_HANDSHAKE_TIMEOUT(env,秒):握手期时限,默认 30;0 禁用。connect-timeout(写 config/snell-server.conf,秒):出站连不上目标的快速失败时限;0/不写 = 官方行为(无应用层超时)。dns-timeout(同上,秒):DNS 解析时限,默认 10;0 不限。[snell-server]
listen = 0.0.0.0:6333
psk = your_psk
mode = default
dns-ip-preference = default
connect-timeout = 15
dns-timeout = 10
| 镜像 | 组成 |
|---|---|
lovechen/snell | 官方 Snell b3 二进制 + 官方 shadow-tls 二进制 + Go 启动 |
lovechen/snell-go:latest(= :6.0.0b3-v2,本镜像) | Snell v6 + ShadowTLS v2 全 Go 实现 + Go 启动 |
lovechen/snell-go:6.0.0b3-v3 | 同上但 ShadowTLS v3(客户端配 shadow-tls-version=3) |
lovechen/snell 与本镜像 wire 一致(Snell v6 + ShadowTLS v2),迁移把 config 挂过来即可。
想用 v3,改用 :6.0.0b3-v3 这个 tag 并把客户端 shadow-tls-version 设为 3。
Content type
Image
Digest
sha256:456dcba39…
Size
10.5 MB
Last updated
3 months ago
docker pull lovechen/snell-go