如何从 public 端通过 nat 创建套接字连接
How to create a socket connection over nat from public end
我觉得这个问题最好从场景的简化版本开始。
服务器 A 连接到 public 互联网。
服务器 B 在专用网络中,使用网络地址转换连接到 Internet。
我拥有两台服务器并且可以在它们上面编辑软件。
服务器的IP地址和nat路由器我都知道。
使用Winsock,我需要在它们之间建立连接。如果连接是从服务器 B 启动的,我对 winsock 的了解就足够了,但是我需要服务器 A 来启动连接。
我想尽可能避免使用额外的库,因为在我看来,我只需要弄清楚服务器 A 在启动连接时需要使用什么 ip 和端口。
我需要什么额外的信息,我如何获得它,以及我如何根据这些信息采取行动。
注意:我调查了其他类似的问题,但其中 none 解决了这种情况。我不确定这是否应该在服务器故障或其他站点上被问到,但如果是这样,请在标记为 "off topic" 之前说出哪个,而不是无声地关闭问题。
您需要在 NAT 设备上设置 端口转发 到专用网络上的机器。确切的步骤是 device/manufacturer-specific,但这里是一般的想法:
选择一个端口号,配置 NAT 设备,以便将与其 public IP 和该端口的连接转发到您的私人服务器的 IP 和您的应用程序正在侦听的端口。
我觉得这个问题最好从场景的简化版本开始。
服务器 A 连接到 public 互联网。 服务器 B 在专用网络中,使用网络地址转换连接到 Internet。 我拥有两台服务器并且可以在它们上面编辑软件。 服务器的IP地址和nat路由器我都知道。
使用Winsock,我需要在它们之间建立连接。如果连接是从服务器 B 启动的,我对 winsock 的了解就足够了,但是我需要服务器 A 来启动连接。
我想尽可能避免使用额外的库,因为在我看来,我只需要弄清楚服务器 A 在启动连接时需要使用什么 ip 和端口。
我需要什么额外的信息,我如何获得它,以及我如何根据这些信息采取行动。
注意:我调查了其他类似的问题,但其中 none 解决了这种情况。我不确定这是否应该在服务器故障或其他站点上被问到,但如果是这样,请在标记为 "off topic" 之前说出哪个,而不是无声地关闭问题。
您需要在 NAT 设备上设置 端口转发 到专用网络上的机器。确切的步骤是 device/manufacturer-specific,但这里是一般的想法:
选择一个端口号,配置 NAT 设备,以便将与其 public IP 和该端口的连接转发到您的私人服务器的 IP 和您的应用程序正在侦听的端口。