嵌入式学习交流Q群 679912988

内网穿透 基于FastTunnel在windows平台部署

内网穿透简介

内网穿透(NAT穿透)是一种技术,它允许外部网络访问位于内网(局域网)中的设备或服务。
例如家中路由器下的设备是没有公网IP的,出门后不能够直接访问家中的电脑等网络设备,只能通过第三方软件或服务来实现连接。
而内网穿透就是通过端口映射,隧道技术,中继转发,实现公网对家中路由器下的内网设备进行访问。

FastTunnel简介

FastTunnel是一款高性能跨平台内网穿透工具,使用它可以实现将内网服务暴露到公网供自己或任何人访问。
与其他穿透工具不同的是,FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架。
你可以通过引用FastTunnel.Core的nuget包构建出自己的穿透应用,并针自己所需的业务扩展功能。

项目地址 https://github.com/FastTunnel/FastTunnel

项目文档 https://docs.opentask.run/docs/fasttunel/getting-started

大致的原理就是通过拥有公网IP的设备作为跳板,达到让内网设备已配置的端口拥有公网IP的能力。

FastTunnel部署

通过实现外网访问内网的 Windows 电脑远程桌面服务来展示部署过程。

具体要求

  • 拥有公网IP的 Windows 系统的服务器设备(如阿里云ECS示例),运行FastTunnel.server作为跳板。
  • 路由器下的内网的 Windows 系统的客户端设备(如公司里的电脑),运行FastTunnel.client作为被访问的对象。
  • 不在同一内网的 Windows 系统的测试设备(如家里的电脑),什么都不需要安装。

要求在公司里面的电脑能够通过 windows 自带的远程桌面连接,访问家里的电脑

前期准备

这里我选择的版本是v2.1.1

服务器设备下载 FastTunnel.Server.win-x64.tar.gz
客户端设备下载 FastTunnel.Client.win-x64.tar.gz

测试设备无需下载

地址链接 https://github.com/FastTunnel/FastTunnel/releases

服务器部署

服务器设备即云服务器实例下载FastTunnel.Server.win-x64.tar.gz后, 解压修改config目录下的appsettings.json文件,修改内容如下

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "WriteTo": [
    ]
  },
  "AllowedHosts": "*",
  // 是否启用文件日志输出
  "EnableFileLog": false,
  "FastTunnel": {
    // 服务监听端口
    "BinPort": 1270,

    // 可选,绑定的根域名,
    // 客户端需配置SubDomain,实现 ${SubDomain}.${WebDomain}访问内网的站点,注意:需要通过域名访问网站时必选。
    "WebDomain": "xiaopijiang.cc",

    // 可选,访问白名单,为空时:所有人有权限访问,不为空时:不在白名单的ip拒绝。
    "WebAllowAccessIps": [  ],

    // 可选,是否开启端口转发代理,禁用后不处理Forward类型端口转发.默认false。
    "EnableForward": true,

    // 可选,当不为空时,客户端也必须携带Tokens中的任意一个token,否则拒绝登录。
    "Tokens": [ "TOKEN_FOR_CLIENT_AUTHENTICATION" ],

  }
}

  • FastTunnel.BinPort 是FastTunnel内部服务器与客户端的连接通讯使用的端口
  • FastTunnel.Tokens 相当于是FastTunnel客户端连接服务器时的密码

双击运行FastTunnel.Server.exe 成功运行后如下图所示

界面

客户端部署

客户端设备即公司电脑下载FastTunnel.Client.win-x64.tar.gz后, 解压修改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": "yulc.fun",
      // [必选] 服务端监听的通信端口(来自服务端配置文件的urls参数)
      "ServerPort": 1270
    },

    // [可选],服务端Token,必须与服务端配置一致,否则拒绝登录。
    "Token": "TOKEN_FOR_CLIENT_AUTHENTICATION",
    /**
     * [可选] 内网web节点配置
     */
    "Webs": [
      {
        // [必选] 内网站点所在内网的ip
        "LocalIp": "127.0.0.1",
        // [必选] 内网站点监听的端口号
        "LocalPort": 8090,

        // [必选] 子域名, 访问本站点时的url为 http://${SubDomain}.${WebDomain}:${ServerPort}
        "SubDomain": "test"

        // [可选] 附加域名,需要解析CNAME或A记录至当前子域名
        // "WWW": [ "www.abc.com", "test111.test.cc" ]
      }
    ],

    /**
     * [可选] 端口转发 通过专用端口代理,不需要有自己的域名
     * 可穿透所有TCP上层协议
     * 远程linux示例:#ssh -oPort=12701 {root}@{ServerAddr} ServerAddr 填入服务端ip,root对应内网用户名
     * 通过服务端返回的访问方式进行访问即可
     */
    "Forwards": [
      {
        // [必选] 内网服务所在主机ip
        "LocalIp": "127.0.0.1",
        // [必选] 内网服务监听端口 windows远程桌面端口为3389
        "LocalPort": 3389,
        // [必选] 服务端端口 访问 服务端ip:1274 即可实现远程window桌面
        "RemotePort": 20000,
        // [可选] 通讯协议,可选值TCP,UDP,默认值TCP
        "Protocol": "TCP"
      },
      {
        "LocalIp": "127.0.0.1",
        "LocalPort": 8080, // mysql数据库默认端口
        "RemotePort": 1275 // 访问 服务端ip:1275 即可连接内网的mysql服务
      },
      {
        "LocalIp": "127.0.0.1",
        "LocalPort": 80, //
        "RemotePort": 21222
      }
    ]
  }
}

  • FastTunnel.Server.ServerAddr 是FastTunnel服务器的公网IP地址或域名
  • FastTunnel.Server.ServerPort 是FastTunnel服务器的端口,和服务器的配置FastTunnel.BinPort相同
  • FastTunnel.Tokens 相当于是FastTunnel客户端连接服务器时的密码,匹配服务器的配置FastTunnel.Tokens其中一个即可
  • FastTunnel.Forwards.LocalIp 本地需要被透传的IP 本机为127.0.0.1
  • FastTunnel.Forwards.LocalPort 本地需要被透传的端口 远程桌面端口为3889
  • FastTunnel.Forwards.RemotePort 映射到服务器的端口 20000 也就是说访问 yulc.fun:20000 等价于 访问127.0.0.1:3389

双击运行FastTunnel.Client.exe 成功运行后如下图所示

界面

测试设备登录

测试设备即家里电脑打开远程桌面连接,输入服务器ServerAddr:客户端RemotePort 即可访问公司电脑

成功运行后如下图所示

界面

补充说明

错误的配置json格式,会导致运行时的闪退,请仔细检查逗号等标点符号

使用内网穿透暴露3389端口的,一定要注意,电脑的密码一定要设置复杂一点,避免被黑客破解计算机登录密码,造成损失。

使用内网穿透暴露3389端口的,一定要注意,电脑的密码一定要设置复杂一点,避免被黑客破解计算机登录密码,造成损失。

使用内网穿透暴露3389端口的,一定要注意,电脑的密码一定要设置复杂一点,避免被黑客破解计算机登录密码,造成损失。

搭配开机自动运行进程守护脚本,YYDS!

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐