序言

最近闹的沸沸扬扬的 Shadowsocks 被针对检测的争论还未平息,混淆被认为是目前可能有效的针对流量检测手段,旨在提供强特征将流量伪装为常见协议如 HTTP 来绕过识别与 Qos 。因此在 shadowsocks-libev 中,开发者引入了 simple-obfs 的模块来提供 HTTP 与 TLS 方式的混淆。但经讨论认为这是“ a dirty hack for given ISP ”,因此在后续版本中将混淆模块单独拆出以插件形式提供。详见: Github issue

目前 Windows 平台并没有支持 simple-obfs 混淆插件的 Shadowsocks 客户端,那么只能自己动手了。修改或重写客户端的工程量太大,理想的方式是直接使用 shadowsocks-libev 内置的 ss-local ,那么需要一个 Linux 环境。

笔者首先尝试了在 Windows 10 自带的 Linux 子系统中安装 shadowsocks-libev ,该子系统原理是实时将 Linux 的系统调用转换为 Windows 的系统调用,但是不管是通过 apt 包管理器安装还是自行编译均会出错,可能是存在 Linux 内核上的依赖从而导致不能在该子系统中运行。

还有个办法是虚拟机,但是从头安装 Linux 虚拟机再配置网络实在是过于麻烦,完整的 Linux 也会无谓的拖慢系统,开销太大。所以轻量、部署简单的容器服务 docker 就成为了首选。

安装 docker

通过以下链接下载并按照提示安装 docker :

https://download.docker.com/win/stable/InstallDocker.msi

注:尽管 Windows 下的 docker 也是借助虚拟机实现,但是部署简单,在此场景下所占资源也能够接受。

运行容器

docker 安装完毕后,以管理员身份打开命令提示符,执行以下命令

docker pull zrstea/docker-shadowsocks-libev-obfs-privoxy

这样就成功的把预构建好的镜像下载到了本地,可以直接使用。

接着用自己的配置修改以下命令并执行:

1
2
3
4
5
docker run -p 127.0.0.1:1080:1080/tcp -p 127.0.0.1:1080:1080/udp \
-p 127.0.0.1:8118:8118/tcp zrstea/docker-shadowsocks-libev-obfs-privoxy \
sh -c "privoxy /etc/privoxy/config && ss-local -s YourServerIP \
-p YourServerPort -l 1080 -m CipherMode -k YourPassword -u -b 0.0.0.0 \
--plugin obfs-local --plugin-opts "obfs=http;obfs-host=www.cloudflare.org""

这样就实现了在本地开启了一个开启了 HTTP 混淆的 Shadowsocks 客户端,同时利用 Privoxy 转换出一个 HTTP 代理,在浏览器代理中设置 SOCKS5 代理至127.0.0.1:1080或 HTTP 代理至本地http://127.0.0.1:8118即可。

更多配置参数请参考官方文档

若有选择性代理需求的请参照 SwitchyOmega Wiki 在此不做赘述。

进阶用法

同理该镜像还支持在任意平台上(只要 docker 支持)快捷部署 Shadowsocks 服务端、客户端,你也可以从 Dockerfile 自己构建镜像,详见 Github