Shadowsocks 是一款免费工具,适用于那些希望以简单但不常见的方式绕过封锁的人。它是一种具有数据加密功能的网络协议。它还有助于保护流量和个人数据。它基于 SOCKS5 技术,源代码可在 GitHub 上获取。
该项目始于 2012 年。中国开发者 Clowwindy 在 GitHub 上发布了 Shadowsocks 的首批开发成果。该协议帮助绕过了“防火墙”的限制,即中国的长城防火墙。该项目在从 GitHub 移除后在全球范围内流行起来,这引起了媒体的关注。记者们猜测 移除与几天后发生的 GitHub 攻击之间存在关联。
Clowwindy 于 2015 年应中国当局的要求停止了开发。此后,Shadowsocks 社区一直在开发该项目。
自由之家网站上的地图展示了 Shadowsocks 在哪些国家肯定有用。
Shadowsocks 用于与 VPN 类似的任务:
在标准网络连接中,用户通过其提供商直接连接到互联网。例如,如果他们想访问某个网站,他们首先连接到提供商的路由器,然后连接到网站本身。如果国家想封锁这个网站,他们会要求提供商封锁其 IP 地址的访问。
为了绕过这种限制,使用了代理。在这种情况下,在提供商和网站之间形成一个“中间人”——代理服务器。连接仍然通过提供商,但提供商只知道请求正在发送到代理。因此,与网站的连接不受限制,流量返回到用户的设备。但这里存在几个问题,例如:
Shadowsocks 旨在解决这些问题。Shadowsocks 通过类似 SOCKS5 的隧道加密 TCP/UDP 有效负载。为了真正模拟 HTTPS 或 HTTP 标头,需要一个额外的混淆插件(例如 simple-obfs、cloak)。它加密数据并将其呈现为常规 HTML 流量。该协议基于 SOCKS5,我们的博客中有一篇关于它的文章。它通过 AEAD 算法帮助保护连接。
AEAD 使用与 SSH 隧道相同的原理,但在 AEAD 的情况下,加密数据还包括有关源和接收者的信息。这使黑客的生活复杂化。即使他们截获消息,也无法篡改数据传输。
Shadowsocks 对于基本的审查绕过是安全的,并且与 VPN 相比通常更快/更轻量。但是,当您需要保证匿名性、抗 DPI 能力或企业级安全性时,它不能替代经过全面审计的 VPN。Shadowsocks 通常被认为是用于审查规避的安全工具,但在强大的安全性和抗检测方面存在重要限制。
一般来说,AEAD(“带有关联数据的认证加密”)模式,例如 AES-GCM 和 ChaCha20-Poly1305,是行业标准,通常被认为是高度安全的。没有普遍共识认为 AEAD 本身“不那么安全”。但根据 Stack Exchange 上的讨论,AEAD 密码被认为不那么安全。无论如何,它们足以实现可靠的连接和数据保护。
Shadowsocks 使用 带有关联数据的认证加密 (AEAD) 作为其主要加密方法,它在单个操作中提供机密性、完整性和真实性。支持的最常见的 AEAD 密码是:
ChaCha20-Poly1305
AES-128-GCM
AES-256-GCM
Shadowsocks 的工作原理:对于 SS 程序,它像一个普通的 SOCKS5 一样组织,只是 IP 地址是 127.0.0.1。这个 IP 称为 Localhost,连接是本地进行的。也就是说,任何程序,例如浏览器,都连接到它正在运行的同一设备。然后,在本地 Shadowsocks 组件和服务器之间建立连接,在此捆绑中,流量已经加密。
您可以从 关于绕过中国长城防火墙的视频 中了解更多详细信息。
您可以将其他应用程序连接到 Shadowsocks,代理将仅适用于选定的应用程序。如果其中一个不支持代理,您可以使用,例如,Proxifier。
要安装和配置 Shadowsocks,您需要对连接有一定的了解。您需要从以下几点开始:
然后,只需安装并启动客户端,然后配置与服务器的连接:添加服务器的 IP 地址、端口、密码和加密方法。
Shadowsocks 提供三种连接模式。
Shadowsocks 可以模拟与远程服务器的 HTTPS 连接。这对于流量伪装是必要的。在这种情况下,提供商将不会理解用户正在查看什么以及正在绕过哪些封锁。这种技巧在服务器上安装 simple-obfs 流量混淆插件后才能实现。
混淆是流量的伪装和混淆。借助它,您可以保护它免受检测:提供商将无法发现您正在使用 Shadowsocks。通常,这是通过加密代码、将变量重命名为无意义的名称、添加不必要的代码或简单地使用 Cloak、Stunnel、OpenVPN Scramble 等解决方案来实现的。
尽管进行了混淆,但中国人设法通过被动流量分析和主动“探测”来跟踪 Shadowsocks 的运行,然后阻止连接。首先,防火墙会寻找可能的 Shadowsocks 连接;在第二阶段,它会从自己的 IP 地址连接到参与这些连接的服务器,就像它是一个 Shadowsocks 客户端一样,并观察服务器的响应。
您可以在 GitHub 上阅读解决该问题的详细信息和机制,但无论如何,Shadowsocks 仍然比 VPN 效果更好。
1) 选择性流量伪装。您可以指定哪些流量通过提供商发送,哪些通过 Shadowsocks 发送。这将有助于绕过封锁并同时保持对某些服务的访问。
示例:Instagram 等网站和国家在线服务同时运行。前者可能在您的国家/地区无法访问,而后者只能使用本地 IP 地址。如果您使用 VPN,您可以浏览 Instagram,但无法访问本地服务。但是,某些 VPN 支持单独的隧道。使用 Shadowsocks,您可以解决此问题:您可以伪装 Instagram 流量并同时使用其他服务。
2) 防止 DPI。DPI 是一种用于监控特定应用程序工作的流量检查技术。Shadowsocks 很难被检测和阻止,因为它模拟了常规的 HTTPS 连接。因此,提供商无法检测到“非标准”用户行为。尽管如此,Shadowsocks 容易受到主动探测和模式分析检测。与更高级的可插拔传输(例如 Obfs4)不同,它可能并且已经被复杂的防火墙识别和阻止。
3) 可靠性。即使连接失败,如果连接仅通过 Shadowsocks 配置,Shadowsocks 也不会中断。如果与 VPN 服务器的连接丢失,流量将直接传输,提供商将看到所有信息。KillSwitch 部分解决了这个问题:紧急按钮会断开互联网连接。但有时它不起作用或没有此功能。
4) 良好的带宽。正确配置后,Shadowsocks 比其他加密方法(例如 SSH 隧道和 VPN)工作得更快。大约速度损失不超过 3-5%。
5) 普遍性。有适用于任何操作系统的客户端程序——Windows、MacOS、Linux(各种发行版)、Android 和 iOS。
6) 减少加密过程中的计算负载。从客户端的角度来看,这节省了电池电量(与移动设备相关),从服务器的角度来看,它节省了 Shadowsocks 的 VPS/VDS 托管费用。
7) 节省成本。最便宜的 VPS 服务器适用于 Shadowsocks。理想情况下,如果托管提供商提供使用 VPS/VDS 的无限流量。这比付费 VPN 服务更具成本效益。您也可以使用其他人的代理,但 WannaFlix、12VPN 的选项比您自己的服务器贵得多,每月约 10 美元。
相比之下:您可以租用一个拥有 5 GB 内存、0.5 GB RAM 和无限流量的 VPS,价格为 0.87 美元。这对于 Shadowsocks 来说已经足够了。最便宜的 VPN 服务通常每月约 2 美元,贵一倍,而且您需要预付 2-3 年的订阅费。不考虑免费 VPN——它们传输数据,限制速度和流量。
1) 使用复杂性。您需要了解 PC 和连接的工作原理,但配置只需 5 行。VPN 要简单得多。
2) 连接速度降低的风险。根据使用的混淆器,Shadowsocks 有可能显著降低互联网速度。
3) 有限的可用性。Shadowsocks 可以尝试更改 Netflix 的区域,但这种方案不会持续很长时间:该服务会监控不同的绕过系统。对于洪流文件来说,这也不是一个明智的解决方案:如果您租用服务器,很容易查出您的姓名和卡号,然后指控您侵犯版权。
4) 有限的可用性。尽管 Shadowsocks 很受欢迎,但在某些地区很难购买或连接到可靠的 VPS 服务器。
5) 没有官方审计。许多专家研究了 Shadowsocks 的开源代码。但它没有像 OpenVPN 那样经过官方审计。官方审计本可以由 OSTIF(开源技术改进基金)进行,该基金正是为了增强类似项目的保护而创建的。同时,Shadowsocks 的代码相当简单,这增加了分发假冒软件包的风险。
WireGuard 是一种现代 VPN(虚拟专用网络)工具,有助于保护您的互联网连接。可以将其视为您的设备(如笔记本电脑或手机)与互联网之间的私人隧道。您发送或接收的任何内容都通过此隧道传输,因此公共 Wi-Fi 上的黑客或窥探者无法看到您正在做什么。它的设计宗旨是:
快速: 与传统 VPN 相比,减速最小。
简单: 只需安装,添加“服务器”或“对等点”,然后拨动开关即可连接。
安全: 使用最新的加密技术来保护您的数据安全。
当您使用公共 Wi-Fi、希望看起来像是从另一个国家/地区浏览,或者只是希望保持在线活动私密时,您可能会使用 WireGuard。
如果您需要一个快速、按应用程序的解决方案来绕过审查(例如解除对网站或流媒体服务的封锁),而无需触及系统 VPN 设置,那么 Shadowsocks 是理想选择。WireGuard 更适合全设备保护、安全的站点到站点隧道,或者当您需要一个健壮、经过审计的 VPN,且在整个网络堆栈中具有最小延迟和强大加密保证时。
功能 | Shadowsocks | WireGuard |
---|---|---|
类型 | 加密的 SOCKS5 代理 | 第三层 VPN 隧道 |
主要用例 | 审查规避和按应用程序代理 | 站点到站点或全设备 VPN |
协议层 | 应用层 | 网络 (IP) 层 |
加密 | AEAD 密码(例如 ChaCha20-Poly1305、AES-GCM) | Noise 协议框架(ChaCha20-Poly1305、Curve25519、BLAKE2s) |
认证 | 共享密钥;无内置密钥交换 | 带内置密钥交换的公钥加密 |
性能 | 轻量级,用户空间;适度开销 | 极快,内核(或优化)实现 |
检测抵抗 | 除非混淆,否则可被 DPI 指纹识别 | 静态 UDP 端口/协议;可被阻止但比通用 VPN 更难进行 DPI 指纹识别 |
设置与部署 | 简单:安装客户端,指向代理服务器 | 需要内核模块或支持的客户端、root 权限和路由配置 |
路由范围 | 按应用程序(浏览器、特定应用程序) | 整个网络堆栈(所有流量) |
分流 | 原生:只有配置的应用程序通过代理 | 需要明确的路由规则;全部或定义的 IP 范围 |
DNS 处理 | 使用客户端的 DNS 解析器 | 每个接口可配置的 DNS 设置 |
OpenVPN 是一种流行且受信任的 VPN(虚拟专用网络)技术,可在您的设备和互联网上的另一个网络之间创建安全加密连接(通常称为“隧道”)。此隧道可保护您的数据免受窃听,让您私密浏览,并可让您看起来像是从不同位置访问互联网。OpenVPN 是一种开源 VPN 协议和软件,它使用 SSL/TLS 进行密钥交换,实现安全的点对点或站点到站点连接。
人们使用 OpenVPN 来:
在公共 Wi-Fi 上保护他们的隐私
访问区域限制内容
远程安全连接到他们的工作场所网络
OpenVPN 加密: 支持强大的加密算法,如 AES(高级加密标准),用于数据机密性。
OpenVPN 认证: 使用 X.509 证书进行相互认证,并可选择使用用户名/密码和预共享密钥。
OpenVPN 传输协议: 通过 UDP 或 TCP 运行,为不同的网络环境和防火墙遍历提供灵活性。
OpenVPN 隧道: 在网络层(第 3 层)工作,创建虚拟网络接口 (TUN) 或桥接以太网帧 (TAP)。
Shadowsocks 非常适合轻量级、特定于应用程序的审查规避,且延迟最小,尤其是在限制性环境中。OpenVPN 是一种健壮、经过良好审计的 VPN 解决方案,用于全设备或网络隧道,提供更强的安全性和更广泛的用例,但设置复杂性更高,资源使用也更多。
Shadowsocks | VPN | |
---|---|---|
加密 | 与大多数 VPN 相比,加密较弱 | 仅在您的设备和服务器之间进行更可靠的加密 |
内容访问 | 绕过互联网审查并提供对被封锁内容的访问 | 也绕过审查,但更容易被检测到 |
性能 | 由于加密较少且到目标点的路径较短,速度更快 | 由于加密和到 VPN 服务器的额外距离,速度较慢 |
配置复杂性 | 对于普通用户来说,配置和使用更困难 | 相对容易配置和使用 |
成本 | 低成本甚至免费选项 | 更昂贵,特别是对于高质量服务 |
用例 | 用于绕过复杂的防火墙(例如在中国)和访问被封锁的内容 | 适用于关心隐私和访问被封锁内容的用户 |
目前,Shadowsocks 有一个社区和 自己的网站。因此,爱好者可以基于它创建自己的解决方案。例如,在 Shadowsocks 于 2015 年关闭后,另一位开发者 breakwa11 声称 SS 很容易被检测到。他基于 Shadowsocks 创建了 ShadowsocksR,支持流量混淆。因此,ShadowsocksR 是原始协议的一个分支,用 Python 编写,具有流量混淆和抗检测能力。
但更常见的是,用户建议使用基于 Rust 的当前版本 Shadowsocks-Rust。
关于 ShadowsocksR 的要点:
增强混淆: SSR 添加了高级流量混淆方法来伪装代理流量,使其更难被深度包检测 (DPI) 系统(如中国的长城防火墙)检测和阻止连接。
多种协议和混淆选项: 与 Shadowsocks 相比,Shadowsocks 使用相对简单的 SOCKS5 代理和加密,而 SSR 支持各种协议和混淆插件,可以修改数据包头、随机化流量模式并规避常见的过滤技术。
向后兼容性: SSR 大部分与 Shadowsocks 客户端兼容,但需要自己的客户端或兼容软件才能实现完整功能。
非官方维护: SSR 是一个社区项目,有多个版本独立维护;它不属于官方 Shadowsocks 存储库。
有争议: 一些隐私倡导者质疑 SSR 的安全性和维护状态,建议使用官方 Shadowsocks 或更现代的工具(如 V2Ray)来获得更强大、经过审计的代理解决方案。
总而言之,ShadowsocksR 的开发是为了使 Shadowsocks 流量更难被检测和阻止,但如今其使用范围或官方支持不如原始 Shadowsocks 广泛。
Shadowsocks 基于 SOCKS5 协议工作。简单来说,它就像您最喜欢的应用程序在 iOS 上运行一样。Shadowsocks 为 SOCKS5 增加了更多安全性。
以下是 Shadowsocks 和 SOCKS5 之间的区别:
方面 | SOCKS5 代理 | Shadowsocks |
---|---|---|
定义 | 一种通用代理协议,在 TCP 层路由客户端和服务器之间的网络数据包。 | 一种基于 SOCKS5 的加密代理协议,增加了强大的加密和混淆功能。 |
加密 | 默认不加密;纯 TCP 转发 | 使用 AEAD 加密(例如 ChaCha20-Poly1305),保护传输中的数据。 |
目的 | 用于绕过 IP 封锁或路由流量的简单代理 | 旨在规避审查,并注重隐私和安全。 |
检测风险 | 高——流量未加密且易于检测 | 低——加密流量,并可通过混淆插件规避深度包检测 (DPI)。 |
设置复杂性 | 简单;许多客户端都支持 | 需要特殊的 Shadowsocks 客户端或兼容软件。 |
用例 | 基本代理,访问被封锁的 IP | 安全绕过互联网审查并保护数据隐私。 |
UDP over TCP 是指将 UDP 流量(无连接,用于游戏、VoIP、DNS 等)封装在 TCP 连接中(面向连接且可靠)。VPN 或代理有时会这样做,因为它们只支持 TCP 来传输 UDP 数据包。这会导致额外的延迟、抖动和性能损失,因为 TCP 的重传和排序与 UDP 的低延迟设计不符。但它有时会有帮助,因为某些网络或防火墙会阻止 UDP 流量或只允许 TCP。
功能 | UDP over TCP | Shadowsocks |
---|---|---|
流量类型 | 封装在 TCP 流中的 UDP 数据包 | 原生支持 TCP 和 UDP 流量 |
性能 | 由于 TCP 重传,可能导致延迟、数据包延迟和抖动 | 通过原生 UDP 支持,优化以实现最小延迟 |
用例 | 当 UDP 被阻止或不受支持时使用 | 专为审查规避和安全代理而设计 |
检测抵抗 | 取决于底层 TCP 隧道;通常可检测 | 加密和混淆,更难检测 |
协议复杂性 | 简单的隧道方法 | 完整的加密代理协议,带有握手和加密 |
VPN 和 Shadowsocks 是不同的工具。前者是虚拟专用网络,我们在博客中写过,后者是代理协议。从技术上讲,它们都:
但 Shadowsocks 采用更简单的加密,并且不允许在互联网上实现匿名性。该项目最初开发的目的与其说是为了安全,不如说是为了绕过中国的防火墙。然而,这个问题在 ShadowsocksR 中得到了部分解决,我们将在文章末尾讨论。VPN 通常使用复杂的 AES-256 算法。
VPN 服务通常有许多附加功能。例如,KillSwitch。VPN 是一个“隧道”,所以如果它停止工作,流量将直接传输。在这种情况下,很容易泄露真实的 IP 地址。KillSwitch 可以防止这种情况:如果与 VPN 服务器的连接丢失,它会立即切断互联网连接。
最后,VPN 拥有庞大的服务器网络。您可以从不同国家访问互联网——每次 IP 地址都会更改为所选服务器的国家/地区。
结论:VPN 更方便、更安全、更简单。如果您可以使用它并且它满足您的需求,请使用它。如果存在困难,那么 Shadowsocks 应该可以解决问题:它在 VPN 被封锁且限制难以绕过的国家/地区效果更好。使用它,数据看起来类似于 HTTPS 流量,不会引起怀疑。使用多个 TCP 连接有助于实现高速。对于简单的绕过封锁来说,它更具成本效益。
Shadowsocks | VPN 瑞典 | |
---|---|---|
加密 | 与大多数 VPN 相比,加密较弱 | 仅在您的设备和服务器之间进行更可靠的加密 |
内容访问 | 绕过互联网审查并提供对被封锁内容的访问 | 也绕过审查,但更容易被检测到 |
性能 | 由于加密较少且到目标点的路径较短,速度更快 | 由于加密和到 VPN 服务器的额外距离,速度较慢 |
配置复杂性 | 对于普通用户来说,配置和使用更困难 | 相对容易配置和使用 |
成本 | 低成本甚至免费选项 | 更昂贵,特别是对于高质量服务 |
用例 | 用于绕过复杂的防火墙(例如在中国)和访问被封锁的内容 | 适用于关心隐私和访问被封锁内容的用户 |
移动代理是蜂窝运营商通过配备专用 SIM 卡的设备提供的实际移动网络 IP,提供高度可信、动态且特定于位置的 IP 地址,这些地址更难被检测或阻止。
方面 | Shadowsocks | 移动代理 |
---|---|---|
它是什么 | 一种加密代理协议(基于 SOCKS5),旨在通过加密和转发流量通过远程服务器来绕过审查 | 在真实移动设备或 SIM 卡上运行的实际代理,使用蜂窝网络 (LTE/4G/5G) 路由流量 |
技术 | 基于软件的加密代理,在 VPS 或服务器上运行 | 与移动运营商绑定的基于硬件的代理,使用蜂窝运营商分配的真实移动 IP 地址 |
IP 地址类型 | 通常是数据中心 IP,很容易被标记或阻止 | 真实的移动运营商 IP,高度可信和动态,与特定地理位置绑定 |
检测风险 | 中等——除非应用混淆,否则可能被深度包检测检测到 | 低——流量显示为合法的移动网络使用,更难被阻止或标记 |
性能 | 取决于服务器位置和网络;通常很快但有所不同 | 通常在稳定的 LTE/4G/5G 连接下速度很快;IP 自然轮换 |
用例 | 审查规避、隐私保护、解除网站和服务封锁 | |
设置 | 需要安装客户端软件并配置代理设置 | 通常通过市场或 API 访问;无需客户端软件,只需代理凭据 |
匿名级别 | 良好的加密,但 IP 可能来自数据中心范围 | 高度可信和匿名,因为 IP 属于移动运营商并动态轮换 |
用于审查规避和加密代理——Shadowsocks
对于真实的移动 IP、受信任的基于位置的访问和低检测风险,移动代理更优越——特别是对于商业和自动化用例。
Shadowsocks 是一种经济实惠且方便的绕过封锁工具。它也可能有助于保护连接。当然,它包含的功能比 VPN 服务少,但速度稍快。然而,对于解决简单任务,例如恢复对被封锁网站的访问,它是最佳选择。它易于使用和配置:互联网上有很多关于如何操作的说明。