您现在的位置是:博客 > 文章详情文章详情
Docker 部署FastTunnel,实现内网穿透
一、前言
最近在学习搭建Elasticsearch集群,但是发现云服务(2核4G)资源根本就不够用,部署上去就直接宕机了。想着服务器资源太贵, 家里刚好有一台64G内存的闲置电脑。不如做一个内网穿透,可以远程访问。工作学习两不误。其实目前市面上已经有很多穿透工具了,比如向日葵~~ ,但是奈何带宽太小了,免费的才1M~~~
二、什么是 FastTunnel
FastTunnel 是用.net core开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问。
与其他穿透工具不同的是:FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架,任何人都可以基于该框架二次开发,你可以直接通过nuget安装依赖进行开发,当然它也是开箱即用的工具。使用起来很方便。gitee源码地址如下:
三、FastTunnel能做什么?
- 家中建站
- 远程桌面
- svn代码仓库
- 端口转发
- iot物联网
等等场景,不局限以上
四、开始搭建内网穿透
1、前置环境
本次搭建使用的环境是 linux 平台下,Centos7.9 操作系统。流程如下:
IP地址 | 服务器种类 | 需要开通端口(自定义) | 描述 |
---|---|---|---|
81.70.185.231 | 云服务器 | 3000 | 端口3000:http监听端口 端口3110-3112:客户端通信端口 |
192.168.3.110 | 家庭主机(master) | 3000、3110 | |
192.168.3.111 | 家庭主机(node1) | 3000、3111 | |
192.168.3.112 | 家庭主机(node2) | 3000、3112 |
2、预期实现效果
访问地址
81.70.185.231:3110
,穿透到内网master
主机节点访问地址
81.70.185.231:3111
,穿透到内网node1
主机节点访问地址
81.70.185.231:3112
,穿透到内网node2
主机节点
3、安装FastTunnel.Server(云服务器)
# 1、创建目录(存放配置文件)
mkdir -p /root/FastTunnel/config
# 2、将 appsettings.json 放在 /root/FastTunnel/config 目录下,文件的内容下面会贴出。
# 3、运行
docker run -d \
--name fasttunnel.server \
--restart always \
--volume /root/FastTunnel/config:/app/config \
--volume /root/FastTunnel/Logs:/app/Logs \
-p 3000:3000 -p 3110-3112:3110-3112 registry.cn-hangzhou.aliyuncs.com/converts/fasttunnel.server:20240205
appsettings.json 文件内容如下:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
// Http&客户端通讯端口
**"urls": "http://*:3000",**
// 是否启用文件日志输出
"EnableFileLog": false,
"FastTunnel": {
// 可选,绑定的根域名,
// 客户端需配置SubDomain,实现 ${SubDomain}.${WebDomain}访问内网的站点,注意:需要通过域名访问网站时必选。
**"WebDomain": "81.70.185.231",**
// 可选,访问白名单,为空时:所有人有权限访问,不为空时:不在白名单的ip拒绝。
"WebAllowAccessIps": [],
// 可选,是否开启端口转发代理,禁用后不处理Forward类型端口转发.默认false。
"EnableForward": true,
// 可选,当不为空时,客户端也必须携带Tokens中的任意一个token,否则拒绝登录。
**"Tokens": [ "37A5CBAA-AB1E-49A4-8B6E-1D041087458C" ]**
}
}
这里需要对配置文件做些修改,如下所示:
4、安装FastTunnel.Client(家庭主机)
- master
- node1
- node2
# 1、创建目录(存放配置文件)
mkdir -p /root/FastTunnel/config
# 2、将 appsettings.json 放在 /root/FastTunnel/config 目录下,文件的内容下面会贴出。
# 3、运行
docker run -d \
--name fasttunnel.client \
--restart always \
--volume /root/FastTunnel/config/appsettings.json:/app/appsettings.json \
--volume /root/FastTunnel/Logs:/app/Logs \
-p 3000:3000 -p 3110:3110 registry.cn-hangzhou.aliyuncs.com/converts/fasttunnel.client:20240205
# 1、创建目录(存放配置文件)
mkdir -p /root/FastTunnel/config
# 2、将 appsettings.json 放在 /root/FastTunnel/config 目录下,文件的内容下面会贴出。
# 3、运行
docker run -d \
--name fasttunnel.client \
--restart always \
--volume /root/FastTunnel/config/appsettings.json:/app/appsettings.json \
--volume /root/FastTunnel/Logs:/app/Logs \
-p 3000:3000 -p 3111:3111 registry.cn-hangzhou.aliyuncs.com/converts/fasttunnel.client:20240205
# 1、创建目录(存放配置文件)
mkdir -p /root/FastTunnel/config
# 2、将 appsettings.json 放在 /root/FastTunnel/config 目录下,文件的内容下面会贴出。
# 3、运行
docker run -d \
--name fasttunnel.client \
--restart always \
--volume /root/FastTunnel/config/appsettings.json:/app/appsettings.json \
--volume /root/FastTunnel/Logs:/app/Logs \
-p 3000:3000 -p 3112:3112 registry.cn-hangzhou.aliyuncs.com/converts/fasttunnel.client:20240205
appsettings.json 文件内容如下:
- master节点的appsettings.json
- node1节点的appsettings.json
- node2节点的appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
// 是否启用文件日志输出
"EnableFileLog": true,
"ClientSettings": {
"Server": {
// [必选] 服务端ip/域名(来自服务端配置文件的urls参数)
**"ServerAddr": "81.70.185.231",**
// [必选] 服务端监听的通信端口(来自服务端配置文件的urls参数)
**"ServerPort": 3000**
},
// [可选],服务端Token,必须与服务端配置一致,否则拒绝登录。
**"Token": "37A5CBAA-AB1E-49A4-8B6E-1D041087458C",**
/**
* [可选] 内网web节点配置
*/
"Webs": [
],
/**
* [可选] 端口转发 通过专用端口代理,不需要有自己的域名
* 可穿透所有TCP上层协议
* 远程linux示例:#ssh -oPort=12701 {root}@{ServerAddr} ServerAddr 填入服务端ip,root对应内网用户名
* 通过服务端返回的访问方式进行访问即可
*/
"Forwards": [
{
// [必选] 内网服务所在主机ip
**"LocalIp": "192.168.3.110",**
// [必选] 内网服务监听端口,Linux 远程的端口是22、 windows远程桌面端口为3389
"LocalPort": 22,
// [必选] 服务端端口 访问 服务端ip:3110 即可实现远程访问内网主机的Linux
**"RemotePort": 3110,**
// [可选] 通讯协议,可选值TCP,UDP,默认值TCP
"Protocol": "TCP"
}
]
}
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
// 是否启用文件日志输出
"EnableFileLog": true,
"ClientSettings": {
"Server": {
// [必选] 服务端ip/域名(来自服务端配置文件的urls参数)
**"ServerAddr": "81.70.185.231",**
// [必选] 服务端监听的通信端口(来自服务端配置文件的urls参数)
**"ServerPort": 3000**
},
// [可选],服务端Token,必须与服务端配置一致,否则拒绝登录。
**"Token": "37A5CBAA-AB1E-49A4-8B6E-1D041087458C",**
/**
* [可选] 内网web节点配置
*/
"Webs": [
],
/**
* [可选] 端口转发 通过专用端口代理,不需要有自己的域名
* 可穿透所有TCP上层协议
* 远程linux示例:#ssh -oPort=12701 {root}@{ServerAddr} ServerAddr 填入服务端ip,root对应内网用户名
* 通过服务端返回的访问方式进行访问即可
*/
"Forwards": [
{
// [必选] 内网服务所在主机ip
**"LocalIp": "192.168.3.111",**
// [必选] 内网服务监听端口,Linux 远程的端口是22、 windows远程桌面端口为3389
"LocalPort": 22,
// [必选] 服务端端口 访问 服务端ip:3111 即可实现远程访问内网主机的Linux
**"RemotePort": 3111,**
// [可选] 通讯协议,可选值TCP,UDP,默认值TCP
"Protocol": "TCP"
}
]
}
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
// 是否启用文件日志输出
"EnableFileLog": true,
"ClientSettings": {
"Server": {
// [必选] 服务端ip/域名(来自服务端配置文件的urls参数)
**"ServerAddr": "81.70.185.231",**
// [必选] 服务端监听的通信端口(来自服务端配置文件的urls参数)
**"ServerPort": 3000**
},
// [可选],服务端Token,必须与服务端配置一致,否则拒绝登录。
**"Token": "37A5CBAA-AB1E-49A4-8B6E-1D041087458C",**
/**
* [可选] 内网web节点配置
*/
"Webs": [
],
/**
* [可选] 端口转发 通过专用端口代理,不需要有自己的域名
* 可穿透所有TCP上层协议
* 远程linux示例:#ssh -oPort=12701 {root}@{ServerAddr} ServerAddr 填入服务端ip,root对应内网用户名
* 通过服务端返回的访问方式进行访问即可
*/
"Forwards": [
{
// [必选] 内网服务所在主机ip
**"LocalIp": "192.168.3.112",**
// [必选] 内网服务监听端口,Linux 远程的端口是22、 windows远程桌面端口为3389
"LocalPort": 22,
// [必选] 服务端端口 访问 服务端ip:3112 即可实现远程访问内网主机的Linux
**"RemotePort": 3112,**
// [可选] 通讯协议,可选值TCP,UDP,默认值TCP
"Protocol": "TCP"
}
]
}
}
5、实际效果
6、官方文档
相关文章
目录
推荐阅读
-
.net 项目发布中的 Debug和Release的区别是什么?
![.net 项目发布中的 Debug和Release的区别是什么?](/ArticleFile/2023-09-09/93b4042444ff40aba6e7c913250e425f.png '.net 项目发布中的 Debug和Release的区别是什么?') 一、Debug 版本 Debug 是“调试”的意思,
-
Vs2022 设置类、接口默认创建的模板
一、前言 在团队协作中,每个人都负责这自己模块的代码。为了清楚的分辨代码是谁开发的, 我们往往会在类、接口增加一个额外的注释信息,例如:创建人、创建时间、描述等等。所以有些时候,我们希望 visual Studio 在创建类,接口的时候,生成的代码文件能更丰富一下, 例如:自动增加基础的注释功能, 类文件自动增加 p
-
如何使用 vs 2022 远程调试 Linux系统中的Docker容器项目
一、前言 在项目上,总会遇到一些奇怪的问题,例如:“在本地好好的, 为什么部署到线上就不行” 等等,这样的问题时长困扰着我们。但是作为一个资深的码农,“远程调试” 是一个不可或缺的手段。下面就来看下如果使用 vs 在本地远程调试部署在Linux系统中,运行在Docker容器中的项目吧。 二、远程调试 调试的前提,
-
移除Linux系统启动时的等待时间
一、前言 VMware 虚拟机中安装了很多Linux 系统,每次启动的时候, 都卡在系统选择的界面上,除非手动选择, 否则要等很久才会进入系统,如下图所示: ![移除Linux系统启动时的等待时间](/ArticleFile/2024-06-24/e3ab02212cc946bd9c23159895177fb3.png '移除Linux系统启动时的等待时间') 二、关闭系统等待的事件 我们
-
GitLab 私有化部署
一、GitLab 概述 git作为目前最流行的代码管理工具,已经成为了程序员必备的技能。虽然目前有 github(对国人不太友好) 、gitee 两个比较大的代码托管平台。但是出于各种原因,搭建自己的私有代码平台也成了一部分开发人员的选择。针对这种需求,这里为大家介绍的是其中的佼佼者gitlab,也是我们公司内部正在使用的一个代码管理平台。 GitLab是一个基于Git的开源代码管理平台,它
-
云服务器购买按量付费实例,并搭建私有网络图解
一、前言 最近在自学 k8s 集群化部署, 奈何云服务器包年包月太贵了, 学习成本飙升。好在各大云服务商支持按量计费 , 接下来就带大家一起过一下购买流程,并且使用私有网络。 二、私有网络 在购买云服务器之前,先了解下什么是私有网络。官网给出的解释是:私有网络(Virtual Private Cloud,VPC)是一块在云服务器上自定义的逻辑隔离网络空间,可以使云服务器, 云数据库资源构建逻
-
Docker 部署FastTunnel,实现内网穿透
一、前言 最近在学习搭建Elasticsearch集群,但是发现云服务(2核4G)资源根本就不够用,部署上去就直接宕机了。想着服务器资源太贵, 家里刚好有一台64G内存的闲置电脑。不如做一个内网穿透,可以远程访问。工作学习两不误。其实目前市面上已经有很多穿透工具了,比如向日葵~~ ,但是奈何带宽太小了,免费的才1M~~~ 二、什么是 FastTunnel FastTunnel 是用.net
-
IP地址和子网掩码的关系
一、概述 IP地址(Internet Protocol Address)和子网掩码(Subnet Mask)是计算机网络中两个核心的概念,它们共同工作以确保数据能够正确地在复杂的网络环境中传输到目标设备。 二、IP地址 `IP地址`是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。它是一个32位的二进制数,但是在习惯上,我们
-
修改Docker默认的存储驱动程序目录
一、前言 今天使用jenkins对程序进行更新的时候,发现更新失败。经排查是因为系统磁盘满了,然而通过堡垒机看了下,系统空间还有很多,于是看了下系统分区: ![修改Docker默认的存储驱动程序目录](/ArticleFile/2024-06-06/444ede8a1b1b42058db18690fa995952.png '修改Docker默认的存储驱动程序目录') ![修改Docker默认
-
Windows 安装git的详细安装步骤 ,以及TortoiseGit 图形化工具
一、前言 `Git` 是一个开源的分布式版本控制系统,用于有效、高速地处理从很小到非常大的项目版本管理。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不需要服务器端软件支持。 二、安装Git 1、Git 下载地址 [Git 下载地址](https://git-scm.com/downloads "Git 下载地址") ![Windows
暂无评论