我家里的运营商级 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可见,我应该试试什么软件?
答案1
我想我找到了完美的工具 -玻璃钢。
似乎正是我想要的。
答案2
实施 IPv6。将 A 置于面向外部的 /64 网络中。根据需要允许进入防火墙。
互联网上的任何 IPv6 主机都可以直接访问 A。
IPv4 更复杂。可以通过第 7 层技巧、HTTD 转发标头或 PROXY 协议获取客户端 IP 地址。但您仍然需要某种方法将 NAT 从 B 的代理穿越到 A 的后端。