如何在 NAT 后面的两个节点之间进行通信?

Max*_*Max 5 p2p upnp nat go file-transfer

我有一些节点。每个节点都属于其他网络。每个节点都有像192.168.0.2这样的私有 IP,并保持在 NAT 之后。

是否有可能在节点之间进行通信?实际上,我需要在这些独立节点之间传输文件。

我尝试使用这个项目 - https://github.com/libp2p/go-libp2p。但是libp2p有一些限制:

  1. 两个节点都有私有IP地址(同一网络)
  2. 其中至少有一个拥有公共 IP 地址。

但是我有具有私有 IP 地址的节点,它们属于不同的网络。


更新。

有这样的解决方案:

Ber*_*ees 0

麦克斯,我来回答你的问题。

\n\n

您可以访问网络上配置的或无法访问的计算机,不能被计算机上的软件覆盖。这将是一个安全漏洞,并且可能会导致地址冲突,因为在不同的 NAT 区域\xc5\x9b 中可以使用相同的 IP 地址。

\n\n

因此,如果路由器使用 NAT,您将无法看到路由器后面的计算机。\n路由器不会通告这些地址。

\n\n

NAT 的目的是建立一个特殊的 IP 地址孤岛,NAT 部分之外的任何人都无法看到该孤岛。通过这种方式,公司可以使用更少的唯一 IP 地址来拥有运行良好的网络。另一个目的是安全。路由器还隐藏 NAT 区域内计算机的 MAC 地址。路由器可以隐藏很多东西。

\n\n

NAT 区域内的计算机可以发起与 NAT 外部计算机的联系((如果允许)路由器将记住该计算机并为其保留地址转换),但 NAT 外部的计算机无法寻址 NAT 区域内的计算机NAT。它只能从内部回复计算机。它通过回复路由器来实现这一点,路由器将知道将回复转发到 NAT 区域中的哪台计算机。

\n\n

Go 没有提供可以解决这些外部限制的库。忍受它。你无能为力。

\n\n

正如 JBuchel 所解释的,如果有一些额外的规定,例如开放 UDP 端口、额外的服务器/计算机等,Skype 模型就可以工作。这实际上是网络配置的重新安排,如果没有系统/网络的帮助,这是无法完成的管理员。

\n\n

但如果有该级别的支持,解决方案就会容易得多,只需将计算机从 NAT 中删除并为其提供一个对其他计算机可见的 IP 地址即可。

\n