Total Pageviews

Monday, 11 March 2013

shadowsocks-android版使用指南

经过几个版本的更新,shadowsocks-android 已经基本可用了。比起其他平台,Android 客户端使用中的问题会多一些,在这儿做一个统一的解释。

1. 代理支持问题。Android 原生是不支持 socks5 代理的(4.0 以上系统也只能部分支持 http 代理),因此 shadowsocks-android 使用的是 NAT + redsocks 的方案,也就意味着你的手机必须已经 root 并且内核中没有裁剪掉 Netfilter/NAT 模块(现在这种情况已经很少出现了)。

2. DNS 解析问题。使用 NAT 的最主要问题就是 DNS 污染,通过引入 pdnsd,shadowsocks-android 将全局的 UDP DNS 请求转换成了 TCP 请求,并通过 socks5 代理进行中转。通过 “DNS代理 选项可以控制是否转发这些 TCP 请求,在国内使用 TCP 进行 DNS 解析依然是安全的。

3. DNS 缓存问题。Android 系统的 DNS 缓存机制是不透明且混乱的,若开启 shadowsocks 之前 DNS 缓存已被污染,那么即便打开代理也依然无法访问一些地址。有两个解决方案:1. 打开 “自动连接” 选项让 shadowsocks 自启动,并保持代理一直处于开启状态。2. 通过打开、关闭飞行模式的方式清空 DNS 缓存。其中第二种方法并不是所有时候都奏效,因为有些应用会维护自己私有的 DNS 缓存(比如 twicca 会用这种方式加快连接速度)。

4. 国内外地址分流与应用分流。“国内路由” 功能提供了一个精简过的路由表来实现国内外地址的分流,虽不准确但效率很高。“分应用代理” 则是可以选择性转发应用的流量,有黑名单和白名单两种模式。

5. 性能、内存占用与电池消耗。由电信 20M 光纤直连美国加州的 VPS,观看 Youtube 的高清视频时可以满速(服务器端是 shadowsocks-go)。redsocks, pdnsd 以及 shadowsocks-libev 的内存占用都在 500KB 左右,加起来不超过 2MB。电池消耗从主观上来看没有任何变化,一直开启的状态下 GN 依然保持一天一冲。若谁有兴趣的话,可以找一些 Benchmark 来测一下,另外也可以测试连续播放 Youtube 视频的时间等。

6. 如何编译。shadowsocks-android 的核心部分都是用 C 写的,因此开发时需要使用 NDK 来编译。shadowsocks 和 pdnsd 这两个可执行文件编译好后还需要手动拷贝到 assets/ 目录。Java 部分的编译则比较简单,直接 mvn clean install 即可。

项目地址: https://github.com/shadowsocks/shadowsocks-android
(UDP转发:shadowsocks-android 将全局的 UDP DNS 请求转换成了 TCP 请求,并通过 socks5 代理进行中转。通过 “DNS代理 选项可以控制是否转发这些TCP请求.)
以及核心部分的 shadowsocks-libev(只实现了 client 端) https://github.com/madeye/shadowsocks-libev

试着在 1.3 版中加入了 polipo,现在支持本地 HTTP 代理了,不过需要用户手动在浏览器或者系统的WIFI / APN 设置里填入 HTTP 代理地址。另外使用 HTTP 代理是不需要 ROOT 权限。

可以从这里下载到最新的 Nightly Build:
https://github.com/shadowsocks/shadowsocks-android/releases
下载安卓下的客户端程序:
https://github.com/shadowsocks/shadowsocks-android/releases/download/v2.10.3/shadowsocks-nightly-2.10.3.apk

1.3.3 加入了对 x86平台的支持.

若需要支持 MIPS 的设备,可以在项目地址页面留言。
---------------------------------------------------------------------------
 shadowsocks,参见文章http://briteming.blogspot.com/2012/06/shadowsocks.html