LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

GOST:内网穿透、端口转发、多级代理一站搞定!

admin
2025年3月11日 19:20 本文热度 131

GOST是一个基于GO语言实现的多功能安全隧道工具,支持多端口监听、多级转发链、多协议支持、TCP/UDP端口转发、反向代理、透明代理、DNS解析与代理、TUN/TAP设备、负载均衡、路由控制、限速限流、准入控制、插件系统、监控指标、动态配置、Web API和GUI/WebUI等功能。

特点 

GOST是一个由GO语言编写的安全隧道软件,具备以下特性:

  • 支持多端口监听和多级转发链。
  • 支持TCP/UDP端口转发,可以实现正向代理和反向代理。
  • 提供TCP/UDP透明代理功能。
  • 支持DNS解析和代理。
  • 可以使用TUN/TAP设备。
  • 实现了负载均衡和路由控制。
  • 提供了限速限流和准入控制的功能。
  • 拥有一个插件系统,方便扩展。
  • 提供了监控指标,便于管理和调优。
  • 支持动态配置和Web API。
  • 提供了GUI/WebUI界面,方便用户操作。

GOST作为隧道有三种主要使用方式。

正向代理

作为代理服务访问网络,可以组合使用多种协议组成转发链进行转发。

Proxy

端口转发

将一个服务的端口映射到另外一个服务的端口,同样可以组合使用多种协议组成转发链进行转发。

Forward

反向代理

利用隧道和内网穿透将内网服务暴露到公网访问。

Reverse Proxy

下载安装 

二进制文件

https://github.com/go-gost/gost/releases

源码编译

git clone https://github.com/go-gost/gost.git
cd gost/cmd/gost
go build

Docker

docker run --rm gogost/gost -V

还有GUI支持。

实用功能 

用户级别的流量统计和动态限流方案

GOST 提供了一种用户级别的流量统计和动态限流的解决方案,通过观测器组件对服务的连接和流量进行周期性统计,同时通过限制器组件来限制服务的连接和流量。针对不同的认证处理器,可以结合认证器、观测器和流量限制器来实现灵活的用户级别动态限流。

Limiter

services:
  - name: service-0
    addr: :8080
    handler:
      type: http
      auther: auther-0
      observer: observer-0
      limiter: limiter-0
    listener:
      type: tcp
authers:
  - name: auther-0
    plugin:
      type: http
      addr: http://localhost:8000/auther
observers:
  - name: observer-0
    plugin:
      type: http
      addr: http://localhost:8001/observer
limiters:
  - name: limiter-0
    plugin:
      type: http
      addr: http://localhost:8002/limiter

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

Kubernetes等云原生技术使服务部署和管理更加灵活和便利,然而当一个应用运行在Kubernetes集群中时,需要对其进行调试则会很麻烦。目前比较主流的解决方案是使用Telepresence等工具,将服务的流量拦截并转发到本地服务,从而实现本地环境下的开发和调试。

通过gost的反向代理隧道将进入反向代理的流量通过隧道转发到对端。具体的方案实施就是是在Nginx服务的前面运行一个反向代理隧道服务接管原本发给Nginx服务的所有流量,Nginx服务所在的Pod中通过Sidecar方式运行反向代理隧道客户端,通过隧道连接到反向代理隧道服务。默认情况下所有流量会通过此隧道转发给集群中的Nginx服务。

Traffic Split

配置如下:

apiVersion: v1
kind: Service
metadata:
  name: proxy
spec:
  selector:
    app: proxy
  ports:
    - name: tunnel
      protocol: TCP
      port: 8421
      targetPort: tunnel
    - name: entrypoint
      protocol: TCP
      port: 80
      targetPort: entrypoint
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: proxy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: proxy
  template:
    metadata:
      name: proxy
      labels:
        app: proxy
    spec:
      restartPolicy: Always
      containers:
        - name: gost
          image: gogost/gost
          args:
            - "-L"
            - "tunnel+ws://:8421?entrypoint=:80&tunnel=nginx.local:10bc451e-59dc-4c70-999e-91a30813ac78&path=/proxy"
          ports:
            - name: tunnel
              containerPort: 8421
              protocol: TCP
            - name: entrypoint
              containerPort: 80
              protocol: TCP
          resources:
            limits:
              cpu: 1000m
              memory: 1000Mi
            requests:
              cpu: 10m
              memory: 10Mi
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  minReadySeconds: 10
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      restartPolicy: Always
      containers:
        - name: gost
          image: gogost/gost
          args:
            - "-L"
            - "rtcp://:0/:80"
            - "-F"
            - "tunnel+ws://proxy:8421?tunnel.id=10bc451e-59dc-4c70-999e-91a30813ac78&tunnel.weight=1&path=/proxy"
          resources:
            limits:
              cpu: 1000m
              memory: 1000Mi
            requests:
              cpu: 10m
              memory: 10Mi
        - name: nginx
          image: nginx:alpine
          resources:
            limits:
              cpu: 1000m
              memory: 1000Mi
            requests:
              cpu: 10m
              memory: 10Mi
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  minReadySeconds: 10
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
spec:
  rules:
    - host: nginx.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: proxy
                port:
                  name: entrypoint
          - path: /proxy
            pathType: Prefix
            backend:
              service:
                name: proxy
                port:
                  name: tunnel

反向代理隧道支持高可用性,可以通过权重参数weight来控制流量分流,实现对流量的精细管理。通过配置 Deployment 和 Ingress 资源,可以将流量通过 Websocket 协议分流到本地的 Nginx 服务。此方法与 Telepresence 相比,具有简单、侵入性低、动态无缝流量切换和对本地系统无限制等优点。

挺有意思的小工具,你也可以试试。

项目地址: https://github.com/go-gost/gost


阅读原文:原文链接


该文章在 2025/3/12 11:18:23 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved