是否有可能使 P2P 应用程序在 CGNAT 后面工作?

alm*_*arc 5 networking nat

我一直在考虑制作一个纯血统的P2P通信系统,中间没有任何服务器。在本地工作的套接字上制作了一个原型。

但后来发现我的提供商使用运营商级 NAT。事实上,我国的所有提供商都使用它。我打电话给他们,他们告诉我他们正在阻止所有入站端口,打开它们的唯一方法是购买静态 IP。此外,他们不使用 IPV6。

听起来故事就到此结束了。但如果是这样的话,那么多人游戏服务器是如何工作的呢?显然,他们必须通过某个端口向我发送数据,而该端口应该被提供商阻止。一般来说,如果两个客户端都位于 NAT/CGNAT 之后,是否可以建立 P2P 连接(至少是短暂的)?

har*_*ymc 2

运营商级 NAT 通常会阻止客户端使用端口转发。当两个客户端都位于 CGNAT 之后时,可以使用各自的 IP 地址建立 P2P 连接。这取决于 ISP 是否允许基于 IP 地址的流量。有些会阻止垃圾邮件等流量,甚至可能禁止用户的 IP。

您应该首先检查 ISP 关于在其网络内使用 IP 地址的政策。

当 ISP 网络内部允许连接时,纯 P2P 系统就可以工作。一旦客户端设法联系任何一个初始节点,它就会从该节点接收其他已知节点的列表。通过联系这些其他节点,它以动态方式扩大和修剪其列表,并将其在整个网络中进一步传递。

NAT 对数据流方向没有影响,因为连接一旦建立就是双向的。一对节点的每一侧都可以发起连接,也可以接受另一个节点发起的连接。唯一的问题是找到初始连接。

P2P 系统还使用许多其他方法来让节点连接自身。您可以在 Wikipedia NAT traversal中找到它们的列表 。

加入P2P的成功取决于至少找到一个节点来启动该过程。针对你的情况,我可以想到几种方法:

  • 将节点列表保存在众所周知且可访问的位置,例如 Google Drive
  • 使用非标准端口并扫描网络(危险,因为您的 ISP 可能会将您的节点列入黑名单)
  • 将一个中心节点保留在已知地址上,例如使用静态 IP 或租用服务器
  • 中心节点使用 动态 DNS来动态宣告自己。