【公众号回复 “1024”,免费领取程序员赚钱实操经验】
今天给大家推荐的这个开源项目,是来自于读者的投稿,绝对是非常非常棒的福利,你们肯定会非常喜欢。
Ahri 是一个好用且便于配置的网络环境共享工具。
ta 基于 TCP,自行定义了应用层协议来经行流量转发,且对一个 TCP 连接多路复用。你可以将它理解为一个 V-P-N,但 ta 又不是仅是一个 V-P-N。
如果喜欢,请 star 一下。
Ahri 的使用场景
你一定遇到过这些令人痛苦的场景。
场景一
我是一个程序狗。我的工作内容需要使用到公司内网,但运维不靠谱,V-P-N 没法使用或者修改了一些配置没有及时使用邮件通知到我,或公司直接不提供 V-P-N。假设我已经在家了,但 Leader 告诉我有一个 BUG 需要立即处理。没有 V-P-N ,难道要我再跑到公司去处理吗?再者,我家带宽一定没有公司的带宽大,Teamviewer 用起来不卡吗?
如果你是个 Java 后端,你的项目需要使用到几个中间件,而它们(包括测试用的 DB)都在公司内网。难道你要在自己电脑上安装几个中间件然后再造一些数据出来?不麻烦吗?
场景二
两家 IT 公司进行了合作,但是员工的工作内容需要用到自己公司的内网和对方公司的内网。这时怎么办呢?员工在家的时候也完全无法使用到双方公司的内网环境。
让两家公司的运维都配置一个 OpenV-P-N(或者别的 V-P-N)?就算有条件,双方使用者配置起来需要各种参数,ta 不麻烦吗?而且部分配置冲突了需要怎么处理?
场景三
我们公司的运维对一些公网域名或 IP 进行了拦截,或者是你所在的网络环境对一些公网域名或 IP 进行了拦截。你又需要使用它们,怎么办?
Ahri 适用于但不局限于上述场景,ta 可以解决这些问题。
Ahri 的工作原理
Ahri 需要解决的问题其实是流量转发。然而并不是所有的流量都需要转发,或多次转发。所以,就请求的发起来说,流量的目的地有三种类型。
本地:在本机直接 dial TCP 请求。
ahri-server:在 ahri-server 上 dial TCP 请求。
另一个 ahri-client:在另一个 ahri-client 上 dial TCP 请求。
ahri-server & ahri-client
Ahri 服务由两个二进制程序来提供,它们是 ahri-server,ahri-client。
ahri-server 负责响应来自 ahri-client 的请求,或者转发一个 ahri-client 的请求给另一个 ahri-client。
ahri-client 负责发起请求,或者响应另一个 ahri-client 的请求。ta 有三个模式。
take:启动一个 socks5 服务来接受本地的所有 TCP 请求;再按配置好的映射文件(ahri.hosts)决定采用上面的三种流量目的地中的哪一个。
give:仅负责响应来自其他 ahri-client 的请求。
trade:同时支持上面两种的模式。
到这里,你可能已经猜到,ahri-client 与 ahri-server 的关系是注册与管理。没错,ahri-client 采用主动注册到 ahri-server 的方式来进行连接。
ahri-client 注册到 ahri-server 后,它们之间就有了一个 TCP 连接。在这个连接中会传递心跳包,数据包。
至此,我们再回顾一下上面的使用场景。假设我本机 ahri-client 是 A,我使用的 ahri-server 是 S,我公司内网(LAN 1)中有一个 ahri-client 是 B,别人公司内网(LAN 2)中有一个 ahri-client 是 C。
场景解析
场景一 & 场景二
这两个场景是最常见的 V-P-N 使用场景,只不过场景二略复杂一点。
当我在自己家时。我使用自己公司的内网时,流量走向是A -> S -> B -> LAN 1, 然后原路返回。我也可以使用对方公司的内网,流量走向是A -> S -> C -> LAN 2, 然后原路返回。我也可以正常访问任何公网资源,A -> Internet。
当我在自己公司,使用自己公司的内网时,流量走向是A -> LAN 1,然后原路返回。我也可以使用对方公司的内网,流量走向是A -> S -> C -> LAN 2, 然后原路返回。我也可以正常访问任何公网资源,A -> Internet。
你可能会问,这两种情形下,怎么做的流量转发目的地映射?上面讲过了,这里有一个配置文件 ahri.hosts。后面会说到 ta 的配置方法。
场景三
对这个场景的处理其实是我在实现场景一、二的过程中顺带写出来的衍生物。主要就是你所在的网络环境会对一些公网资源的请求进行拦截。A -> Internet 这条路不通了。所以换线为 A -> S -> Internet。
希望我对上面的场景的解决描述的足够清楚。
然后再解释上面挖的一个坑,对一个 TCP 连接经行多路复用。
Ahri Protocol
基于 TCP ,Ahri 自行定义了一个应用层协议 Ahri Protocol。ta 由 Ahri Registe Protocol 与 Ahri Frame Protocol 组成。
详细的请去项目下看。这里仅说,既然协议中出现了 Frame,就表明数据是帧化的。没错,这里的工作方式类似于 HTTP 2.0 。在这样的情形下,仅使用一个 TCP 连接就可以使 ahri-client 与 ahri-server 沟通顺畅。
Ahri 的用法
在 releases 中,已经提供了常见系统的二进制程序。
详细参数与解释仅需要在命令行下执行对应的帮助程序
客户端
ahri-client -h
服务端
ahri-server -h
开源项目作者:Gavin
开源项目地址:https://github.com/GavinGuan24/ahri/
如果喜欢,请 star 一下。
提示:如果 ahri-client 与 ahri-server 之间的网络环境是 低带宽 或 高延迟,请适当增大 -T
参数的值。
为了降低配置难度,压缩包中已包含 start.sh,stop.sh 。仅需要修改必要的参数即可在 *nix 环境中使用。至于 Windows,参考 sh 脚本即可。
今天的推荐不知道大家喜欢吗?如果你喜欢,请在文章底部留言和点赞,以表示对我的支持,你们的留言、点赞和转发关注是我持续更新的动力哦!
转载:https://blog.csdn.net/loongggdroid/article/details/102559333