Shadowsocks
项目状态: ⚠️ 已废弃(原版) | 推荐度: ⭐⭐ | 世代: 第三代 | 历史地位: ⭐⭐⭐⭐⭐
快速概览
Shadowsocks(简称 SS)是一个由中国开发者 clowwindy 创建的开源代理工具,在 2012-2017 年间成为中国大陆最流行的翻墙工具。它以配置简单、轻量高效著称,开创了"混淆代理"时代,对后续工具产生了深远影响。
⚠️ 重要提示: 原版 Shadowsocks 协议已被 GFW 识别,在中国大陆基本不可用。本文档主要用于历史参考和技术学习。
核心特性
- 📝 配置简单: JSON 配置文件,一看就懂
- ⚡ 轻量高效: 资源占用极低,性能优秀
- 🌐 跨平台: 支持所有主流操作系统
- 🔓 开源免费: GPL 协议,完全开源
- 📚 文档丰富: 教程和客户端生态完善
关键指标
| 指标 | 评分 | 说明 |
|---|---|---|
| 性能 | ⭐⭐⭐⭐ | 轻量级,性能优秀 |
| 安全性 | ⭐⭐⭐ | AEAD 加密,但协议简单 |
| 稳定性 | ⭐⭐⭐ | 早期稳定,后期易被封 |
| 隐蔽性 | ⭐⭐ | 流量特征明显,易被识别 |
| 易用性 | ⭐⭐⭐⭐⭐ | 配置最简单的代理工具 |
| 文档 | ⭐⭐⭐⭐⭐ | 文档和教程非常完善 |
| 社区 | ⭐⭐⭐⭐ | 曾经最活跃的翻墙社区 |
历史意义
重要里程碑
2012年4月 - 诞生
- clowwindy 在 V2EX 发布 Shadowsocks
- 填补了 VPN 被封后的空白
- 开创了"混淆代理"时代
2012-2015 - 黄金时期
- 成为中国最流行的翻墙工具
- 衍生出众多实现版本(Python, libev, Go, Rust)
- 客户端生态蓬勃发展
2015年8月 - 转折点
- 作者 clowwindy 被警方约谈
- 删除 GitHub 仓库和所有相关讨论
- 停止开发,社区接手维护
2017年 - 被识别
- GFW 开始大规模识别 SS 流量
- 大量服务器被封
- 用户开始转向 V2Ray、Trojan 等新工具
2022年 - Shadowsocks 2022
- 发布新版本协议规范
- 修复安全问题,增强抗识别能力
- 尝试复兴,但采用率有限
对行业的影响
- 技术启蒙: 让普通用户了解代理技术
- 生态建设: 建立了完整的客户端生态体系
- 社区文化: 形成了开源、分享的翻墙社区文化
- 后续工具: V2Ray、Trojan 等都受其影响
技术原理
基本架构
客户端 服务端 目标网站
│ │ │
│── SOCKS5 连接 ──────────────→│ │
│ │ │
│── SS 加密数据 ─────────────→│ │
│ (AES/ChaCha20) │ │
│ │── 解密 ──→ HTTP 请求 ────→│
│ │ │
│←── 加密响应 ─────────────────│←── 响应数据 ──────────────│
│ │ │工作流程
- 本地代理: 客户端监听本地 SOCKS5 端口(如 1080)
- 加密: 使用配置的密码和加密算法加密数据
- 传输: 将加密数据发送到 SS 服务器
- 解密: 服务器解密数据
- 转发: 服务器代表客户端访问目标网站
- 返回: 加密响应数据返回给客户端
加密算法演进
第一代 (2012-2014) - 流加密:
├── RC4-MD5 (已废弃,不安全)
├── AES-256-CFB
└── BF-CFB
第二代 (2016-2017) - AEAD 加密:
├── AES-256-GCM
├── AES-128-GCM
└── ChaCha20-IETF-Poly1305 (推荐)
第三代 (2022+) - Shadowsocks 2022:
├── 2022-blake3-aes-128-gcm
├── 2022-blake3-aes-256-gcm
└── 2022-blake3-chacha20-poly1305推荐算法: ChaCha20-IETF-Poly1305
- 安全性高(AEAD 认证加密)
- 性能优秀(ARM 设备尤其快)
- 现代密码学
为什么被淘汰
1. 协议特征明显
流量特征:
SS 连接特点:
- 固定的握手模式
- 可预测的数据包大小
- 缺乏随机性机器学习可以识别这些模式。
2. 无流量混淆
与 HTTPS 流量对比:
| 特征 | HTTPS | Shadowsocks |
|---|---|---|
| TLS 握手 | ✅ 标准握手 | ❌ 无握手 |
| 证书 | ✅ CA 签名 | ❌ 无证书 |
| SNI | ✅ 域名 | ❌ 无 SNI |
| ALPN | ✅ HTTP/2 等 | ❌ 无 ALPN |
GFW 可以通过这些差异识别 SS 流量。
3. 主动探测脆弱
GFW 的探测方法:
1. 发现可疑 IP:端口
2. 主动连接测试
3. 发送错误密码
4. 观察服务器响应SS 服务器对错误密码的响应模式容易被识别。
4. 统计分析
时间特征:
- 连接持续时间
- 数据包发送频率
- 流量大小分布
行为特征:
- 长时间保持连接
- 突发流量模式
- 端口使用模式
配置指南(仅供参考)
服务端配置
安装 shadowsocks-libev:
# Debian/Ubuntu
sudo apt update
sudo apt install shadowsocks-libev
# 或编译安装
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
sudo apt install --no-install-recommends build-essential autoconf libtool \
libssl-dev libpcre3-dev libev-dev asciidoc xmlto automake
./autogen.sh
./configure
make && sudo make install配置文件 (/etc/shadowsocks-libev/config.json):
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "your-strong-password",
"timeout": 300,
"method": "chacha20-ietf-poly1305",
"fast_open": true,
"workers": 1,
"prefer_ipv6": false,
"no_delay": true,
"mode": "tcp_and_udp"
}启动服务:
sudo systemctl start shadowsocks-libev
sudo systemctl enable shadowsocks-libev客户端配置
配置文件示例:
{
"server": "your-server-ip",
"server_port": 8388,
"password": "your-strong-password",
"method": "chacha20-ietf-poly1305",
"local_address": "127.0.0.1",
"local_port": 1080,
"timeout": 300,
"fast_open": true
}分享链接格式:
ss://加密算法:密码@服务器:端口#备注
# Base64 编码格式
ss://base64(method:password@server:port)#备注示例:
ss://chacha20-ietf-poly1305:mypassword@example.com:8388#MyServer增强方案(提升隐蔽性)
虽然原版 SS 已被识别,但通过插件可以增强隐蔽性:
1. simple-obfs (HTTP/TLS 混淆)
# 服务端
ss-server -c config.json \
--plugin obfs-server \
--plugin-opts "obfs=tls;obfs-host=www.bing.com"
# 客户端
ss-local -c config.json \
--plugin obfs-local \
--plugin-opts "obfs=tls;obfs-host=www.bing.com"2. v2ray-plugin (WebSocket)
{
"plugin": "v2ray-plugin",
"plugin_opts": "server;tls;host=yourdomain.com;cert=/path/to/cert.pem;key=/path/to/key.pem"
}3. kcptun (UDP 加速)
适合高丢包网络环境。
注意: 即使使用这些插件,SS 在中国大陆的可用性仍然有限。
Shadowsocks 2022
新协议改进
主要变化:
- 强制 AEAD: 只支持 AEAD 2022 加密
- 重放保护: 防止重放攻击
- 完整性校验: 更强的数据完整性验证
- 时间戳: 增加时间戳验证
- 更好的密钥管理: 使用 Base64 编码的固定长度密钥
配置示例:
{
"server": "0.0.0.0",
"server_port": 8388,
"method": "2022-blake3-chacha20-poly1305",
"password": "base64-encoded-32-byte-key",
"fast_open": true
}生成密钥:
# 生成 32 字节密钥
openssl rand -base64 32优势:
- 修复了原版的安全漏洞
- 更难被识别(理论上)
- 性能依然优秀
现状:
- 采用率较低
- 长期抗封锁能力待验证
- 不如 Xray/Trojan 成熟
实现版本对比
| 版本 | 语言 | 性能 | 内存占用 | 维护状态 | 推荐度 |
|---|---|---|---|---|---|
| ss-python | Python | ⭐⭐ | 高 | ❌ 停止 | ❌ |
| ss-libev | C | ⭐⭐⭐⭐⭐ | 极低 | ✅ 维护中 | ⭐⭐⭐ |
| ss-rust | Rust | ⭐⭐⭐⭐⭐ | 低 | ✅ 活跃 | ⭐⭐⭐⭐ |
| ss-go | Go | ⭐⭐⭐⭐ | 中 | ⚠️ 停滞 | ⭐⭐ |
推荐: shadowsocks-rust(如果必须使用 SS)
客户端生态
Shadowsocks 的一大贡献是建立了完善的客户端生态:
Windows
- Shadowsocks-Windows: 官方客户端,简单易用
- v2rayN: 支持多协议,推荐
- Clash for Windows: 规则强大
macOS
- ShadowsocksX-NG: 官方客户端
- ClashX: 更现代的选择
Android
- Shadowsocks-Android: 官方客户端
- SagerNet: 功能强大,支持多协议
iOS
- Shadowrocket: 付费,功能全面
- Quantumult X: 高级用户首选
- Potatso: 免费选择
路由器
- OpenWrt + shadowsocks-libev
- Merlin + shadowsocks
遗留问题
Shadowsocks 的设计决策导致了一些根本性问题:
- 协议简单: 缺乏复杂的握手和混淆机制
- 无前向保密: 密码泄露后历史流量可被解密
- 固定模式: 流量模式容易被统计分析识别
- 无主动探测防护: 容易被探测识别
这些问题在后续工具(V2Ray, Trojan, Xray)中得到了解决。
学习价值
虽然已被淘汰,Shadowsocks 仍有学习价值:
1. 代理原理
- SOCKS5 协议
- 加密传输
- TCP/UDP 转发
2. 简洁设计
- 配置文件设计
- 客户端-服务端架构
- 插件系统
3. 开源协作
- 多语言实现
- 社区驱动开发
- 生态系统建设
4. 历史教训
- 安全性的重要性
- 流量混淆的必要性
- 抗主动探测设计
迁移建议
如果你仍在使用 Shadowsocks,建议迁移到:
首选方案
Xray (VLESS + Reality)
- 性能更好
- 隐蔽性极强
- 配置稍复杂但值得
Trojan
- 稳定性最好
- 配置相对简单
- 长期可靠
Hysteria 2
- 移动网络优选
- 弱网环境性能好
迁移步骤
- 选择新工具并学习配置
- 部署新服务器(建议使用新 IP)
- 测试新服务可用性
- 迁移客户端配置
- 停用旧 SS 服务器
参考资源
官方资源
学习资源
- 协议规范: Shadowsocks Protocol
- AEAD 加密: SIP004
- Shadowsocks 2022: SIP022
历史文章
致敬
感谢 clowwindy 和所有 Shadowsocks 贡献者,他们的工作:
- 🌟 让数百万人能够访问自由互联网
- 📚 推动了翻墙技术的发展
- 🤝 建立了开源翻墙社区的文化
- 💡 启发了后续的优秀工具
虽然技术已被超越,但其精神永存。
⚠️ 最后提醒: 在中国大陆,强烈建议使用 Xray、Trojan 等现代工具,而不是 Shadowsocks。本文档主要用于历史学习和技术参考。