FastTunnel - 打造人人都能搭建的內網穿透工具
FastTunnel是用.net core開發的一款跨平台內網穿透工具,它可以實現將內網服務暴露到公網供自己或任何人訪問。
與其他穿透工具不同的是:FastTunnel項目致力於打造一個易於擴展、易於維護的內網穿透框架,任何人都可以基於該框架二次開發,你可以直接通過nuget安裝依賴進行開發,當然它也是開箱即用的工具。
相關優秀博文
FastTunnel-內網穿透原理揭秘
測試龍芯 LoongArch .NET之 使用 FastTunnel 做內網穿透遠程計算機
使用 FastTunnel 做內網穿透遠程計算機桌面服務器
榮獲GVP開源項目
FastTunnel榮獲開源中國2020最有價值開源項目
開源倉庫地址
github: https://github.com/SpringHgui/FastTunnel
gitee: https://gitee.com/Hgui/FastTunnel
官網:https://suidao.io
什么是內網穿透?
一般來說,如果你在內網部署一個網站或應用,也只有處於內網之中的其他網絡設備才能訪問;但如果你想讓公網上任何人都可以訪問你內網的應用,則必須要采取一些手段,內網穿透在這種背景下應用而生。
FastTunnel能夠做什么?
- 家中建站
- 微信開發
- 遠程桌面
- erp互通
- svn代碼倉庫
- 端口轉發
- iot物聯網
- 聯機游戲
等等場景,不局限以上
搭建屬於自己的內網穿透平台
1.在倉庫的 releases 頁面下載對應的程序
2.根據自己的需求修改客戶端以及服務端配置文件appsettings.json
3.服務端運行FastTunnel.Server
4.客戶端運行FastTunnel.Cient (客戶端可運行在內網任何一台設備上)
配置示例
用自定義域名訪問內網web服務
例如你擁有一台雲服務器,公網ip地址為 110.110.110.110 ,同時你有一個域名 suidao.io,你希望訪問 test.suidao.io可以訪問你自己電腦上部署的一個網站。
你需要新增一個域名地址的DNS解析,類型為A,名稱為 * , ipv4地址為 110.110.110.110 ,這樣 *.abc.com的域名均會指向110.110.110.110的服務器,由於FastTunnel默認監聽的http端口為1270,所以要訪問http://test.abc.com:1270。
服務端配置文件:config/appsettings.json
"ServerSettings": {
// 必選 默認值
"BindAddr": "0.0.0.0",
// 必選 默認值
"BindPort": 1271,
// 自定義域名web穿透必須
"WebDomain": "suidao.io",
// 服務監聽的端口號, 訪問自定義域名站點時url為 http://{SubDomain}.{Domain}:{ProxyPort_HTTP}/
// web穿透必須
"WebProxyPort": 1270,
// 可選,ngixn反向代理后可省略域名后的端口號進行訪問
"WebHasNginxProxy": false,
// 可選,訪問白名單,不在白名單的ip拒絕
"WebAllowAccessIps": [],
// 可選,是否開啟SSH,禁用后不處理SSH類型端口轉發.默認false。
"SSHEnabled": true
}
客戶端配置文件:
"ClientSettings": {
"Common": {
// 服務端公網ip, 對應服務端配置文件的 BindAddr,支持域名
"ServerAddr": "test.cc",
// 服務端通信端口,對應服務端配置文件的 BindPort
"ServerPort": 1271
},
"Webs": [
{
// 本地站點所在內網的ip
"LocalIp": "127.0.0.1",
// 站點監聽的端口號
"LocalPort": 8080,
// 子域名, 訪問本站點時的url為 http://{SubDomain}.{Domain}:{ProxyPort_HTTP}/
"SubDomain": "test", // test.test.cc
}
]
}
如何去掉域名后的端口號
在服務器端部署nginx,通過nginx反向代理將80端口流量轉發至1270端口,nginx的配置示例如下:
http {
# 添加resolver
resolver 8.8.8.8;
# 設置 *.abc.com 轉發至1270端口
server {
server_name *.abc.com;
location / {
proxy_pass http://$host:1270;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 可選
error_log /var/log/nginx/error_ft.log error;
}
}
配置端口轉發
假設內網有一個mysql服務端口為3306,在內網的ip地址為192.168.1.100,你希望訪問suidao.io:33306端口的請求轉發至內網的mysql上,則需要如下配置:
1.服務端配置文件不變
2.客戶端配置如下
"ClientSettings": {
"Common": {
// 服務端公網ip, 對應服務端配置文件的 BindAddr,支持域名
"ServerAddr": "test.cc",
// 服務端通信端口,對應服務端配置文件的 BindPort
"ServerPort": 1271
},
"Webs": [
],
/**
* ssh穿透,ssh訪問內網主機
* 訪問方式 #ssh -oPort=12701 {root}@{ServerAddr}
* ServerAddr 填入服務端ip,root對應內網用戶名
*/
"SSH": [
{
"LocalIp": "192.168.1.100",
"LocalPort": 3306,
"RemotePort": 33306
}
]
}
遠程內網電腦
windows:只需要將上一步中的3306端口換成3389,
linux:只需要將上一步中的3306端口換成22
結語
相信聰明的你已經看懂了如何配置,以及每個參數代表的意義,如果還有不懂的地方,可以提issue給作者。有興趣的朋友可以去clone下來耍耍,給作者提提需求、bug,如果能提交代碼一起參與開發改進就更完美了。
有興趣的可加qq群
