Skip to content

博客

利用反向代理隧道实现k8s中服务的本地调试

当前的容器,Kubernetes等云原生技术使我们的服务部署和管理更加灵活和便利,然而任何技术有利就会有弊,当一个应用运行在Kubernetes集群中时,如果需要对其进行调试则会很麻烦。

目前比较主流的解决方案是使用Telepresence等工具,将服务的流量拦截并转发到本地服务,从而实现本地环境下的开发和调试。下面我们将利用反向代理隧道来实现类似的功能。

GOST.PLUS-公共反向代理服务

反向代理隧道是GOST中新增的一个较大功能,同时也是一个很重要的功能,借助于反向代理和内网穿透,可以很方便的将内网Web服务暴露到公网,随时随地都能访问。

为了能够对此功能进行更全面的测试,同时也为了能够给需要临时暴露内网服务的用户提供一种快捷的方式,特公开推出GOST.PLUS公共反向代理测试服务。此服务面向所有用户开放,无需注册。

串口重定向

串口目前在个人电脑主机上基本不存在了,但在一些小型设备特别是工业设备和工控机上还是能够看到这些接口。由于串口通信的方式和我们平时所使用的TCP/IP有很大差异,因此在调试和分析基于串口的通讯协议时所用的方法也会有所不同。

GOST在3.0.0-rc8之后的版本中增加了串口重定向或者也可以称做串口端口转发功能,可以将本地串口数据转发给TCP服务,或者将TCP服务的数据转发给本地串口,也可以将本地串口转发到远程主机的串口。利用串口转发可以实现两个功能:串口远程通讯和串口通讯数据监控。

反向代理隧道实战

上一篇博文中,对反向代理和内网穿透做了基本的介绍。本篇将通过具体应用案例更加直观的展示反向代理隧道的使用。

反向代理隧道是将反向代理和内网穿透两个功能相结合一种技术手段,这两个概念之间其实没有必然的联系,反向代理可以不使用内网穿透,内网穿透也并不一定是为了实现反向代理,只不过很多情况下我们需要这两个功能组合在一起使用。例如一般的家庭网络或公司网络可能没有公网IP,因此无法通过公网直接访问,这个时候就需要用到内网穿透,通过一台具有公网IP的机器来间接的访问内网的服务。

反向代理与内网穿透

反向代理也是代理服务的一种,我们通常使用的代理服务,例如HTTP/SOCKS5代理,其代理的目标是客户端,代理服务代替客户端与所访问的服务器建立连接,而反向代理服务代理的目标是服务器,因此像HTTP/SOCKS5这种代理服务也被称作正向代理。二者的主要却别在于正向代理中客户端是知道代理服务的存在,而反向代理中客户端(甚至是服务端)是不知道代理服务的存在,在客户端看来代理服务就是我真正要访问的服务。

从某种角度来看,反向代理与端口转发是一样的,二者都是在两个端口之间建立映射关系,将数据从一个端口转发到另外一个端口,只不过反向代理会利用转发的数据进行更精确的控制,而端口转发一般不会依赖于数据的内容,仅仅是纯粹的端到端的转发行为。GOST中的反向代理就是基于端口转发来实现的。

基于TUN设备的VPN组网

GOST最初是在v2.9版本中引入对TUN(和TAP)设备的支持,在v3版本(beta.4)中又将实现方式由songgao/water库(TAP未变化)改为了wireguard-go,并且增加了心跳和认证机制。

GOST中TUN设备的设计思想是简单轻量,因此没有添加过于复杂的配置,对数据也没有做过多的处理。只要能够满足一些特定的使用场景就达到目的了,如果需要更加复杂的应用完全可以通过wireguard来实现。

TUN设备可以有很多的用处,比较多的可能是用来构建VPN,这里就以讲一下基于GOST的TUN设备VPN组网方案。

流量控制-分流器

所谓的分流是指按照一定的规则对流量进行划分,再对划分后的流量执行相应的操作,以达到某种程度的流量控制。

举一个现实中的例子,对于一个网络管控比较严格的公司,流量大概可以分为以下几类:

  • 非法流量 - 不被允许的流量,例如被公司禁止访问的服务,直接访问会被拒绝。
  • 内网流量 - 例如访问公司内部服务器,这种流量只能在公司内网才有效,不能被转发到外网。
  • 外网流量 - 例如访问外网服务,可能需要通过公司的代理服务器才能访问。

GOST v3动态分流功能的一种实现方式

原文地址:https://groups.google.com/g/go-gost/c/b9Z0BcqUArw

分流是指根据一定的规则让需要通过转发链的请求走转发链,不需要走转发链则绕过转发链。分流在GOST v3中通过分流器来实现(bypass),具体的使用方式可以参考https://gost.run/concepts/bypass/。

GOST v3中新增了一个记录器模块(https://gost.run/concepts/recorder/),可以看作是另外一种日志记录方式,有别于日志的是记录器可以针对特定的数据进行记录,例如记录服务的所有访问用户IP,所有访问的目标地址等。

分流器和记录器在GOST v3版本中都增加了对redis服务的支持,对于分流器可以从redis中动态加载规则,对于记录器则可以将数据记录到redis服务中。

利用以上的特性,就可以实现类似与COW(https://github.com/cyfdecyf/cow)所提供的自动分流功能,默认情况下请求不使用转发链,当请求失败后切换为使用转发链。