使用 public 反向代理(可以访问互联网)将 NAT 后面的客户端暴露给互联网

Expose client behind NAT to internet by using a public reverse-proxy (with access to the internet)

我想了解通过 public 服务器在 NAT 后面公开客户端的理论,例如使用客户端作为代理(最好是 SOCKS5)。找到一个现成的解决方案是理想的,但理论就足够了。

指出我的意思。 NAT 后面的客户端不直接监听 TCP。它只是打开一个到 public 服务器的 TCP 连接,该连接应该公开客户端。 NAT 后面的客户端上的 SOCKS5 代理没有直接公开,因此拨号的 TCP 连接应该以某种方式表现得像 TCP 侦听器。

如果 NAT 后面的客户端连接到 public 服务器,其他用户如何连接以及我应该如何转发请求?

我认为这基本上与 TeamViewer 使用的技术相同:

“建立会话时,TeamViewer 会确定最佳连接类型。在通过我们的主服务器握手后,70% 的情况下会通过 UDP 或 TCP 建立直接连接(甚至在标准网关、NAT 和防火墙)。其余连接通过我们高度冗余的路由器网络通过 TCP 或 https 隧道进行路由。您无需打开任何端口即可使用 TeamViewer。“

但具体如何呢?

总而言之,对于 golang 中的代理服务器,您必须

  1. 创建一个监听带有一些参数的请求的服务器。
  2. 收到请求后,它将向所需地址发出请求。
  3. 然后会return响应给私网中的原客户端。