一款让跨网络访问变简单的工具——turbo-tunnel

0x00 前言

你是否遇到过以下这些情况:

  • 目标服务需要通过跳板机才能访问,每次都要将端口映射到本地,然后配置hosts访问

  • 不同的服务需要配置不同的代理才能访问,管理起来很不方便

  • 有些服务需要通过嵌套代理才能访问,本地不太好配置

  • 本地开发、调试后端服务时,对于第三方依赖服务难以直连或通过同一个代理访问,而服务进程又只能配置固定的代理

总的来说,就是因为不同的开发、运维环境差异导致的跨网络访问,会影响到我们日常的开发、调试工作,而turbo-tunnel就是为了解决这一问题而诞生的。

0x01 常见的跨网络方式

HTTPS代理

HTTPS代理是最常见的代理类型,多数在内网中使用,浏览器等应用可以直接用它来访问https的网站,但一般也可以访问其它任意类型的TCP服务,如:FTP、SSH、VNC等。

SSH隧道

SSH隧道是一种常见的跨网络访问方式,一般以跳板机的形式提供。用户通过端口映射的方式访问目标网络区域里的服务。

Websocket代理

Websocket代理不是一种标准的代理协议,因此,不同实现的协议会有一些差别,难以做到兼容。但这种方式最大的优势是:可以充分利用Web较好的访问连通性,从而实现在更多场景下的跨网络访问。同时,该协议是一种类似于TCP的流式协议,可以做到全双工通信,避免了HTTP本身短连接带来的通信实时性不高问题。

另一方面,由于并非标准的代理协议,安全检查机制一般很难判断这是一个正常的Websocket服务,还是一个代理服务。通过与Nginx以及HTTPS的结合,可以进一步提升安全性,降低被检测出来的风险。

其它代理

其它常见的代理协议还有Socks4Socks5等,但使用上不及HTTPS广泛。

0x02 嵌套访问

嵌套访问是一种很常见的使用场景,例如:在公司内需要先通过HTTPS访问外网,然后再通过公网的一台SSH跳板机来访问真正的目标服务,甚至有可能还要多次穿越SSH隧道。在不借助特定工具的情况下,这种场景一般比较难以支持,就算能够支持也比较复杂。

支持嵌套访问的原理是:建立每一层的代理连接后,都会告诉它下一跳代理的地址,这样会建立一个请求链,最终将请求发送到真正的目标服务。

turbo-tunnel目前支持将HTTPSSSHWebsocketSOCKS4等代理或隧道,进行任意层级或顺序的组合,从而达到支持嵌套访问的目的。

0x03 支持配置文件

将配置存储到文件,可以避免因进程退出或系统重启导致的配置丢失问题,而且在配置内容较多时,可以有效地管理这些配置,避免混乱。如果需要将配置迁移到另一台机器,也只需要将配置文件拷贝到另一台机器即可。

turbo-tunnel使用yaml格式来管理配置,具体使用方式可以参考文档

0x04 路由管理

在多个代理并存的情况下,必然会出现不同目标服务使用不同代理的需求。这种情况就需要进行路由的管理,这和Proxifier中的规则配置是一致的。

turbo-tunnel通过在配置文件中配置路由规则,允许用户根据目标服务的域名、IP、端口等信息进行路由管理,并且可以设置规则的优先级。

0x05 使用本地的统一代理

turbo-tunnel可以在本地建立一个统一的代理服务(推荐使用http/https代理),自动将接收到请求进行路由分发。用户可以使用以下一些方式来使用这个代理服务:

  • 配置http_proxyhttps_proxy环境变量,很多命令行工具,如:curl,会读取这个环境变量并通过代理访问。

  • 浏览器可以通过配置代理服务器的地址,来将所有流量导入到本地的代理服务。

  • Windows和MacOS推荐使用Proxifier,规则可以设大一些,这样能够实现全局透明代理,应用程序不用再单独设置了。

  • Linux可以使用proxychains等工具进行流量转发,使用时在命令行前面加上proxychains,这样不会影响其它命令,较为灵活。

0x06 总结

turbo-tunnel是一款为简化复杂场景下跨网络访问的工具,提供了多种代理/隧道协议的支持,相信它能为你的工作带来帮助。

详细文档地址:https://ttun.top/

Github项目地址:https://github.com/drunkdream/turbo-tunnel

分享