我正在编写一个 P2P 应用程序。对等点定期 ping 主服务器以更新其当前 IP/端口,因此当对等点想要访问另一个对等点时,它可以向服务器询问该信息。目前,对等方使用 UPnP 将 NAT(用于经典家庭设置)配置为可从外部访问。
所以一切正常,除非对等的客户端试图到达另一个(或相同的)对等的服务器并且两者都在相同的 NAT 后面。由于在这种情况下,客户端试图从 NAT 后面到达其自己的“外部”(公共)IP 地址,因此 NAT 不会进行端口转发,也无法路由 IP 数据包。
目前我正在考虑两种解决方案:
- 使用 UPnP 查询 NAT 以查看端口转发到哪个本地 IP
- 在主服务器上存储对等方的内部 IP
你能想到其他解决方案吗?主流 P2P 应用都采取了哪些策略来解决这个问题?