我的问题与this one相同,但希望能更清晰地得到答案。在阅读了关于NAT Traversal背后细节的this fantastic article以及方法found here的一般摘要之后,我想知道该方案是否已经完成或是否可能。我正在编写在任何指定端口上提供网页的软件,我想知道是否有可能让WAN端的Web客户端连接到NAT路由器后面的这个服务器。我发现这个困难的原因是因为:
- 我不想告诉用户(谁拥有Web服务器)将其路由器配置为端口转发(许多情况下用户可能没有权限这样做)。
- UPnP我认为通常是默认禁用的,并且是用户无法提供的另一个配置权限。
- UDP Hole Punching看起来很有希望,直到我意识到客户端正在使用带有http的浏览器,因此只能通过TCP进行通信,并通过将选项限制为浏览器脚本来进一步限制我的能力。
- 我没有找到TCP Hole Punching的成功实现,考虑到维护状态信息的困难(目前我正在查看chownat,但我想知道如何通过Web浏览器在UDP隧道上实现TCP (或者如果可能的话?)。
- 使用代理转发所有流量不能很好地扩展(尽管使用外部服务器,不在NAT后面,对于设置初始连接或NAT遍历完全没问题)。通过Scaling,我的意思是,如果许多用户拥有自己的Web服务器,而不是一个用户的Web服务器具有高流量(考虑到用户的上传带宽通常受到严格限制,这不是问题。)
醇>
现在我开始认为必须有一些客户端浏览器脚本来帮助实现它,因此服务器不会完全处理任务。如果任何人对尝试让用户连接到NAT路由器后面的Web服务器有任何想法或经验,我会帮助一些方向!谢谢!