NAT后面到NAT后面的连接

12

我遇到了一个有趣的问题。基本上,我有两部都在NAT后面的手机。我想使用UDP直接在这两个设备之间进行通信。

我知道如果我从手机向服务器发起连接,那么我可以将数据推送回该连接以便将数据发送回相同的端口和IP地址(即从收到消息的端口和IP地址发送它)。因此,我可以通过将两部手机连接到服务器来轻松地在两个设备之间进行通信。然后将数据发送到服务器并将其重新路由回手机。这可以避免任何可能遇到的NAT穿透问题。

但是我宁愿让服务器将这两个设备指向对方,然后让它们直接通信。我该如何做到这一点?是否可以不使用像uPnP这样的东西来实现呢?

任何帮助都将不胜感激!

编辑:我找到了这篇文档http://www.brynosaurus.com/pub/net/p2pnat/ 它看起来就像是我想要的hairpin转换,但它似乎没有得到广泛支持。我想知道移动ISP对UPnP的支持情况如何?


你的问题是“我想知道移动ISP对UPnP的支持有多好?”所有的问题都解释了Hole Punching是什么,但没有一个回答当前支持的问题。哦,真有趣 :-) 谢谢您提供p2pnat论文的链接。 - guettli
你最近解决了这个问题吗?我也有三个远程网络(都带有LTE调制解调器,ISP NAT没有uPNP),我想将它们连接在一起。现在我正在使用Pritunl OpenVPN,但我希望中介服务器只是作为中介,就像你描述的那样,而不是通过它路由所有流量。 - Bojan P.
发现了ZeroTier,看起来正是这项工作所需的工具(无法编辑评论因为超过5分钟)。 - Bojan P.
2个回答

4

您需要一个中介服务器,以便客户端可以知道自己在哪里。然后通过uPNP打开一个服务器,另一个客户端连接到该服务器。


是的,如果我能使用它那就太理想了。但是在多层NAT网络拓扑结构中,UPnP无法工作 :( - Goz
3
多国籍?双方都是?这是中国吗? - Daniel

4
您需要的是UDP打洞技术,详见例如http://zh.wikipedia.org/wiki/UDP打洞
基本思路很简单,您告诉每个端点要使用哪些端口,然后它们开始发送UDP数据包。当NAT设备看到第一个出站数据包时,它们将建立一条遍历规则,接下来来自另一端的尝试将匹配此遍历规则。

如果每个路由器都有外部可见性,那么打洞就很好,但我不能确定:(这份文档http://www.brynosaurus.com/pub/net/p2pnat/对打洞有很好的解释,以及“发夹翻译”,看起来更符合我的需求,但不幸的是,它得到的支持不太好:( - Goz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接