• 『FastTunnel』荣获GVP的开源内网穿透工具,动手搭建属于自己的内网穿透平台


    在这里插入图片描述

    请添加图片描述
    📣读完这篇文章里你能收获到

    • 全程无坑!!动手搭建属于自己的内网穿透平台
    • 了解内网穿透的概念以及认识开源工具FastTunnel
    • 不通过第三方工具即可直接远程自己家里或者公司的电脑

    请添加图片描述

    请添加图片描述

    一、概念篇

    1 什么是内网穿透

    对于大部分人来说,自己家里的宽带是没有公网IP的。如果你想让公网上任何人都可以访问你内网的应用,则必须要采取一些手段,内网穿透在这种背景下应运而生。

    2 FastTunnel是什么?

    FastTunnel是用.net core开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问。
    与其他穿透工具不同的是:FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架,任何人都可以基于该框架二次开发,你可以直接通过nuget安装依赖进行开发,当然它也是开箱即用的工具。

    3 FastTunnel能够做什么?

    • 家中建站
    • 远程桌面
    • 代码仓库
    • 端口转发
    • 可结合其他开源的项目实现个人的私有云,后续文章会进行讲解

    请添加图片描述

    二、源码篇

    1 源码地址

    • GITEE:https://gitee.com/Hgui/FastTunnel
    • GITHUB: https://github.com/SpringHgui/FastTunnel
    • 官网:https://suidao.io

    2 源代码结构

    • FastTunnel.Api:提供对外API接口
    • FastTunnel.Core:核心模块
    • FastTunnel.Client:客户端
    • FastTunnel.Server:服务端

    在这里插入图片描述

    请添加图片描述

    三、实操篇

    1 在Relese页下载对应的发布包

    备注:此处为演示,因此直接选择发布包部署,熟悉.NET的建议直接编译源码部署

    • https://gitee.com/Hgui/FastTunnel/releases
      在这里插入图片描述

    2 服务端搭建.NET运行环境

    根据微软官方页面下载安装.Net6运行环境 Install .NET on CentOS - .NET | Microsoft Docs

    • 在安装.NET6 之前,运行以下命令将Microsoft包签名密钥添加到受信任密钥列表中,并添加Microsoft包存储库。打开终端并运行以下命令:
    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
    
    • 1
    • 安装.NET6 SDK可以使用.NET进行程序开发. 安装SDK之后,.NET运行环境也就安装好了.
    sudo yum install dotnet-sdk-6.0
    
    • 1
    • 单独安装.NET运行环境的命令.
    sudo yum install aspnetcore-runtime-6.0
    
    • 1
    • 检查.NET6安装情况
    dotnet
    
    • 1

    3 服务端运行FastTunnel.Server

    本示例的服务端为云服务器CentOS 7.x版本

    • 将上面下载的服务端Relese包下载后上传到服务端并解压
    • 本示例存放至/home/FastTunnelServer

    在这里插入图片描述

    • 修改配置文件,进入config/appsettings.json
    {
      "Serilog": {
        "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
        "MinimumLevel": {
          "Default": "Information",
          "Override": {
            "Microsoft": "Warning",
            "Microsoft.Hosting.Lifetime": "Information"
          }
        },
        "WriteTo": [
          //{
          //  "Name": "File",
          //  "Args": {
          //    "path": "Logs/log-.log",
          //    "rollingInterval": 3
          //  }
          //}
        ]
      },
      "AllowedHosts": "*",
      // 是否启用文件日志输出
      "EnableFileLog": false,
      "FastTunnel": {
        // 服务监听端口
        "BinPort": 1270,
    
        // 可选,绑定的根域名,
        // 客户端需配置SubDomain,实现 ${SubDomain}.${WebDomain}访问内网的站点,注意:需要通过域名访问网站时必选。
        "WebDomain": "",
    
        // 可选,访问白名单,为空时:所有人有权限访问,不为空时:不在白名单的ip拒绝。
        "WebAllowAccessIps": [],
    
        // 可选,是否开启端口转发代理,禁用后不处理Forward类型端口转发.默认false。
        "EnableForward": true,
    
        // 可选,当不为空时,客户端也必须携带Tokens中的任意一个token,否则拒绝登录。
        "Tokens": [ "TOKEN_FOR_CLIENT_AUTHENTICATION" ],
    
        /**
        * 访问api接口的JWT配置
        */
        "Api": {
          "JWT": {
            "ClockSkew": 10,
            "ValidAudience": "https://suidao.io",
            "ValidIssuer": "FastTunnel",
            "IssuerSigningKey": "This is IssuerSigningKey",
            "Expires": 120
          },
          "Accounts": [
            {
              "Name": "admin",
              "Password": "admin123"
            }
          ]
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 启动服务端
    chmod +x FastTunnel.Server
    ./FastTunnel.Server
    
    • 1
    • 2

    在这里插入图片描述


    4 客户端运行FastTunnel.Cient

    本示例客户端为windows x64系统

    • 将上面下载的服务端Relese包下载后解压
    • 并修改配置文件appsettings.json

    在这里插入图片描述

    {
      "Serilog": {
        "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
        "MinimumLevel": {
          "Default": "Debug",
          "Override": {
            "Microsoft": "Warning",
            "Microsoft.Hosting.Lifetime": "Information"
          }
        },
        "WriteTo": [
          //{
          //  "Name": "File",
          //  "Args": {
          //    "path": "Logs/log-.log",
          //    "rollingInterval": 3
          //  }
          //}
        ]
      },
      "FastTunnel": {
        "Server": {
          // [必选] 服务端ip/域名(来自服务端配置文件的urls参数)
          "ServerAddr": "xxx.xx.xx.x",//自己的服务器公网IP
          // [必选] 服务端监听的通信端口(来自服务端配置文件的urls参数)
          "ServerPort": 1270
        },
    
        // [可选],服务端Token,必须与服务端配置一致,否则拒绝登录。
        "Token": "TOKEN_FOR_CLIENT_AUTHENTICATION",
        /**
         * [可选] 内网web节点配置
         */
        "Webs": [
    
        ],
    
        /**
         * [可选] 端口转发 通过专用端口代理,不需要有自己的域名
         * 可穿透所有TCP上层协议
         * 远程linux示例:#ssh -oPort=12701 {root}@{ServerAddr} ServerAddr 填入服务端ip,root对应内网用户名
         * 通过服务端返回的访问方式进行访问即可
         */
        "Forwards": [
    	  {
            "LocalIp": "127.0.0.1",
            "LocalPort": 8088, // mysql数据库默认端口
            "RemotePort": 1276 // 访问 服务端ip:1276 即可连接内网的服务
          }
        ]
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 启动客户端

    在这里插入图片描述


    5 远程内网电脑

    • windows:需要配置windows可远程,另外需要将上一步中的8088端口换成3389,通过cmd的mstsc命令即可远程连接
    • linux:只需要将上一步中的8088端口换成22

    请添加图片描述

    四、总结篇

    1 查看效果

    • 打开http://{服务端公网IP}:1276
    • 此处的1276端口是上述例子中客户端配置的端口映射

    在这里插入图片描述

    2 结束语

    • 本次实操其实遇到了很多坑,网上资料步骤也都不齐全,包括官方的文档,服务端采用Docker部署也报错,总之跟着我的步骤走,其实已经带你避免我踩的坑了
    • 此次主要是用到了其端口映射这部分功能,其实这个工具还可以配置域名映射,只需要在客服端的Webs配置下即可,这部分官方文档说得也比较清楚
    • 如果对于配置或者使用有不理解的地方亦或者实操中遇到坑,欢迎留言或者私信共同探讨
  • 相关阅读:
    Git本地分支操作
    Java学习笔记 --- 作用域
    宝塔面板怎么一键安装emlog?
    java高级用法之:JNA中的回调
    .NET 8 发布的最后一个预览版Preview 7, 下个月发布RC
    【Vue3+Vite+Ts+element-plus】vue 使用 tsx语法详解
    为什么要分库分表?
    C++ 多线程编程系列一:线程管理(std::thread 对象、join、detach、传参、不可拷贝性、所有权转移)
    transformers AutoModelForMaskedLM简单使用
    关于servlet提交响应后无法跳转
  • 原文地址:https://blog.csdn.net/qq_34202873/article/details/126471012