随着个人数字生活的发展,随时随地能够访问是非常重要的需求,这也是傲空间最为重视的需求之一。典型的场景就是用户在家外面用手机随时访问家里的智能家居设备、个人数据等。GT 是傲空间团队开发的一个支持点对点直连(P2P)和互联网中转的反向代理开源项目[1]。
技术背景知识
反向代理是位于一个或多个服务器前面的服务器,其将客户端(例如 Web 浏览器)请求转发到这些后面提供具体服务的服务器。反向代理通常用于帮助提高安全性、性能和可靠性[2]。通过反向代理实现两个内网的设备之间的安全访问的原理是,在公网上部署一个代理服务器,内网中的服务与代理服务器建立安全网络通道,代理服务器将客户端的访问请求转发给内网中的服务,并将服务的响应内容返回给客户端,实现两个不同内网的设备之间的通信,也就实现了内网穿透。
(资料图)
反向代理结合安全鉴权和防护,现实中有很多应用场景,比如:
在开发过程中,让远程办公人员访问本地开发环境,协作调试和测试。
在没有公网 IP 或者无法修改路由器设置的情况下,可以通过反向代理让内网中的设备(如智能家居设备、树莓派、NAS 服务器、摄像头等)通过公网进行安全的访问,实现远程控制和管理。
围绕企业需求,实现外出办公人员和合作伙伴通过公网安全的访问内部服务(如OA、ERP、CRM 等)。
目前,市面上有一些相关的开源项目和产品,其中比较知名的有 frp[3] 和 ngrok[4]。它们的功能和设计基本上都是面向单一用户的并且性能还可以进一步提高,于是就有了 GT 。
GT 简介
GT 是一个开源的反向代理项目,旨在提供高速、稳定的跨网络解决方案。它支持点对点直连和互联网中转,并注重隐私保护和性能优化。GT 能够支持多种基于 TCP 的通信协议转发,以满足各种不同的应用场景需求。
GT 具有以下设计特点:
注重隐私保护,在保证满足功能实现需要的情况下,最少化 server 端对数据包的分析,例如:基于 TCP 连接的实现方式,应用层 HTTP 协议传输只分析第一个数据包的 HTTP 协议头的目标数据,不作任何多余分析,将后续数据直接转发。
注重性能,在代码实现上,倾向于采用性能更高的设计,例如:修改标准库来实现减少内存分配和复制的设计方案。
基于 WebRTC 实现的点对点连接功能,支持所有支持 WebRTC 的平台,例如:iOS,Android,浏览器等。
目前已经实现的主要功能有:
支持 HTTP(S)、WebSocket(S)、SSH、SMB 等基于 TCP 协议的通信协议转发
支持 WebRTC 点对点连接
多用户功能
支持多种用户验证方式:API服务、本地配置
每个用户独立配置
限制用户速度
限制客户端连接数
验证失败达一定次数后,拒绝访问一段时间
服务端与客户端之间通信采用 TCP 连接池
保持命令行参数与 yaml 配置参数一致
支持日志上报到 Sentry 服务
GT 架构设计
与 frp 的性能对比
那么,GT 的网络性能如何呢?它是否能够与 frp 相媲美甚至超越呢?为了给大家一个更直观的答案,我们进行了 HTTP 转发的压力测试,比较了 GT 和 frp 的吞吐量、网络延迟和内存占用。
测试分别在两种环境中进行,分为本地测试和服务器测试。本地测试,将 GT Server 与 GT Client 都运行在同一台个人电脑;服务器测试则把 GT Server 与 GT Client 分别运行在不同的云服务器上。GT 与 frp 使用等效的配置参数,连接池最大3个连接。
本地测试环境
服务器测试环境
每秒完成的请求数,本地测试结果显示 GT 是 frp 的%,服务器测试结果显示 GT 是 frp 的%
每秒传输的字节数(MB/s),本地测试结果显示 GT 是 frp 的%,服务器测试结果显示 GT 是 frp 的%
平均延迟(ms),本地测试结果显示 GT 是 frp 的%,服务器测试结果显示 GT 是 frp 的%
内存RSS(byte),本地测试结果显示 GT 是 frp 的% %,服务器测试结果显示 GT 是 frp 的% %
无论是在本地测试还是在服务器测试中,GT 都可以实现最高的请求数和传输速率,最低的延迟和内存占用。这说明 GT 在承受高并发和高流量的情况下仍然可以保持稳定和高效的运行。
综上所述,我们可以得出以下结论:
GT 的网络性能超越了 frp ,GT 都可以实现最低的延迟和最高的吞吐量。
GT 在压力测试中也表现出了极强的稳定性和可靠性,可以承受高并发和高流量的场景,不会出现性能下降或者崩溃的情况。
GT 是一个值得你尝试和使用的反向代理工具,它可以帮助你实现内网穿透的功能,让你的内网服务更加便捷和高效地通过公网访问。
如果你对 GT 感兴趣,欢迎你访问 GT 的 GitHub 仓库:/ao-space/gt,给 GT 一个 Star。如果你在使用 GT 的过程中遇到了任何问题或者有任何建议,欢迎你在 GitHub 上提出 Issue 或者 Pull Request,我们会及时地回复和处理。也欢迎你在社交媒体上分享你对 GT 的使用体验和感受,让更多的人知道并使用 GT。
感谢你阅读这篇文章,希望你能够喜欢并支持 GT,让 GT 成为一个更好的开源项目。谢谢!
参考文献
GitHub - ao-space/gt: Focus on high-performance, low-latency intranet penetration solutions:/ao-space/gt
什么是反向代理?|代理服务器介绍:/zh-cn/learning/cdn/glossary/reverse-proxy/
GitHub - fatedier/frp: A fast reverse proxy :/fatedier/frp
ngrok - Online in One Line:/
关键词: