
| 类型 | 加密代理协议 |
| 基于 | SOCKS5 |
| 加密 | AEAD 对称加密 |
| 首次发布 | 2012 年 |
Shadowsocks(常简称 SS)是一种轻量级的加密传输代理协议,最初由开发者 clowwindy 于 2012 年发布并开源。它脱胎于传统的 SOCKS5 代理思路:本地应用把流量交给本地 Shadowsocks 客户端,客户端按照 SOCKS5 的地址格式封装目标主机与端口信息,再用对称密码把整段数据加密后,通过单一 TCP 或 UDP 连接发往远端服务器;服务器解密后还原出目标地址并代为转发,把响应原路加密送回。与明文的 SOCKS5 或 HTTP 代理相比,Shadowsocks 的核心价值在于把代理流量伪装成无固定特征的加密字节流,既不暴露目标地址,也不暴露代理身份,从而抵抗基于明文特征的识别与审查。其设计强调简单、跨平台与高性能,因此迅速在开源社区流行,被移植为多种语言实现,并衍生出 ShadowsocksR、AEAD、AEAD 2022 等一系列演进分支,深刻影响了后来整个加密代理生态。
在 Shadowsocks 出现之前,常见的翻墙手段包括 VPN、HTTP/HTTPS 代理与原始 SOCKS5 代理。这些方案各有短板:VPN(如 PPTP、L2TP/IPsec、OpenVPN)协议栈较重且有明显握手特征,容易被整体识别与阻断;明文 HTTP 代理会暴露访问的全部 URL;原始 SOCKS5 既无加密又有固定的握手字节,极易被指纹化。clowwindy 设计 Shadowsocks 的初衷,是用尽量少的代码实现一个无明显协议指纹、易于自建、单用户即可使用的加密转发工具,把复杂的协议协商砍到最少,只保留加密与寻址两件事。第一版用 Python 写成,因其简洁,社区很快贡献了 libev(C 语言)、Go、Rust(shadowsocks-rust)、Python asyncio 等多种高性能实现。2015 年原作者因外部压力宣布停止维护并删除部分仓库,但协议本身已成为事实标准,被后续众多项目继承、复刻与扩展,其历史也成为加密代理发展中的标志性事件。
Shadowsocks 的协议结构可拆为地址封装与加密封装两层。地址层沿用 SOCKS5 的目标地址表示(地址类型字节 + 地址 + 端口),由客户端在加密通道内告知服务器要连向何处;加密层则负责把这段地址与后续应用数据整体加密。
早期 Shadowsocks 使用流式加密(Stream Cipher),如 RC4-MD5、AES-256-CFB、ChaCha20、Salsa20 等。其方式是用预共享密码经 KDF(早期为 EVP_BytesToKey,基于 MD5)派生出主密钥,再为每条连接生成随机初始向量(IV),把 IV 明文置于流首部,后续数据用密钥与 IV 做流加密。这种方式的根本问题在于缺乏完整性校验:密文可被篡改而不被发现,因此既无法防止重放,也容易遭受主动探测——审查者可主动连接并篡改密文片段,观察服务器是否产生可区分的反应,从而判定其为 Shadowsocks 服务器。为此社区在 2017 年前后引入了 AEAD(Authenticated Encryption with Associated Data) 加密,代表算法为 AES-128-GCM、AES-256-GCM 与 ChaCha20-Poly1305。AEAD 模式下,会话由一个随机 salt 与主密钥经 HKDF 派生出子密钥,数据被切成带长度前缀的分块,每块自带认证标签(tag),既加密又防篡改;若标签校验失败则立即断开,不给探测者任何可观察的差异,显著提升了抗主动探测能力。后续又出现 AEAD 2022 系列(如 2022-blake3-aes-256-gcm、2022-blake3-chacha20-poly1305),用 BLAKE3 改进密钥派生、加入会话级随机化与更严格的抗重放(基于时间戳与会话 ID 的重放过滤),进一步收紧了安全边界。
Shadowsocks 同时支持 TCP 与 UDP 转发。TCP 用于绝大多数网页、API、SSH 等可靠流量;UDP relay 则用于 DNS 查询、部分游戏与音视频等无连接流量,服务器为每个 UDP 会话维护映射并代为收发。原始协议不内置多路复用,每条应用连接通常对应一条到服务器的连接;但社区通过 SIP003 插件机制在外层叠加能力,这是 Shadowsocks 灵活性的关键:
这种插件化设计让 Shadowsocks 内核保持精简,同时按需获得伪装、抗封锁与弱网优化能力,也使其能与不断变化的检测手段赛跑。
服务端常用实现包括 shadowsocks-libev(性能稳健的 C 实现)、shadowsocks-rust(现代 Rust 实现,支持 AEAD 2022)与各类 Go 实现;客户端覆盖 Shadowsocks-Windows、ShadowsocksX-NG(macOS)、Shadowsocks-Android、Outline(基于 SS 的易用产品),以及 Clash/Clash.Meta、sing-box、v2rayN、NekoBox 等聚合型客户端。多数实现支持 SIP002 形式的 ss:// 分享链接与机场订阅,便于批量导入节点。其生态成熟、文档丰富、社区庞大,至今仍是入门级与中量级自建代理的常见选择,Outline 等产品更把它包装成面向普通用户的一键服务。
Shadowsocks 适合追求轻量、低延迟、易部署的个人加密转发场景,以及作为机场服务承载大量用户的基础协议之一。其局限在于:面对持续升级的深度包检测与主动探测,纯 Shadowsocks(尤其旧的流式加密)抗封锁能力有限,通常必须配合 AEAD/AEAD 2022 与 TLS 类混淆插件才能在严格环境下稳定;它本身也不提供身份认证体系、流量统计或多用户管理,大规模运营需借助 ss-manager、面板或上层框架。此外其 UDP relay 在部分网络环境中可靠性一般。总体而言,它是一款经典、影响深远、并仍在持续演进的加密代理协议,奠定了现代轻量代理的基本范式。

| 类型 | 加密代理协议 |
| 基于 | SOCKS5 |
| 加密 | AEAD 对称加密 |
| 首次发布 | 2012 年 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧