Reverst:基于QUIC协议和HTTP3的反向隧道工具

admin 2024年5月17日19:41:26评论6 views字数 2383阅读7分56秒阅读模式
关于Reverst
Reverst是一款功能强大的反向隧道工具,Reverst由一个具备负载均衡功能的反向隧道服务器和一个服务器-客户端库组成,该工具使用Go语言开发,基于QUIC和HTTP/3实现其功能。
Reverst:基于QUIC协议和HTTP3的反向隧道工具
关于QUIC和HTTP3
QUIC,即快速UDP互联网连接协议。QUIC(Quick UDP Internet Connections)是由 Google 从2013年开始研究的基于UDP的可靠传输协议,它最早的原型是SPDY + QUIC-Crypto + Reliable UDP,后来经历了SPDY转型为2015年5月IETF 正式发布的HTTP/2.0。考虑到HTTP/2.0和TLS/1.3的发布,它的核心协议族逐步进化为现在的HTTP/3.0 + TLS/1.3 + QUIC-Transport的组合。
而HTTP3则是在保持QUIC稳定性的同时使用UDP来实现高速度(选择QUIC就是选择UDP), 同时又不会牺牲TLS的安全性。HTTP/3的传输层不是TCP,而是UDP+QUIC。
工具特性
当前版本的Reverst具备以下特性:
1、Go语言驱动:基于纯Go语言开发,使用了quic-go库;
2、兼容性;client包(Go)基于net/http标准库抽象实现;
3、负载均衡:可以在同一个隧道运行多个服务实例;
4、高性能:基于QUIC和HTTP/3实现其功能;
使用场景
Reverst主要用于将受限网络中的服务(例如受NAT网关保护的服务)公开并暴露到外网上。隧道文件需要部署在外网上,然后客户端服务器与隧道建立通信,并在目标隧道组中进行注册。隧道组是一组负载平衡的客户端服务器,通过反向隧道HTTP接口暴露在外网中。
下图所示为隧道生命周期:
Reverst:基于QUIC协议和HTTP3的反向隧道工具
工具安装

客户端

客户端安装命令:
go get go.flipt.io/reverst/client
代码构建:
go install ./client/...

服务器端

代码构建:
go install ./cmd/...

测试

Reverst使用Dagger来配置并运行一个集成测试套件:
dagger call test --source=.
测试套件会配置一个隧道,并在隧道中注册一个服务器-客户端,并通过隧道HTTP接口请求服务。
工具运行
下列参数是隧道服务器运行时的参数实例:
1、QUCI隧道监听127.0.0.1:7171;
2、HTTP服务监听127.0.0.1:8181;
3、日志记录设置为debug级别;
配置命令如下:
go run ./cmd/reverst/... -l debug -n flipt.dev.local -g examples/simple/group.yml -k examples/simple/server.key -c examples/simple/server.crt
下列命令可以运行样例服务器:
go run ./examples/simple/main.go --username user --password pass
下列命令可以向服务发送请求:
curl -H 'Host: flipt.dev.local' 127.0.0.1:8181/fo
工具使用和配置

命令行参数选项与环境变量

reverst -hCOMMAND reverstUSAGE reverst [FLAGS]FLAGS -l, --log LEVEL debug、info、warn或error (默认: INFO) -a, --tunnel-address STRING 接收隧道QUIC连接的地址 (默认: 127.0.0.1:7171) -s, --http-address STRING 处理HTTP请求的地址 (默认: 0.0.0.0:8181) -n, --server-name STRING 通过TLS识别隧道的服务器名称 (必须) -k, --private-key-path STRING path to TLS private key PEM file (必须) -c, --certificate-path STRING TLS证书PEM文件路径 (必须) -g, --tunnel-groups STRING k8s配置映射标识符或文件路径 (默认: groups.yml) -w, --watch-groups 监控隧道组源以获取更新--management-address STRING 管理API的HTTP地址--max-idle-timeout DURATION 连接可以空闲的最长时间 (默认: 1ms)--keep-alive-period DURATION keep-alive事件间隔时间(默认: 30s)

隧道组配置

reverst -g path/to/configuration.yml// alternatively:reverst -g file:///path/to/configuration.yml
或:
reverst -g k8s://configmap/default/tunnelconfig/groups.yml

配置多个身份验证策略

groups:"group-name":hosts:- "some.host.address.dev" # Host for routing inbound HTTP requests to tunnel groupauthentication:basic:username: "user"password: "pass"bearer:token: "some-token"external:scheme: "JWT"endpoint: "http://some-external-endpoint/auth/ext"
许可证协议
本项目的开发与发布遵循Apache-2.0开源许可协议。
项目地址
Reverst:
https://github.com/flipt-io/reverst/

原文始发于微信公众号(FreeBuf):Reverst:基于QUIC协议和HTTP3的反向隧道工具

 

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月17日19:41:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Reverst:基于QUIC协议和HTTP3的反向隧道工具https://cn-sec.com/archives/2744463.html

发表评论

匿名网友 填写信息