alwaystest / Blog

24 stars 2 forks source link

Android ShadowSocks VPN模式 #20

Open alwaystest opened 8 years ago

alwaystest commented 8 years ago

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

deverhjj commented 8 years ago

解释到位,还需再研究研究

ajfg93 commented 3 years ago

老哥,链接文章失效了,能更新一下嘛

alwaystest commented 3 years ago

老哥,链接文章失效了,能更新一下嘛

抱歉,我这边也没有原文的摘录了,不过讲这些工具的原理的文章应该网上有一堆,可以自己搜索下看看。

ajfg93 commented 3 years ago

好的,谢了

maple-leaf-0219 commented 1 year ago

ss原理.pdf

过时的连接可以通过 http://web.archive.org/ 查看归档内容。