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

发布于:2023-01-05 ⋅ 阅读:(639) ⋅ 点赞:(0)
👑 可能感兴趣
🚀『可道云』内网穿透牛刀小试,会敲键盘就能搭建的私有云网盘

在这里插入图片描述

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

  • 全程无坑!!动手搭建属于自己的内网穿透平台
  • 了解内网穿透的概念以及认识开源工具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
  • 安装.NET6 SDK可以使用.NET进行程序开发. 安装SDK之后,.NET运行环境也就安装好了.
sudo yum install dotnet-sdk-6.0
  • 单独安装.NET运行环境的命令.
sudo yum install aspnetcore-runtime-6.0
  • 检查.NET6安装情况
dotnet

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"
        }
      ]
    }
  }
}

  • 启动服务端
chmod +x FastTunnel.Server
./FastTunnel.Server

在这里插入图片描述


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 即可连接内网的服务
      }
    ]
  }
}

  • 启动客户端

在这里插入图片描述


5 远程内网电脑

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

请添加图片描述

四、总结篇

1 查看效果

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

在这里插入图片描述

2 结束语

  • 本次实操其实遇到了很多坑,网上资料步骤也都不齐全,包括官方的文档,服务端采用Docker部署也报错,总之跟着我的步骤走,其实已经带你避免我踩的坑了
  • 此次主要是用到了其端口映射这部分功能,其实这个工具还可以配置域名映射,只需要在客服端的Webs配置下即可,这部分官方文档说得也比较清楚
  • 如果对于配置或者使用有不理解的地方亦或者实操中遇到坑,欢迎留言或者私信共同探讨

网站公告

今日签到

点亮在社区的每一天
去签到