2016-12-03 92 views
0

我一直在阅读关于WebRTC以及它如何使peer to peer沟通。所以,我做了一个针对NAT遍历的实验。NAT穿越实验?

实验目的是在NAT中测试打孔。我有两个系统都在运行Ubuntu 16.04。我将把这些系统称为system Asystem B

这两个系统都连接到托管在Amazon Web Services上的服务器。系统A使用的命令nc -p 1234 -u IP_ADDRESS_OF_SERVER PORT_NUMBER_OF_SERVER和系统B使用命令nc -p 1235 -u IP_ADDRESS_OF_SERVER PORT_NUMBER_OF_SERVER。系统A和系统B都连接到相同的WiFi路由器。

连接到服务器后,我们了解了两个系统的public socket。之后,我尝试使用我们在几秒钟内从服务器获取的公共套接字的信息连接对方。

系统A从服务器断开连接并通过使用命令nc -u -p 1234 PUBLIC_IP_OF_SYS_B PUBLIC_PORT_OF_SYS_B连接到系统B,并且系统B也通过使用命令nc -u -p 1235 PUBLIC_IP_OF_SYS_A PUBLIC_PORT_OF_SYS_A将服务器与服务器断开连接并连接到系统A.

我这样做是为了在我们的NAT中打个洞。之后,系统A取消上述nc命令并使用nc -l -u -p 1234收听它的端口。但不幸的是,我无法收到系统A中系统B中键入的任何消息。

任何人都可以帮助我完成这项工作吗?

+0

不知道为什么要去所有这些麻烦,如果你只能运行一个WebRTC服务,看看会发生什么。 尝试https://appear.in或https://talky.io。如果他们工作,然后NAT穿越工作(或没有NAT干扰你)。 –

+1

@abhiarora - 很好,更努力。 –

+0

@Am_I_Helpful - 你有没有尝试过吗? 你能提出一些建议吗? – abhiarora

回答

1

所以,我想出了自己。我试图做的事情叫做Hairpin Translation,发夹翻译在现有的NAT之间仍然少得多(与打孔翻译相比)。

这两个系统恰好位于相同的NAT之后,因此位于相同的私有IP地址领域。 System A已经与服务器S建立了UDP会话,普通NAT已经为其分配了其自己的公共端口号(例如x)。 System B已经类似地建立了与S的会话,NAT为其分配了公共端口号(例如y)。

假设system A使用穿孔技术与B建立UDP会话,使用服务器S作为引导者。 System A向S发送一条请求连接到B的消息.S用B的公共和私人端点响应A,并且将A的公共和私人端点转发给B.两个客户端然后试图直接在这些端点中的每一个处发送UDP数据报。由于我们的NAT不支持发夹翻译,因此指向公共端点的消息不会到达其目的地。

任何人都可以通过here阅读关于发夹的内容。