Windows 下使用 docker 开启 shadowsocks-libev simple-obfs 混淆
序言
最近闹的沸沸扬扬的 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 | docker run -p 127.0.0.1:1080:1080/tcp -p 127.0.0.1:1080:1080/udp \ |
这样就实现了在本地开启了一个开启了 HTTP 混淆的 Shadowsocks 客户端,同时利用 Privoxy 转换出一个 HTTP 代理,在浏览器代理中设置 SOCKS5 代理至127.0.0.1:1080
或 HTTP 代理至本地http://127.0.0.1:8118
即可。
更多配置参数请参考官方文档。
若有选择性代理需求的请参照 SwitchyOmega Wiki 在此不做赘述。
进阶用法
同理该镜像还支持在任意平台上(只要 docker 支持)快捷部署 Shadowsocks 服务端、客户端,你也可以从 Dockerfile 自己构建镜像,详见 Github 。