ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

内网穿透方案

2021-08-01 02:00:22  阅读:248  来源: 互联网

标签:方案 gotunnel 端口 TCP 穿透 连接 服务端 客户端


内网穿透通道

项目地址:https://gitee.com/arthurhong7/gotunnel.git

研究背景

有多个内网服务应用与一个外网应用,需要通过外网应用开放多个内网服务给外网使用,需要集成内网穿透通道代码。

要求

  1. 支持TCP、HTTP、WS请求
  2. 支持高并发

基本架构

  1. gotunnel服务端(公网服务):
  1. 监听对外端口,把请求数据转发到通道
  2. 监听通道端口,与客户端建立数据通道
  1. gotunnel客户端(内网服务):
  1. 连接数据通道,建立数据通道
  2. 转发数据至服务端口

流程图

时序图

主要机制

端口分配:

gotunnel客户端启动时发送附带配置密钥的HTTP请求通道接口,gotunnel服务端分配出不重复的外网客户端通道端口、与内网服务通道端口,并且返回配置的连接数N

端口分配图

多路复用/连接创建:

  1. 背景:当客户端频繁使用短连接请求时,频繁创建与销毁TCP连接开销很大导致性能降低,所以提出对gotunnel服务端与客户端之间TCP连接复用机制。
  2. 选型 yamux 包来实现
    1. 原理:把一个TCP连接(session)虚化成多个异步数据流(stream)

      多路复用原理图
    2. yamux自带心跳检测
  3. 机制:把N个TCP连接虚拟成N个session,接收到用户请求后再动态创建stream连接。

    连接创建逻辑图

测试结果:

  1. websocket测试:
    ws测试结果图
  2. HTTP请求测试
    HTTP测试结果图1
    HTTP测试结果图2

TODO:

  1. 安全性考虑:服务端可加上socks5认证等

标签:方案,gotunnel,端口,TCP,穿透,连接,服务端,客户端
来源: https://www.cnblogs.com/arthurhong/p/15085834.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有