挖井

类库大魔王的挖井日记

挖一口属于自己的井


avege Android版的计划

前些天看到有人移植了SSR Android版,我就顺便看了看代码,结合网上的一篇文章,觉得似乎挺简单的,它(官方也)用Java/Scala写了个外壳和启动VPN service,其他功能是几个用C写的程序共同完成,包括redsocks,tun2socks,ss-tunnel,ss-local,pdnsd。

之前说过,翻墙主要做两件事,一是DNS无错解析,二是内容传输。

影梭(即Shadowsocks Android)及其fork们分支持UDP转发和不支持UDP转发两种情况处理DNS解析。在支持UDP转发的情况下,就把DNS解析请求通过内容传输通道转发到远端解析回来。在不支持UDP转发的情况下,由tun2socks劫持了本地的DNS解析请求到指定的网关IP和端口,其实就是本地开的pdnsd的端口,pdnsd连到ss-tunnel,而ss-tunnel又通过内容传输通道转发到远端解析回来。所以在开启UDP转发时,pdnsd和ss-tunnel可以省略。

影梭及其fork们分NAT和VPN两种模式进行内容传输。NAT其实就是我之前的文章里说过的在Linux下通过iptables把流量导到指定的IP和端口,需要对手机root才能实现。VPN则不需要Root,但要求系统版本在4.x以上。Android系统提供了接口启动VPN service,得到一个tun fd,app可以通过这个读取tun fd获取所有试图出去的流量,tun2socks把这些流量转换成socks5协议的格式,再连接到ss-local,ss-local则试图把这些流量发送给远程服务器,为了达到这个目的,ss-local和远程服务器之间的连接的fd通过unix domain socket传给VPN service,让它不要劫持这个fd上的出流量。

反观avege当前的实现,DNS解析和内容传输基本上都有了,只不过要移植到Android上还有一些修改的工作:

  • 没有实现UDP转发,我现在还没想清楚这点是否必需
  • 要把跟远程服务器的连接的fd通过unix domain socket发出去
  • 剥离对redis的依赖

另外一些需要改进的项:

  • 没有支持IPv6
  • 没有实现SSR的那些混淆和协议插件(目前它的用户越来越多了

如此,一个avege程序可以替换掉除tun2socks外的其他所有程序,精简多了。

不过计划嘛总归是计划,至于什么时候执行呢,再议了,呵呵。

本文地址:

https://minidump.info/blog/2016/08/avege-android-plan/

上一篇

终于把Netgear R6300v2固件刷了

一直以来对刷路由器固件很抗拒,觉得麻烦,收益小,可玩性低,风险大,就跟刷Android手机一样。但是实在受不了Netgear R6300v2那渣渣的官方固件了,功能弱也就算了,信号太弱就不能忍了,相隔不到10米的房间就关上门,屋里一票电脑手机就要罢工!好在刷固件的步骤还是比较简单的,网上有很多...…

Router 全文阅读
下一篇

在Mac上给Qt程序用Developer ID签名

最近想着赶紧弄个程序出来上架到Mac App Store去,因为我只会用Qt写Mac的GUI程序,所以要研究一下如何把Qt程序签名上架,结合网上找到的这篇、这篇,以及这篇文章,折腾了几天了,最终,仍然没搞定怎么签能上架Mac App Store的Qt程序,貌似只搞定了Developer ID类...…

Qt 全文阅读