Total Pageviews

Sunday, 24 May 2015

fqrouter的整体构成原理及源码

fqrouter如果能传递一个想法,相信会和西厢计划鼓励了我写fqrouter一样,薪火相传下去。所以写一个能用的工具是不够的,工具总会有失去维护的那一天。把工具的构成原理,以及为什么设计成这样写下来,也是相同重要的事情。
那么先来了解一下fqrouter的整体构成吧。
整体构成
从最大的方面来说,fqrouter由fq和router两部分组成。第一部分解决可访问性问题,第二部分解决翻墙网络的共享问题。
可访问性部分又由DNS反劫持,代理,穿墙三部分组成。DNS反劫持是针对域名解析不正常问题的。穿墙是针对关键字检查导致TCP连接重置问题的。代理是用来解决IP被封锁问题的。可访问性可以理解为把fqrouter接入到了一个虚拟的自由网络里。
共享由无线中继与Pick & Play两部分组成。无线中继操纵无线芯片的驱动,启动无线网络共享翻墙网络。Pick & Play利用ARP协议,扫描局域网里的设备,并选择性劫持ta们的网络进出流量以经过fqrouter。
列表如下:
可访问性在有ROOT权限下,都是用iptables实现的接入。对于没有ROOT权限的手机,接入使用的是Android的VpnService API。无论用的是iptables还是VPN模式,真正的翻墙穿墙逻辑实现都是同一套的。
可访问性部分中DNS与穿墙都是不需要代理服务器的,实现方式也相对成熟了。但是可惜的是,仅仅依赖DNS与穿墙这两个模块是无法访问所有的网站的。所有 IP被封了的网站都必须依赖代理才能访问。而且穿墙还需要ROOT权限,以及NFQUEUE的支持,有不少手机是用不了的。所以fqrouter目前的各 种不稳定问题,都是由代理模块工作不正常引起的。代理模块目前支持goagent与http-connect两种代理,分别用来解决HTTP服务器的IP 被封问题,以及HTTPS服务器的IP被封问题。所有的服务器均由网络搜集而来。无论是代理的数量,质量,以及冗余程度都不能达到稳定使用的要求。让翻墙 网络稳定可靠,就必须扩展代理模块,支持更多的代理协议,并让用户配置自己私有的代理服务器。
fqrouter一直没有上架Play Store,也没有正式发布,都是因为代理这个部分还需要很多工作要做。fqrouter与其他工具的区别在于希望接入方式的多元化。这么设计的主要原因是:
  • 一站式解决方案:无论什么代理服务器,都可以利用fqrouter做翻墙网络共享
  • 尽可能不依赖代理服务器:DNS与穿墙都不依赖代理服务器
  • 尽可能使用免费的资源:免费意味着不稳定,多元化与冗余可以提高整体的稳定性
  • P2P:将来fqrouter的手机在无线网络联网的条件下要加入一个P2P网络。代理可能不仅仅是国外的服务器了,还可能是国内的运行了fqrouter的手机。
可以总结为,如果只是为了稳定翻墙,解决个人与team的上网需求,搞一个私有的服务器,跑一个代理服务器客户端就可以了。fqrouter的实现方式绝 对overkill了。哪怕可以优化一下访问速度的问题,但是不值得这么大费周章。如果是为了给GFW找点小麻烦,DNS与穿墙模块也就够了,要是校长不 管,我们就接着用好了。如果为了给GFW找大麻烦,那必须得P2P。fqrouter是朝着P2P去的,虽然还没有到那个地步。
另外一种说法是fqrouter是一个大杂烩。fine,它确实是一个大杂烩。如果我的目标是卖代理服务器,fqrouter肯定就只支持我自己发明的协议,会简单得多,然后还可以赚点钱。你们需要一个fqrouter,还是yet another vpn 奸商呢?
共享现在有很多种方式。手机所有内置的网络共享方式,都可以使用。只要把网络共享出去了,启动fqrouter,共享出去的网络也自动翻墙了。所以不是一定要用无线中继的,在3G网络下用系统自带的无线共享功能也是一样可以的。利用系统自带的功能,可以实现:
  • 3G上行,无线下行
  • 3G上行,蓝牙下行
  • 3G上行,USB下行
  • 无线上行,蓝牙下行
  • 无线上行,USB下行
像tpmini大眼睛这样的Android机顶盒,还可以实现:
  • 有线上行,无线下行
无线中继是一个非常有益的补充。其设计的使用场景是带着手机去办公室,手机连上了无线网,而且插着充电线。这个时候要打开笔记本开始办公了。然后手机运行fqrouter用无线中继功能共享出一个翻墙的无线网给笔记本使用。这就实现了
  • 无线上行,无线下行(无线中继)
但是受限于3G的流量费,USB/蓝牙的使用不方便,以及无线中继的硬件支持范围有限。Pick & Play就变得必要了。Pick & Play支持了
  • 无线上行,无线下行(无需硬件支持)
  • 无线上行,有线下行(无需硬件支持)
Pick & Play并不创建新的网络,而是附着在已有的局域网上,局域网可以是纯无线的,也可以是无线有线结合的组网方式。其好处是不需要硬件支持,坏处是使用不如无线中继来着自然。
目前共享部分已经相对成熟,需要改进的地方不是特别多了。
原文链接:http://fqrouter.tumblr.com/post/51779503116