📣读完这篇文章里你能收获到
对于大部分人来说,自己家里的宽带是没有公网IP的。如果你想让公网上任何人都可以访问你内网的应用,则必须要采取一些手段,内网穿透在这种背景下应运而生。
FastTunnel是用.net core
开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问。
与其他穿透工具不同的是:FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架,任何人都可以基于该框架二次开发,你可以直接通过nuget安装依赖进行开发,当然它也是开箱即用的工具。
备注:此处为演示,因此直接选择发布包部署,熟悉
.NET
的建议直接编译源码部署
根据微软官方页面下载安装.Net6运行环境 Install .NET on CentOS - .NET | Microsoft Docs
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-6.0
sudo yum install aspnetcore-runtime-6.0
dotnet
本示例的服务端为云服务器CentOS 7.x版本
/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
本示例客户端为windows x64系统
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 即可连接内网的服务
}
]
}
}