內網穿透(NAT穿透)是一種將本地網絡服務暴露給互聯網的一種技術。這種技術可以很好地解決許多局域網內的資源共享。采用路由的方式將一臺計算機變成一個“路由器”,將公共的網絡地址轉為內部網絡地址,從而實現通過英特網可以訪問局域網資源的目的。
內網穿透有許多應用場景,例如:
- 遠程辦公:有時候需要在家里遠程辦公,需要訪問公司內部的服務器或者局域網中的資源。利用內網穿透技術可輕松實現遠程辦公。
- 遠程開發調試:開發Web應用時常常需要在移動設備中測試。通過內網穿透技術,可以將服務端開發環境暴露到公網上,方便在移動設備上進行調試,提高開發效率。
- 家庭服務器管理:在家中搭建了NAS存儲、智能家居控制系統等設備。當我們離開家時,可以通過內網穿透,在互聯網中安全訪問家庭服務器,遠程管理數據和設備。
- 云服務器訪問:對于云服務器,有時候我們需要訪問其中的數據庫、文件或者其他服務。通過內網穿透,我們可以直接訪問云服務器內部的資源,節省時間和成本。
- 局域網游戲聯機:內網穿透可以讓多臺設備在同一個局域網中進行聯機游戲。這樣,即使設備之間不在同一個網絡中,也可以通過內網穿透建立虛擬的局域網,實現聯機游戲的功能。
雖然內網穿透給通過互聯網訪問局域網帶來了許多方便。但內網穿透技術打破內網的邊界,很容易給內網帶來各種風險;另外,內網穿透依賴于互聯網上的服務器,對網絡穩定性也是一種考驗。因此,使用時需要綜合考慮應用場景和安全需求。
內網穿透工具有很多,比較知名的如:花生殼、Ngrok等。 但是,本文主要推薦一些開源的內外穿透工具,便于自己搭建私有的網絡通道。
1.Fast Reverse Proxy (FRP)
Github:https://github.com/fatedier/frp
文檔:https://gofrp.org/zh-cn/docs/
frp是一個快速反向代理,允許將位于局域網或防火墻后面的本地服務器暴露給因特網。它目前支持TCP和UDP,以及HTTP和HTTPS協議,這個工具可以使網絡請求能夠通過域名轉發到內部服務。另外,FRP還提供P2P連接模式、流加密、負載平衡、自定義域名等功能。
FRP是用Golang編寫的,因此它支持linux、windows、mac等操作系統。
2.Localtunnel
GitHub:https://github.com/localtunnel/localtunnel
localtunnel是一個可以將本地服務暴露給英特網的工具,非常適合用于瀏覽器測試、外部API回調服務等。
Localtunnel-server提供了一個簡單的命令行界面,對于初學者來說非常容易使用。要使用Localtunnel-server,必須先在系統上安裝Node.js和npm。啟動后,Localtunnel客戶端將創建一個指向本地Web服務器的公共URL。
3.Chisel
GitHub:https://github.com/jpillora/chisel
Chisel是一個用Golang開發的開源網絡隧道解決方案。它支持TCP、HTTP和WebSockets等多種協議。Chisel提供了一個簡單的命令行界面,開發人員很容易入手。它還支持與客戶端自動重新連接,確保穩定運行。
Chisel的主要優勢是快速,因此它支持安全快速地發送大量數據。
4.Rathole
GitHub:https://github.com/rapiz1/rathole
Rathole是一個用Rust語言編寫開源隧道解決方案,也具備反向代理功能。可以通過Inte.NET與NAT防火墻后面的應用程序和設備建立連接。
Rathole獨有的突出特點是低資源消耗。
5.FastTunnel
GitHub:https://github.com/FastTunnel/FastTunnel
FastTunnel是一款高性能的跨平臺內網穿透工具,它的主要功能是將內網服務安全地暴露到公網,允許用戶或其他人可以從任何地方訪問這些服務。不同于其他穿透工具,FastTunnel致力于提供一個易于擴展和維護的內網穿透框架,使用戶能夠根據自己的需求構建自定義的穿透應用,并添加業務擴展功能。該工具采用了.Net Core開發,因此可以在不同操作系統上部署,包括Windows、Linux和macOS等。這使得FastTunnel成為一種強大的解決方案,適用于各種應用場景,無論是開發者需要將本地服務遠程暴露,還是需要創建自定義內網穿透解決方案的高級用戶,FastTunnel都提供了便捷且高性能的選擇。
6.sshuttle
GitHub:https://github.com/sshuttle/sshuttle
透明的代理服務器,可作為低成本的VPN實現方式。支持ssh轉發;支持DNS隧道;支持Linux和MacOS等系統。
7.Bore
GitHub:https://github.com/ekzhang/bore
Bore是一個用Rust開發的簡單的TCP隧道工具,可以將本地端口繞過標準的NAT連接防火墻,暴露給遠程服務器。
8.Zrok
GitHub:https://github.com/openziti/zrok
Zrok是一個基于OpenZiti構建的下一代點對點共享平臺。OpenZiti是一個可編程的零信任網絡,Zrok是一個Ziti下的原生應用程序。zrok允許用戶共享HTTP、TCP和UDP等網絡協議下的資源。zrok還允許用戶以點對點方式共享文件、Web內容以及其他資源。