穿越防火墙和NAT的P2P传输方法适用于多种设备类型

3
我正在构建一个系统,依赖于中央服务器向第二个用户(在移动或桌面应用程序上)发送第一个用户的IP地址和端口。第二个用户使用中央服务器发送的IP地址和端口与第一个用户建立P2P加密连接,直接发送大文件(理想情况下,实际文件不通过中央服务器传递)。
这个系统需要在用户身处不同的防火墙/NAT并且在移动设备或桌面设备上工作,而且无需要求用户手动打开端口。
我一直在研究NAT穿越协议(Teredo IPv6)、libjingle(Google的开源套件)、STUN、直接套接字连接和用户之间的直接VPN。
我很困惑自己是否正确地解决了问题。所有这些选项是否独立地解决了这个问题?还是我做法有误?即使身处IPv4路由器后面,直接IPv6连接是否可行?

2
你不能(目前)假设双方都有IPv6,尽管如果他们确实有,那么建立连接就是非常直接的。你只需要所有这些其他解决方法,是因为IPv4的限制和NAT所带来的巨大混乱。 - Michael Hampton
https://dev59.com/UWoy5IYBdhLWcg3wfOB4#8524609 - selbie
这个项目可能会有帮助 https://samy.pl/pwnat/ - BBK
这是我的问题,与你的相关,但不完全相同 https://stackoverflow.com/questions/54118006/vpn-with-webrtc-stun-ice - BBK
1个回答

1
P2P连接并不保证始终成功。以下是可能导致失败的原因: 1)两个对等方都在对称NAT后面。(虽然如果一个对等方在对称NAT后面,Teredo也可以工作。) 2)UDP被阻止。 3)如果对等方在代理后面。 4)双重NAT场景。
IPv6有三种类型的地址:链路本地地址、私有地址和全局地址。如果两个对等方都有全局地址,它们可以直接通过互联网连接。全局地址前缀为(200:....)。如果您正在构建P2P系统,则应该有回落机制,在这种情况下,中央服务器应该在对等方之间中继数据。这样,您可以使应用程序在保持连接速度快的同时更加可靠。

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