Linux
SSH 隧道 - 將本地埠暴露給遠端機器的性能替代方案?
我在運營商級 NAT 環境中在家中執行伺服器 A。因此,我無法直接在路由器中打開埠。我在雲託管提供商上也有伺服器 B,它有一個可以打開埠的靜態公共 IP 地址。兩台機器都執行 Ubuntu linux。
到目前為止,對我來說最好的解決方案是 SSH 隧道,但它有一個稱為 TCP-over-TCP 的性能缺陷。
我嘗試了幾種解決方案,每個解決方案都有一些問題:
- OpenVPN/Wireguard:我不想將伺服器 A 的全部流量路由到遠端伺服器,隻公開幾個埠(同時讓它們也可以從 LAN 訪問)
- ngrok:集中式服務,有幾個限制(如最大連接數等)
- LocalTunnel:僅限 HTTP(S)。我想轉發 TCP 流量。
- SSH隧道:上面討論過
- 大多數其他解決方案:僅集中式(非自託管)或 HTTP(S)
我還需要通過伺服器B訪問埠的客戶端的原始IP地址對伺服器A可見。我應該嘗試什麼軟體?
我想我找到了完美的工具——frp。
似乎正是我想要的。
實施 IPv6。將 A 放在一個面向外部的 /64 網中。根據需要在防火牆中允許。
Internet 上的任何 IPv6 主機都可以直接訪問 A。
IPv4 更複雜。可以通過第 7 層技巧、HTTD Forwarded 標頭或 PROXY 協議獲取客戶端 IP 地址。但是您仍然需要一些方法來遍歷從 B 的代理到 A 的後端的 NAT。