使用非良好行为的 NAT 无法进行 UDP 打洞吗?

使用非良好行为的 NAT 无法进行 UDP 打洞吗?

通常,NAT 会将本地端点的公共端点保持为与来自该端点的所有数据包相同,从而使 UDP 漏洞攻击变得容易。但是,有些 NAT 会将本地端点映射到数据包发送到的每个不同主机的不同公共端点,从而使 UDP 漏洞攻击变得不可能。

进行传统 UDP 穿透的唯一方法是猜测远程端点。但是,由于有超过 65,000 个端口,这种方法不太可靠。因此,我了解到像 Skype 这样的应用程序(众所周知,它们能够通过几乎任何类型的 NAT 进行通信)使用中继来实现这一点。以下是我的问题:

中继只是一个将传入数据从一个套接字传输到另一个套接字的套接字,对吗?有没有其他方法可以通过顽皮的 NAT 进行 UDP 打洞,而无需进行胡乱猜测或使用中继(这样就不再是真正的“打洞”)?

答案1

术语“行为不端的 NAT”是不正确的 - 任何使用 PAT(端口地址转换)将多个私有地址聚合到单个公共地址的 NAT 设备都会重新映射源端口。这就是 PAT 中“端口地址”所指的内容。

两个内部设备不可能使用相同的源地址到达相同的目的地,并期望源端口在 NAT 之后保持不变,并且在针对多个目的地时尝试保持源端口一致对安全态势没有好处。因此,这通常不是防火墙设计的目标。

当然,这在这里没有帮助,因为您想知道连接的源端口,但实际上没有从该源接收任何数据包。中继是端点通过第三方进行通信的明显选择(是的,中继只是在套接字之间传输数据包,正如您所建议的那样 - 在 skype 服务器中的实现可能要复杂得多,但原则上是一样的)。

很难想象如何通过其他方式做到这一点,因为端点不知道传输过程中发生的转换,所以它们甚至无法通过某种侧通道传达它们的源端口是什么(比如只在中央服务器上注册端口但直接通信)。

相关内容