Blog icon indicating copy to clipboard operation
Blog copied to clipboard

Android ShadowSocks VPN模式

Open alwaystest opened this issue 8 years ago • 5 comments

Android ShadowSocks VPN模式

标签(空格分隔): ShadowSocks


虽然之前一直使用Android手机,使用Google这么好的搜索服务,但是对于ShadowSocks底层实现还不是很清楚,也没有一个完善的文档说明这个软件怎么用,所以有时候用着会比较懵,不知道各个选项是什么效果。于是今天大概翻了翻源码,对VPN模式的工作原理有了一点了解。

本来之前ShadowSocks的Android版本使用的是NAT模式,原理有些类似于我之前在树莓派上搭建的网关代理,但是这里使用的并不是ss-redir方式,而是使用ss-local+ss-tunnel方式结合,提供socks代理和UDP转发。NAT模式最关键的一点是利用Android基于Linux内核的特性,通过配置IPTables规则达到效果,而Android设置IPTables需要使用ROOT权限,给软件的使用造成不方便,另一方面根据软件开发者的说法,NAT模式不支持IPV6的代理,还有许多缺点,所以弃用了这个特性,采用了新的VPN模式。

新的VPN模式没有见过详细说明,我一直以为VPN模式是使用ShadowSocks搞了一个类似于PPTP的VPN,然后手机连上去,所有流量都是走VPS的。我还纳闷,这样子的话SS界面上的好多特性都没用了。扫了一眼源码以后,才发现,我的想法是错误的。

VPN模式还是使用ss-tunnel的方式,然后利用Android 4.0 以上提供的VPN Service,实现VPN对接到本地的ss-tunnel提供的Socks端口,其中的黑科技可以参考下面的文章,我也是在写博客的过程中查阅资料才发现这些文章的,这也说明了写博客的重要性。VPN模式下指定代理范围(全局,非中国,非中国+非局域网,非局域网)是通过ss-tunnel--acl参数指定的,对特定APP进行代理是在startVPNbuilder.addAllowedApplication这里,暂时没有看懂这里的写法是调用了Android的实现还是自己实现。留坑以后补。

结论: Android设备使用ShadowSocks可以放心的使用VPN模式,下方的选项对于VPN模式也是可用的。


参考

shadowsocks-android源码解析

socks代理转VPN

alwaystest avatar Jul 15 '16 05:07 alwaystest