在用樹莓派搭建自有服務的過程中,比如 NAS,經常會遇到 反向代理 這個詞。通俗而言,就是讓你能用 4G 網絡連接到家裡正連著路由器的樹莓派。
反向代理技術有很多種,常見的有端口映射、端口轉發和端到端穿透。
端口映射,即靜態地址轉換,將內網地址與公網地址進行一對一的轉換,且每個內部地址的轉換都是確定的。路由器的虛擬服務器就是靜態 NAT 的應用之一。
端口轉發,即通過其他服務器代理轉發請求給內網地址。端口轉發都需要一個公網 IP 服務器,如果自己沒有的話,就只能找第三方提供的服務了。
端到端穿透。利用 UDP 或 TCP 打洞技術,在兩臺機器上建立直接的網絡連接,即端到端連接(Peer 2 Peer)。一旦穿透成功,就可以不限速訪問,比較適用於視頻攝像等大流量應用。但是受國內網絡複雜環境影響,穿透成功率也不是百分百的,特別是跨網絡運營商時。
端到端穿透的原理比較複雜,這裡不展開介紹了。有興趣的可以直接翻看文章最後面的“參考資料”。
這篇文章收集了時下流行的能用於樹莓派的反向代理方案,有的需要自己架設服務器,有的需要購買服務,還有些是免費的,但通常體驗不好或者有流量限制。
方案沒有十全十美,只有最適合的,還是要根據自己的實際情況選用。
路由器端口映射
“路由器端口映射”是最簡單的一種方案,有些路由器上叫“虛擬服務器”,說的都是同一個技術。它優點和缺點都很明顯,沒有其他費用,有路由器即可,配置簡單,無流量帶寬限制,但路由器自身要有公網 IP,公網 IP 經常變的話還要藉助 DDNS(動態域名解析)來保證穿透穩定。
要注意的是,國內某些寬帶運營商分配給用戶路由器的 IP 可能並不是公網 IP,而是某個更大局域網的內網 IP。如果你的路由器沒有公網 IP,就不能用端口映射來做了。
如何判斷自己外網 IP 是否為真實公網 IP,以及解決方案 - lclc - 博客園
操作教程:
- 路由器端口轉發、DMZ 和 UPnP 實現內網穿透的方法 - 玩個機吧
- 路由器虛擬服務器(端口映射)設置指導 - TP-LINK 服務支持
花生殼(端口轉發)
商業內網穿透軟件,成熟穩定,體驗版免費,但有帶寬和流量限制,不適合 NAS 等場景,增加帶寬和流量需要收費,固定外網端口要收費。
操作教程:
- 花生殼 3.0 for 樹莓派 安裝使用攻略 - 客服中心 - Oray
- liunx 樹莓派 3 ubuntu-mate 花生殼 ssh 端口映射 - 知乎
ssh 反向隧道(端口轉發)
ssh 反向隧道是一個典型的反向代理應用,只要有 ssh 客戶端就能完成內網穿透。但它需要一臺公網服務器做跳板機,而且相對不夠穩定,要搭配 autossh 做斷線重連。
操作教程:
- SSH反向隧道進行內網穿透運維 黑禮服丶弒魂-CSDN博客
- SSH反向隧道搭建過程 | 靜覓
- 利用SSH反向隧道,連接內網服務器 - felixnet - 博客園
Holer(端口轉發)
Holer 是一個 Java 編寫的開源內網穿透軟件。服務端由 Spring Boot 和 Netty 等開源框架實現,使用 MySQL 數據庫統一管理數據,支持跨平臺。客戶端有 Java 和 Go 兩種語言版本。
操作教程:
- wisdom-projects/holer-client: Holer Client
- wisdom-projects/holer: Holer exposes local servers behind NATs and firewalls to the public internet over secure tunnels.
- Holer 服務端軟件使用 - 千里駒 - 博客園
- 使用 holer 從公網 ssh 登錄樹莓派 - Wisdom Blog
ngrok(端口轉發)
ngrok 是一個開源的內網穿透軟件,誕生至今已經 7 年了,在國外有官網和服務器。不過 ngrok 只開源了 1.7 及以下的版本,2.0 版本往後已經閉源。
操作教程:
- inconshreveable/ngrok: Introspected tunnels to localhost
- ngrok - secure introspectable tunnels to localhost
frp(端口轉發)
一個使用 Go 開發的高性能開源反向代理應用,支持轉發 TCP、UDP、HTTP、HTTPS 協議,還支持 P2P 連接模式。功能強大,高性能,但要自己架設服務端安裝。
操作教程:
- fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
- 樹莓派使用 frp 實現內網穿透 | 樹莓派小無相系列 - 簡書
- 樹莓派折騰記: 使用 FRP 穿透內網 | 美麗應用
n2n(端到端穿透)
在數據鏈路層實現的一套開源 P2P 內網穿透軟件。
操作教程:
- n2n 內網穿透折騰記 - 知乎
- 蒐集整理N2N使用中的一些經驗 | 好運博客
- ntop/n2n: Peer-to-peer VPN
PeerVPN(端到端穿透)
開源的去中心化 VPN 軟件,使用網狀拓撲邏輯結構,所有節點彼此之間互聯,無需中央服務器,任何一個節點宕機並不影響其他機器的相互通訊。
操作教程:
- PeerVPN - the open source peer-to-peer VPN
ZeroTier(端到端穿透)
基於 P2P 穿透的去中心化開源 VPN 軟件,能安裝在幾乎任何平臺。官方還提供了免費的 P2P 根服務器。
操作教程:
- ZeroTier – Global Area Networking
- ZeroTier內網穿透教程 | 底噪
- 內網穿透工具——ZeroTier One的使用 - 簡書
- ZeroTier - 無配置,零基礎「內網穿透」隨時隨地連回家/學校/辦公室
goproxy(端到端穿透)
一個用 Go 編寫的開源內網穿透軟件。
Proxy是高性能全功能的http代理、https代理、socks5代理、內網穿透、內網穿透p2p、內網穿透代理、內網穿透反向代理、內網穿透服務器、Websocket代理、TCP代理、UDP代理、DNS代理、DNS加密代理,代理API認證,全能跨平臺代理服務器。
操作教程:
- GOPROXY IN ACTION
- goproxy/README_ZH.md at master · snail007/goproxy
- snail007/goproxy
Serveo(端口轉發)
Serveo 是一個免費的內網穿透服務,Serveo 可以將本地計算機暴露在互聯網上,官方聲稱其為 Ngrok 的絕佳替代品。Serveo 其最大優點是使用現有的 SSH 客戶端,無需安裝任何客戶端軟件,即可完成端口轉發。
操作教程:
- milio48/serveo: Serveo port forwarder, ngrok alternative
- Serveo: expose local servers to the internet using SSH
natapp(端口轉發)
基於 ngrok 的國內內網穿透服務,免費版會強制更換域名,臨時用一下可以,更多功能需要付費使用。
操作教程:
- NATAPP基於ngrok的國內高速內網穿透服務
ChuanTou.ORG(端口轉發)
基於 frp 的國內內網穿透服務,提供免費的 frp 服務器。
操作教程:
- FRP 內網穿透工具 - 免費 Frp 內網穿透服務器,支持綁定頂級域名,開放 80 端口。
小米球 ngrok(端口轉發)
一個個人維護的 ngrok 免費服務器。
操作教程:
- Ngrok 國內免費服務器 - 小米球 ngrok
nps(端口轉發)
一款輕量級、高性能、功能強大的內網穿透代理服務器。支持tcp、udp、socks5、http等幾乎所有流量轉發,可用來訪問內網網站、本地支付接口調試、ssh訪問、遠程桌面,內網dns解析、內網socks5代理等等……,並帶有功能強大的web管理端。
操作教程:
- ehang-io/nps
- NPS 內網穿透教程 / 入門+進階 / 一個孤單的銅離子
- NPS-輕量級內網穿透代理服務器 - Newlearnerの小站
lanproxy(端口轉發)
lanproxy是一個將局域網個人電腦、服務器代理到公網的內網穿透工具,支持tcp流量轉發,可支持任何tcp上層協議(訪問內網網站、本地支付接口調試、ssh訪問、遠程桌面...)
操作教程:
- ffay/lanproxy
- IO2C - 開源內網穿透工具
- P2P技術詳解(三):P2P中的NAT穿越(打洞)方案詳解(進階分析篇) - 知乎
- P2P如何實現內網穿透(打洞)_網絡_u014023993的專欄-CSDN博客
- p2p通信原理及實現_網絡_yunlianglinfeng的專欄-CSDN博客
閱讀更多 硬核樹莓派 的文章