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

Are there security measures against udp hole punching?

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

我实施了以下策略:

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

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

我问的是合理的网络配置:我很确定原则上可以设置防火墙以这种方式运行。我将主要针对使用标准家庭连接的用户,因此我的主要目标是使用 NAT 的普通互联网提供商。

这是一个有趣的问题。

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

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

此外,在家庭和商业网络中都可能有多层 NAT。我知道一家公司为每个实验室设置了 NAT(以将其与其他实验室和研发网络隔离开来)。然后,每个实验室都连接到研发 NAT(以将其与其他部门隔离),后者又连接到公司范围的 NAT,顺便说一下,后者也受到严格的防火墙保护。再加上一个可能的 ISP 级别 (carrier grade) NAT,您将看到多达 4 层的 NAT。希望这是一个极端的例子,但现在两层 NAT 非常普遍,家庭 NAT 和运营商级 NAT。

鉴于此,随机网络将此行为视为可疑并加以限制的可能性有多大?坦率地说,我不确定,我认为没有其他人能高度确定。

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

我也猜想简单的防火墙应该没问题,只要 UDP 本身不被阻止,并且允许使用各种端口。然而,试图阻止端口扫描和反 DDoS 设备的防火墙可能会造成问题,因为这种流量可能对它来说似乎是可疑的,因此它可能取决于此类设备和软件的 configuration/implementation 详细信息。因此,不幸的是,判断您的策略在现实世界中的表现的唯一方法是在各种不同的网络上进行尝试。

其次,我想多说几句你的打孔攻略。如果爱丽丝和鲍勃都有一个共享服务器,而爱丽丝在锥形 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。这应该在他们之间建立连接而不需要任何猜测。