不久前我想到了一个绕过端口转发要求的潜在解决方案。我怀疑它是否可行,但如果有人能解释一下原因就好了。
因此,您有两台计算机,A 和 B,它们各自只有一个面向公众的 IP。两台计算机都没有端口转发,但 A 是服务器。B 连接到某个云服务以获取 A 的 IP 并将 B 的 IP 通知 A。然后,它们各自向对方面向公众的 IP 上的每个端口发送一条消息,直到其中一台成功通过。这个想法是,如果其中一台已经从其端口向另一台的端口发送了一条消息,而另一台也发送了一条消息,则路由器会认为这是一个响应并允许其通过。
这显然最多只能在理想世界中发挥作用,但它真的有效吗?
答案1
看Tailscale 的博客文章关于这个主题,其中还比较了几种不同类型的 NAT 实现。
当至少有一台机器位于“兼容” NAT 之后时:
如果我们坚持以 100 个端口/秒的适度探测速率,一半的时间我们会在 2 秒内完成。即使我们运气不好,在探测不到总搜索空间的 4% 后,20 秒内我们几乎可以保证找到一条进入的路。
当两台机器都处于“对称 NAT”之后,端口将随机化:
我们可以尝试应用相同的技巧,但现在搜索要困难得多:我们通过硬 NAT 探测的每个随机目标端口也会产生一个随机源端口。这意味着我们现在正在寻找 {源端口,目标端口} 对上的冲突,而不仅仅是目标端口。
再次,我将为您省去计算的时间,但在与之前的设置相同的条件下(一侧 256 次探测,另一侧 2048 次探测),20 秒后,我们成功的几率是……0.01%。