ArkC的原理

简介

如今,为绕过「防火墙」的屏蔽,各种代理工具和服务层出不穷。然而,基于现有技术的代理服务一经发现,就会被以黑名单的方式封锁,由此导致维护成本高昂且稳定性差。ArkC的设计宗旨是搭建一个能让非营利机构和个人不受干扰地搭建免费代理服务的平台。我们采用的连接方式使得基于黑名单的屏蔽手段成本高昂、难以实施。

综述

ArkC软件包括客户端中转服务器服务端调度服务器ArkC&Proxy。客户端安装在终端用户的计算机上、提供普通的HTTP代理服务。中转工具安装终端用户附近(即「墙内」)可接收来自Internet的请求(即拥有公网IP或配置好NAT穿透)的PC或服务器上。服务端部署在网络不受封锁的区域(即「墙外」)。调度工具将用户请求分配到各个中转及服务端。当客户端收到来自终端用户的代理请求时,它发出一个包含密文的特殊的DNS查询,同时加入一个特殊的BitTorrent(BT)网络。DNS查询通过一般的DNS服务器转发到ArkC网络的调度服务器。调度服务器解密DNS查询,得到客户端的IP地址和身份信息。经过验证后,请求被转发到一个服务端,后者向一台中转服务器发起TCP连接。发起连接是通过开放代理,部署在Google App Engine上的代理,或CDN节点完成的,以便伪装成普通的由境外客户向境内服务器发起的请求。当中转服务器收到客户端的地址时,它通过一个预先分享的种子,与客户端加入同一个BT网络。数据在客户端和中转服务器之间(即「墙内」)的传输就如同一般的P2P下载。整个过程采用端对端的AES加密和公钥身份验证,以保护数据安全和防止中间人攻击(MITM)。

 

分析

封锁ArkC连接成本高昂、可能对审查者造成较明显的经济损失。因此,部署ArkC服务有助于节省因为IP地址被封而更换服务器的成本、提高服务质量。

域名解析(DNS)是互联网最基本的服务之一。由于DNS查询是基于UDP的,我们认为审查者暂时不可能检查并试图拦截每一个通往境外的DNS请求——那样会显著影响各种网络服务的速度。只要绝大多数DNS请求都能够到达位于境外的调度服务器(针对DNS响应的DNS污染手段在这里是无效的),客户端和服务端之间就能成功建立连接。除此之外,我们认为审查者可以审查境内通向境外的TCP请求,但其计算能力以及境内网络部署的方式决定了其不可能分析任意两台境内的计算机之间的通信。因此,只有DNS请求和服务端向中转建立连接这两个环节可能受到干扰。对于前者的抗干扰能力,上文已作分析。而对于后者,由于境外向境内的连接来自Google、各大CDN等诸多来源,且经过伪装并通过obfs4等工具混淆后难以和其他网络服务区分开来,封锁它们会造成严重的「副作用」:如境内网站不能被Google索引、商务网站无法从境外访问等——这些都意味着严重的经济损失。除此之外,境内的BT网络中往往包含多台中转服务器,保证了其稳定性。

实现和测试

志愿者已在中国境内的多个ISP部署和测试了ArkC。尽管协议开销(overhead)使得流量消耗增加了约5%~7%,测试者普遍反映协议稳定、速度良好。由于ArkC还在开发当中,目前尚未进行基准测试(benchmarking)。

鸣谢

华盛顿大学(University of Washington)的Will Scott对于BT网络的设计提出了宝贵的意见。

ArkC包含了与Flashproxy[^1]相似的特性,但在具体实现上是独立完成的。

源代码和许可证

ArkC以GPLv2协议发布。源代码和可执行程序可从https://github.com/projectarkc/获取。关注http://arkc.org以保持更新。

[^1]: Fifield, David, et al. “Evading censorship with browser-based proxies.” Privacy Enhancing Technologies. Springer Berlin Heidelberg, 2012.

下载PDF全文