是否有针对udp打孔的安全措施



我想在两个对等点(比如Alice和Bob)之间建立UDP通信。Alice位于端口受限的锥形NAT之后(因此,即使目的地发生变化,相同的内部端口也会映射到相同的外部端口),而Bob位于对称NAT之后(这意味着,无论内部端口如何,每次选择新的目的地时,外部端口都会发生变化,从而使外部端口不可预测)。我有一个介于两者之间的服务器,我想做一个UDP打孔器。

我实施了以下策略:

  • Bob打开了大量端口,并从这些端口向Alice的外部端口发送数据包(他通过服务器了解是否)
  • Alice在随机端口向Bob的NAT发送数据包,直到建立连接

手头有两个这样类型的NAT,我做了一些实验。Bob打开32个端口,Alice每0.1秒发送64个数据包。连接通常在1或2秒内建立,这非常适合我的需求。

然而,我想知道我是否会遇到一些严格的NAT路由器或防火墙的麻烦。例如,路由器是否会不允许内部对等端打开32个端口?或者(这听起来更有可能)会不会发生这样的情况:一个路由器看到大量数据包从随机端口传入,然后被丢弃,就会将ip列入黑名单,并在一段时间内丢弃所有数据包?我读到在DoS攻击的情况下有时会发生这种情况,但我的数据包速率比DoS攻击轻4到6个数量级。

我询问的是合理的网络配置:我非常确信,原则上可以设置防火墙来实现这种行为。我将主要针对那些支持标准家庭连接的用户,所以我的主要目标是使用NAT的普通互联网提供商。

这是一个有趣的问题。

首先,我不确定是否有人知道你想要的确切答案。不同的网络使用不同的设备和不同的配置。两个ISP可以使用十个不同的供应商来提供路由器、防火墙、NAT、入侵检测设备、DPI设备等;更不用说所有这些设备具有的可能配置的数量了。

虽然商业和企业网络已经够糟糕的了,但家庭网络更糟糕。这里甚至有更多的供应商销售调制解调器、NAT盒和各种影响网络连接的软件(如防火墙和防病毒)。所有这些都掌握在不懂技术的用户手中,他们将其保留为默认设置,或更糟的

此外,在家庭和商业网络中可能都有几层NAT。我知道有一家公司为每个实验室都有一个NAT(将其与其他实验室和研发网络隔离开来)。然后将每个实验室连接到R&D NAT(将其与其他部门隔离),后者反过来连接到公司范围的NAT,顺便说一句,该NAT也有严格的防火墙。再加上一个可能的ISP级(运营商级)NAT,你会看到多达4层的NAT。希望这是一个极端的例子,但两层NAT现在在家庭NAT和运营商级NAT中很常见。

考虑到这一点,一个随机网络认为这种行为可疑并加以限制的可能性有多大?坦率地说,我不确定,我认为其他人也不会有高度的把握。

尽管如此,我有根据的猜测是,通信设备(NAT、路由器等)的正常默认配置不应该阻止这种行为。毕竟,许多应用程序都会打开几个端口;更不用说NAT无法知道发送这种流量的IP本身不是一个有几十台计算机的NAT设备,每个计算机都有几个开放的端口。

我还认为,只要UDP本身不被阻止,并且允许使用各种端口,简单的防火墙就可以了。然而,试图阻止端口扫描的防火墙和防DDoS设备可能会带来问题,因为这种流量对它来说可能是可疑的,因此它可能取决于此类设备和软件的配置/实施细节。因此,不幸的是,告诉你的策略在现实世界中会如何表现的唯一方法是在各种不同的网络上进行尝试。

第二,我想谈谈你的打孔策略。如果Alice和Bob都有一个共享服务器,而Alice在锥形NAT后面,我看不出你的策略有什么意义。锥形NAT是最容易克服的NAT。如果你想让Alice能够连接到Bob(这很棘手,因为他在对称NAT后面),你真正需要做的就是让Bob在Alice的请求下连接到Alice。

要做到这一点,Alice和Bob都应该始终与服务器建立持久的TCP或UDP连接。连接在大多数情况下不应该携带任何数据,并且应该偶尔保持活动状态。

当Alice想要连接到Bob时,它只需打开一个端口(比如端口X),并从该端口连接到服务器。服务器看到Alice的外部端口对应于端口X,比如端口Y。此时,Alice通知服务器她希望Bob连接到她。由于Bob连接到同一台服务器,服务器通知Bob它应该在端口Y连接到Alice。这应该在它们之间建立连接,而不需要任何猜测。

最新更新