2017年10月11日星期三

科普一下Shadowsocks

Shadowsocks作者是谁?是否还在更新?

Shadowsocks是由若干人因为兴趣而制作的一个项目,主要开发者和领导者是 @clowwindy ,但是在2015年下半年 被“相关部门”约谈喝茶,于是被迫删除Github的源码及相关文档。

Shadowsocks是否安全?加密性如何?

Shadowsocks是被设计来混淆数据,增加 墙 检查出流量特征所需的计算量,提高实时检测和匹配的成本,而不是加密。

再三强调不要忘记SS作者的本意——这是一个能帮你上谷歌,上被墙屏蔽的网站的工具,其意义是瞒过 墙 的实时流量检测,而不是瞒过 墙 后面的master minds。
Shadowsocks是一个业余兴趣制作的项目,并没有经过严谨的密码学算法计算,Shadowsocks不是一个VPN,它无法100%的保护你的数据安全!

Shadowsocks和VPN 的区别是什么?

VPN顾名思义,虚拟专网,你接入VPN就是接入了一个专有网络,那么你访问网络都是从这个专有网络的出口出去,好比你在家,你家路由器后面的网络设备是在同一个网络,而VPN则是让你的设备进入了另一个网络。同时你的IP地址也变成了由VPN分配的一个IP地址。通常是一个私网地址。你和VPN服务器之间的通信是否加密取决于连接VPN的具体方式/协议。
shadowsocks即Sock5代理服务器则是把你的网络数据请求通过一条连接你和代理服务器之间的通道,由服务器转发到目的地。你没有加入任何新的网络,只是http/socks数据经过代理服务器的转发送出,并从代理服务器接收回应。你与代理服务器通信过程不会被额外处理,如果你用https,那本身就是加密的。

Shadowsocks各分支版本地址

我目前已知并使用人数较多的Shadowsocks各分支版本。

客户端

  1. Shadowsocks-C# – Github
  2. Shadowsocks-qt5(Linux) – Github
  3. SSCAP – sourceforge
  4. ShadowsocksR-C# – Github
  5. ShadowsocksX-NG(MAC) – Github
  6. ShadowsocksX-R(MAC) – Github
  7. Shadowsocks-(安卓) – Github
  8. ShadowsocksR-(安卓) – Github
  9. Shadowsocks-libev-OpenWrt – Github
  10. ShadowsocksR跨平台客户端 – avegeelectron-ssr

服务端

  1. Shadowsocks-Python – Github
  2. Shadowsocks-libev – Github
  3. Shadowsocks-Go – Github
  4. ShadowsocksR-Pyhton – Github
  5. ShadowsocksR-libev – Github
  6. Shadowsocks-libev-OpenWrt – Github

Shadowsocks原版和ShadowsocksR的区别是什么?

Shadowsocks原版在更新到 v2.5.8 之后被“相关部门”约谈喝茶了,于是就停止了更新。但是应网友要求,另一个开发者把 v2.5.8 的一些严重BUG修复了更新为 v3.0,然后宣布不再管了。
Shadowsocks原版本身,也是具有协议和混淆功能的,也就是原版协议/混淆,只是只有一个不能自行选择,并且全靠作者维护,作者喝茶后,就GG了,其他的接手者只是继续完善其他的功能。
而ShadowsocksR是在 原版作者喝茶前,由另一个程序员 @breakwa11 制作的第三方版本,主要特点是增加了一些人性化功能,比如服务器连接统计、连接管理、协议转换、多重代理等。
最主要的是ShadowsocksR的混淆协议和插件功能,因为Shadowsocks原版项目已经无人维护,同时 墙 的工作人员也在不停的寻找效率批量匹配特征的方法,目前SS原版协议在大部分地区已经被 匹配流量特征QOS限速了。
所以ShadowsocksR的混淆协议和插件就应运而生,其目的就是欺骗 墙 目前的流量匹配功能和QOS限速。
参见: https://github.com/breakwa11/shadowsocks-rss/blob/master/ssr.md
需要说明的是,ShadowsocksR目前最新的协议和混淆是会增加延迟和损耗15%的速度(因为混淆需要时间,越复杂的混淆越不容易被墙发现,同时混淆时间越长),所以如果你没有限速,或许用原版协议和混淆会更好。
你可以理解为在原版协议的基础上加强了混淆功能,所以在部分地区只有使用ShadowsocksR的混淆功能才能达到最佳速度,当然不同地区也不一样,所以最好都试试!

ShadowsocksR的混淆协议和插件有什么用?

不说各混淆的特性,只说一下 混淆协议插件 整体意义。
Shadowsocks的开发目的是 穿透防火墙,也就是专门科学上网用的。
Shadowsocks是被设计来 混淆数据,增加 墙 检查出流量特征所需的计算量,提高实时检测和匹配的成本。
但是 作者喝茶后,其他的Shadowsocks项目参与者都散了,已经无人维护Shadowsocks原版项目,再加上 墙 一直没有停下 针对Shadowsocks协议的 流量特征分析。
所以,现在的Shadowsocks原版协议在一些地区已经被严重匹配流量特征了。
遇到这种情况会出现:
  1. Shadowsocks间歇性无法连接。
  2. Shadowsocks速度一开始很快,然后很快就降速很低。
  3. Shadowsocks所有账号,全部无法超过XXX KB/S的速度。
  4. Shadowsocks单一端口使用一段时间或者一些流量后无法使用,换端口后正常。
  5. Shadowsocks使用一段时间后无法连接,但是重新拨号(换IP)或者换Shadowsocks服务器后正常。
这是目前我已知的几种情况。
而ShadowsocksR的主要特点就是 混淆协议和插件,目的就是为了弥补 目前Shadowsocks原版协议已经 部分地区封锁的情况。
通过 改变流量特征 或者 伪装其他流量特征 来达到欺骗QOS 的目的。
但是,既然是欺骗,那就不可能一直骗下去,所以ShadowsocksR的混淆协议需要不停地更新,来对抗整个 墙的工作人员。
一些地区Shadowsocks原版协议封锁严重,使用最新的 混淆协议和插件可以缓解或者暂时解决上面所说的情况(尽量不要使用旧的,基本已经匹配了)
目前,各省份的运营商(墙)相对是独立的,并不是全网同步的,所以会遇到有些地区的运营商已经可以匹配Shadowsocks原版流量特征了,而有些没影响。
需要说明的是,ShadowsocksR目前最新的协议和混淆是会增加延迟和损耗15%的速度(因为混淆需要时间,越复杂的混淆越不容易被墙发现,同时混淆时间越长),所以如果你没有限速,或许用原版协议和混淆会更好。
同样大部分地区还是 封锁较轻,这种地区根据当地的QOS策略不同,可能需要选择性的使用 混淆协议哈插件。

如何知道自己是否需要使用ShadowsocksR服务端和客户端?

首先,你使用Shadowsocks原版的服务端和客户端时,遇到了以下几种情况:
  1. Shadowsocks间歇性无法连接。
  2. Shadowsocks速度一开始很快,然后很快就降速很低。
  3. Shadowsocks所有账号,全部无法超过XXX KB/S的速度。
  4. Shadowsocks单一端口使用一段时间或者一些流量后无法使用,换端口后正常。
  5. Shadowsocks使用一段时间后无法连接,但是重新拨号(换IP)或者换Shadowsocks服务器后正常。
那就说明,你当地的运营商已经具备检测Shadowsocks原版协议/混淆的能力了,所以对其限速、丢包干扰等。
这时候你就需要使用ShadowsocksR服务端和客户端了。
当然,即使你没有遇到上面的情况,你也可以尝试使用ShadowsocksR服务端和客户端,说不定,你觉得没限速,实际现在正在被运营商限速呢。
当然,是否需要使用ShadowsocksR客户端和服务端,你需要同一个VPS上面安装Shadowsocks服务端和ShadowsocksR服务端。
然后分别用Shadowsocks客户端和ShadowsocksR客户端(使用最新混淆/协议)来测试速度。
如果速度一样,或者说ShadowsocksR的速度反而变慢了(因为协议和混淆会损失速度),那么说明你的本地运营商并没有限速Shadowsocks,那么你用什么都行。
如果ShadowsocksR(使用最新混淆/协议)速度比Shadowsocks原版多很多,那么说明你本地运营商限速Shadowsocks原版了,那么你就需要使用ShadowsocksR了。

ShadowsocksR 最新服务端为什么不能兼容原版(使用原版SS客户端),有什么影响?

ShadowsocksR news:
服务端所有auth系列协议,为了保证其安全性,一律不再支持compatible模式,唯一一个支持的协议是 verify_sha1_compatible ,但将来可能会移除
混淆部分不变,也建议启用compatible
首先引用作者原话,最近这几天,ShadowsocksR作者与Shadowsocks libev服务端的作者吵架,各种带节奏的,然后ShadowsocksR宣布不再更新,同时也取消了ShadowsocksR服务端的兼容原版模式。我来解释一下取消后导致的问题。
大家都知道,在 ShadowsocksR服务端配置 协议和混淆的时候,在协议和混淆 比如协议: auth_sha1_v4后面加上 _compatible 就可以实现:
既ShadowsocksR客户端(选择对应的协议/混淆) 和 Shadowsocks原版(或者SSR客户端选择原版协议/混淆) 都能链接你的 ShadowsocksR服务端(账号)。
取消 协议 兼容原版后,当你的ShadowsocksR服务端配置了 协议 后,只能ShadowsocksR的客户端选择对应的协议才可以连接(SSR客户端选择原版协议也是无法连接),而使用Shadowsocks原版客户端无法连接。
只有你设置ShadowsocksR服务端的协议为 原版(origin),那么才能ShadowsocksR客户端(选择原版协议)和Shadowsocks客户端都能链接你的ShadowsocksR服务端(账号)。
目前ShadowsocksR服务端是,auth_aes128_* 及以后的协议 都不支持兼容原版了,之前的协议可以兼容原版,混淆也都可以兼容原版。
当然了,这只针对 ShadowsocksR的协议,对于 混淆 参数是无所谓的,协议和混淆是可以分开的,你可以协议不设置兼容原版,而混淆设置兼容原版,或者不设置协议,而只设置混淆兼容原版,都可以,不存在协议开了,混淆也必须开的问题。

没有评论:

发表评论