当前位置: 首页 > article >正文

分享一个开源的网络加速器

这篇文章分享一个开源的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的方式。整个传输过程走的是私有协议,数据会比较安全。

最后一个问题是容灾的问题,项目可以实现多个地址之间竞速,然后选择比较好的节点来转发,这个既能解决上面的快速转发的问题,也能实现故障自动切换的问题,故障可以认为是质量最差,自然就不会选到它进行转发了。

这个也是我家里的旁路由一直在使用的项目,基本没太大问题。


http://www.kler.cn/a/428884.html

相关文章:

  • OSI七层协议——分层网络协议
  • 【STM32-学习笔记-14-】FLASH闪存
  • 网络编程-UDP套接字
  • 《在ArkTS中实现模型的可视化调试和监控:探索与实践》
  • 以租赁合同的例子讲清楚 开源协议原理和区别
  • 2024年博客之星年度评选—创作影响力评审入围名单公布
  • Vue Web开发(三)
  • 前端路径“@/“的使用和配置
  • 【第一篇】逆向实战,exe游戏 逆向实战之某网络游戏---本文仅供学习-仅供学习-----逆向程序-优雅草央千澈-逆向端游实战---逆向某很火很火的游戏实战。
  • 【Linux】WSL:Win运行Linux
  • 【深度学习】利用Java DL4J 构建和训练医疗影像分析模型
  • 【C语言--趣味游戏系列】--电脑关机整蛊小游戏
  • Brain.js(八):RNNTimeStep 实战教程 - 股票价格预测 - 实操需警慎
  • React v19 正式发布
  • Github 2024-12-04 C开源项目日报 Top9
  • 项目集成篇:springboot集成rabbitmq实现消息发送,消费
  • devops-Dockerfile+Jenkinsfile方式部署Java前后端应用
  • 如何解决maven项目使用Ctrl + /添加注释时的顶格问题
  • 校园综合服务小程序+ssm
  • Halcon 瑕疵检测原理及应用
  • Ubuntu与Centos系统有何区别?
  • 【C语言练习(1)—练习实参和形参之间参数传递】
  • 云原生多模数据库 Lindorm
  • 【OceanBase 诊断调优】—— 日志归档延迟或日志归档慢的原因和解决方法
  • 位运算(一)位运算简单总结
  • 总结的一些MySql面试题