1 Star 0 Fork 82

playgemes / fastnat

forked from 武松 / fastnat 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

FAST NAT 全协议内网穿透

FAST NAT是基于WeNAT的扩展版,支持HTTP、TCP、UDP、WebSocket等协议。 简单的说,就是可以给你的内网电脑分配一个公网IP和端口 例如:

123.1.1.1:8888 -> 192.168.1.123:3306

当外网服务器的8888端口收到数据包后,会转发给内网的3306端口,从而实现穿透。服务器做了个中转,和传统的P2P穿透不同。

应用场景

  • 本地发布网站
  • 远程桌面
  • SSH 本地服务器
  • 访问本地mysql
  • 访问本地redis
  • 访问本地mongodb

联系方式

开发语言

  • 服务端、web网站:node.js
  • 客户端:nw.js + node.js

TCP协议和流程

流程图

内外网代理流程

  • 内网和外网建立协议通道,用于主动连接通知
  • 外网客户端连接服务器,并且分配一个id,保存起来
  • 通知内网客户端,并且告诉id,由内网主动发起连接
  • 内网连接代理目标
  • 内网连接服务器,并且传入id,和外网进行绑定
  • 映射内外网的socket

断线和报错处理

  • 任何一方报错,终端所有端口监听以及所有的连接
  • 由客户端再次发起连接请求,并且分配一个随机端口或者继续使用上次的外网端口

TCP接口

  • 协议类型

    协议为JSON字符串

  • 安全性

    在第一次连接服务器的时候,需要带上用户的token,服务器进行校验合法后开放2个端口提供给后续使用。 在后续的流程中,不做任何校验。虽然有安全风险,但是常见的TCP应用:Mysql、Mongodb、Redis等,都有用户机制可以保护。

  • 协议类型

    暂定三种协议

    类型
    TCP
    UDP
    HTTP
  • 和通信服务器连接

    • 基本信息响应

      直接连接通信服务器端口8888,不用发送任何数据,成功后响应如下数据

      字段 类型 说明
      id string(8) 本次会话的id
      outId string(8) 外网socket 会话id
      intPort int(5) 内网连接的端口,5位数的端口,30000-65535
      outPort int(5) 外网连接的端口
      command string 操作命令
      protocol string 协议类型
      • 举个栗子🌰
       {
         id: 'CucfFpk7',
         intPort: 61289,
         outPort: 59918,
         command: 'start_proxy',
         outId: 'GpNYO5KW' 
       }
    • 主动连接服务器

      收到基本信息响应后,拿到内网的端口建立一个TCP连接,并且带上outId, 第一个数据包为协议包,后续的数据就是正常的转发

      字段 类型 说明
      outId string(8) 外网socket 会话id
      • 举个栗子🌰
       {
         outId: 'GpNYO5KW' 
       }

空文件

简介

全协议内网穿透神器,支持TCP、UDP、HTTP 展开 收起
JavaScript
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
JavaScript
1
https://gitee.com/playgemes/fastnat.git
git@gitee.com:playgemes/fastnat.git
playgemes
fastnat
fastnat
master

搜索帮助

14c37bed 8189591 565d56ea 8189591