我正在尝试实施 UDP 打洞,这样我就可以将不在同一网络中的 2 个客户端连接在一起,而无需转发。我使用 this question 中的最佳答案作为我的基础,如果我在本地计算机上运行客户端和服务器(两个客户端都得到“你好”响应),它就可以工作。
现在我已经制作了一个运行服务器的 AWS 实例并打开了它的端口以便我的客户可以连接,但是当他们收到彼此的 ip + 端口时他们似乎无法到达(他们得到响应“ peer: x.x.x.x yyyy”,但不是“hello”响应)。为了让他们能够沟通,我缺少什么?即使两个客户端都在同一台机器上,它仍然无法工作,只有在客户端和服务器都使用本地主机(127.0.0.1)时,它才会给出正确的响应。
“NAT”(网络地址转换)在数据包从内部路由到外部接口时将私有地址转换为公共地址,反之亦然,以允许双向通信。
首先简要总结一下当两个客户端都在自己的 NAT 后面时它是如何工作的:
现在假设客户端 A 和 B 在同一个 NAT 后面的同一个专用网络上,而公共服务器在别处。在这种情况下: