首先說下內網穿透的原理。
NAPT原理
在NAT網關上會有一張映射表,表上記錄了內網向公網哪個IP和端口發起了請求,然后如果內網有主機向公網設備發起了請求,內網主機的請求數據包傳輸到了NAT網關上,那么NAT網關會修改該數據包的源IP地址和源端口為NAT網關自身的IP地址和任意一個不沖突的自身未使用的端口,並且把這個修改記錄到那張映射表上。最后把修改之后的數據包發送到請求的目標主機,等目標主機發回了響應包之后,再根據響應包里面的目的IP地址和目的端口去映射表里面找到該轉發給哪個內網主機。這樣就實現了內網主機在沒有公網IP的情況下,通過NAPT技術借助路由器唯一的一個公網IP來訪問公網設備。 具體原理參照下圖:
更加具體的原理性介紹可以看下這篇文檔:【技巧】內網穿透工具的原理與開發實戰:
-
https://www.sohu.com/a/201964268_743147
我了解的內網穿透工具
-
Ngrok
-
Natapp
-
小米球
-
Sunny-Ngrok
-
echosite
-
Ssh、autossh
-
Lanproxy
-
Spike
-
frp
-
fcn
-
花生殼
前5個都是基於國外的ngrok來進行二次開發的。
1、Ngrok
ngrok 是一個反向代理,通過在公共端點和本地運行的 Web 服務器之間建立一個安全的通道,實現內網主機的服務可以暴露給外網。ngrok 可捕獲和分析所有通道上的流量,便於后期分析和重放,所以ngrok可以很方便地協助服務端程序測試。
參考博客:10分鍾教你搭建自己的ngrok服務器
-
https://blog.csdn.net/yjc_1111/article/details/79353718
2、Natapp
natapp是 基於ngrok的國內收費內網穿透工具,類似花生殼,有免費版本,比花生殼好。免費版本:提供http,https,tcp全隧道穿透,隨機域名/TCP端口,不定時強制更換域名/端口,自定義本地端口
參考文章:NATAPP1分鍾快速新手圖文教程
-
https://natapp.cn/article/natapp_newbie
3、小米球
小米球是基於ngrok二次開發的內網穿透工具,支持多協議、多隧道、多端口同時映射(http、https、tcp等等...),同時支持多種系統win、linux、linux_arm、mac等。具體的使用直接參考官網。
4、Sunny-Ngrok
Sunny-Ngrok同樣是ngrok二次開發的內網穿透工具,支持http,https協議,同時支持更豐富的系統和語言:linux、win、mac、openwrt、 python、php等。
教程:Sunny-Ngrok使用教程
-
https://www.ngrok.cc/_book/
5、echosite
echosite同樣ngrok二次開發的內網穿透工具,支持多種協議,以前是全部免費的,現在推出了收費版和免費版,可根據自己的需要去選擇。
參考教程:EchoSite---讓內網穿透變得簡單
-
https://blog.csdn.net/interesting0303/article/details/81098603
6、Ssh、autossh
ssh 配合autossh工具使用,因為autossh會容錯,自動重新啟動SSH會話和隧道。autossh是一個程序,用於啟動ssh的副本並進行監控,在死亡或停止傳輸流量時根據需要重新啟動它。 這個想法來自rstunnel(Reliable SSH Tunnel),但是在C中實現。作者的觀點是,它不像匆匆忙忙的工作那么容易。使用端口轉發環路或遠程回顯服務進行連接監視。在遇到連接拒絕等快速故障時,關閉連接嘗試的速度。在OpenBSD,Linux,Solaris,Mac OS X,Cygwin和AIX上編譯和測試; 應該在其他BSD上工作。免費軟件。
使用教程:SSH內網穿透
-
https://yangqiang.im/?p=698
7、Lanproxy
lanproxy是一個將局域網個人電腦、服務器代理到公網的內網穿透工具,目前僅支持tcp流量轉發,可支持任何tcp上層協議(訪問內網網站、本地支付接口調試、ssh訪問、遠程桌面...)。目前市面上提供類似服務的有花生殼、TeamView、GoToMyCloud等等,但要使用第三方的公網服務器就必須為第三方付費,並且這些服務都有各種各樣的限制,此外,由於數據包會流經第三方,因此對數據安全也是一大隱患。
參考教程:業余草推薦一款局域網(內網)穿透工具lanproxy
-
https://blog.csdn.net/xmtblog/article/details/77943159
8、Spike
Spike是一個可以用來將你的內網服務暴露在公網的快速的反向代理,基於ReactPHP,采用IO多路復用模型。采用Php實現。
參考教程:使用 PHP 實現的的內網穿透工具 “Spike”
-
https://segmentfault.com/q/1010000009955702
9、Frp
frp 是一個可用於內網穿透的高性能的反向代理應用,支持 tcp, udp, http, https 協議。利用處於內網或防火牆后的機器,對外網環境提供 http 或 https 服務。對於 http, https 服務支持基於域名的虛擬主機,支持自定義域名綁定,使多個域名可以共用一個80端口。利用處於內網或防火牆后的機器,對外網環境提供 tcp 和 udp 服務,例如在家里通過 ssh 訪問處於公司內網環境內的主機。
教程:一款很好用的內網穿透工具--FRP、使用frp實現內網穿透
-
https://sunnyrx.com/2016/10/21/simple-to-use-frp/
10、Fcn
FCN[free connect]是一款傻瓜式的一鍵接入私有網絡的工具, fcn利用公共服務器以及數據加密技術實現:在免公網IP環境下,在任意聯網機器上透明接入服務端所在局域網網段。支持多種系統,有免費版和付費版。
教程:內網穿透工具FCN介紹
-
http://www.sohu.com/a/202331135_449548
上面便是我所知道的內網穿透工具,其中ngrok相關的我基本都用過還有frp,都差不多。大部分都可以免費去使用,但是我不建議大家把這些免費的穿透工具去放到比較重要的雲服務器中去使用,容易被攻擊。我的小伙伴,開始你的穿透之旅吧。