分享一个开源的网络加速器
这篇文章分享一个开源的IP加速项目——gtun。
项目简介
这是一款通用的网络加速器,提供一个基础通道,外部可以通过linux的ipset来和他进行无缝对接,一个典型的使用方式是:
- 运行gtun这个项目
- 外部程序通过和控制台对接,拉取到需要加速的IP,将IP加入到ipset当中
- gtun会自动匹配到ipset里面的IP,自动代理
因此它是一个基础通道,至于在这个基础之上能实现什么功能,全凭想象力。
一些常用的场景包括:
- 基于IP做加速,比如你需要从国外访问国内的网站,那么你拿到国内的IP列表之后,将IP加入到ipset当中,就能自动实现加速
- 基于域名做加速,有些场景仅仅靠ip是不行的,比如baidu,使用在做域名解析时,如果在海外解析,那么解析到的IP有可能是香港的IP,这样就匹配不上ipset里面的ip,就没法加速,这时候需要解决域名解析的问题
- 基于应用的加速,有些场景只需要加速某些指定的应用,比如只需要加速游戏,加速office365,其他的都不需要
- 可以做内置在软路由,旁路由之上,实现整个家庭网络,公司网络的流量分流与加速
诸如此类的场景很多,有需要的可以到项目网站上去了解更多,上面有不同的使用场景和视频教程。
技术原理
这个项目背后的技术原理很简单,代码也非常少。
首先它是一个代理,代理的第一个问题是流量怎么过来, gtun前前后后使用过很多流量代理技术,比如一开始是基于虚拟网卡加linux路由来实现的,市面上所有的微pn都是基于此类技术实现的,但是这个方式有一个明显的区别就是性能不足,因为它采用的还是overlay技术,不是代理技术,两者有很大性能差距,感兴趣的可以参考这篇文章
在虚拟网卡之后,中间使用过iptables的DNAT来拦截流量,本地tcp握手实现短rtt和tcp窗口快速增长的目的,最后发展成为了现在的linux的tproxy来实现。
接下来第二个问题是流量怎么转发出去?目标只有一个——快速转发出去,实际上是两个功能,第一个是能转发出去,第二个是能快速转发出去,因此接入了一些可靠性udp协议来实现,前后接入过kcp和quic,就我目前体验来看,在我需要的场景里面,quick是不如kcp好使的,除了可靠性udp之外,也支持tcp,因为碰到过一些udp被运营商qos的场景,所以还保留tcp的方式。整个传输过程走的是私有协议,数据会比较安全。
最后一个问题是容灾的问题,项目可以实现多个地址之间竞速,然后选择比较好的节点来转发,这个既能解决上面的快速转发的问题,也能实现故障自动切换的问题,故障可以认为是质量最差,自然就不会选到它进行转发了。
这个也是我家里的旁路由一直在使用的项目,基本没太大问题。