如何在两个不同子网上的两台计算机之间转发 IPv4 广播数据包?

如何在两个不同子网上的两台计算机之间转发 IPv4 广播数据包?

我将 Linux 服务器用作原始路由器。目前,我可以使用伪装与外界通信(使用固定 IP),但大约一两年前,我将主工作站和服务器之间的链路升级到 10Gb。我内部网络中的其他所有内容都在 1Gb 网络上。大多数流量从内部网络流向外部。两者都使用 192.168 子网,1Gb 在 192.168.3.0/24 上通信,10Gb 在 192.168.4.0/24 上通信。

有时,子网需要相互通信(打印机仅在 1Gb 网络上),我使用 iptables FORWARDING 规则在两个网络之间移动数据包。例如

由于速度差异很大,我无法使用网桥——10Gb 上的流量会淹没 1Gb 链路,因此当我需要与 1Gb 网络上的特定地址通信时,我会使用 iptable 的 FORWARDING 规则。

最近我遇到了一个应用程序,它使用 UDP 广播“255.255.255.255”与其他计算机通信。它可能在初始设置后使用单播,但我不确定,因为我从来没有真正使用它。

该应用程序仅在 2 台计算机上运行,​​因此我尝试将广播转发到备用网络,仅当它来自这两个 IP 地址之一时,但到目前为止,还没有成功将广播地址在两个子网之间转发。

它看起来应该很“简单”(这可能意味着我遗漏了一些东西)。

该服务器被设置为默认路由,并且在内部网络之间或从其中任何一个外部路由“正常数据包”工作正常。

以太网适配器是否需要有单独的地址设置才能“听到”广播(通常,子网广播看起来像“192.168.x.255”)。

我尝试使用源和目标规则将 255.255.255.255 广播转发到“其他内部网络”(如果它来自尝试以这种方式通信的两个内部主机之一),尽管我看到广播在本地网络上发出(发送的计算机也向自己发送响应)。但没有迹象表明该地址被接受或通过服务器路由。

如上所述,正常地址被路由“正常”(ping、远程桌面、CIFS 文件共享),但广播地址则不然。

广播地址是否需要一些特殊的魔法?

谢谢!

答案1

RFC 922,在存在子网的情况下广播互联网数据报,明确禁止将有限广播(本地广播255.255.255.255)从一个 LAN 转发到另一个 LAN,这会导致桥接。您说您不想桥接,因为一个 LAN 会淹没另一个 LAN,但允许从一个 LAN 到另一个 LAN 的有限广播恰恰会导致桥接。

地址 255.255.255.255 表示本地硬件网络上的广播,不得转发。例如
,不知道其网络号并向
某个服务器请求网络号的主机可能会使用此地址。

广播会中断 LAN 上的每台主机,而每台主机都必须读取和处理广播,从而导致性能下降。此规则有助于防止 DoS 攻击,因为广播可用于破坏 LAN。

还有 IP 网络(定向)广播,默认情况下,它不会从一个 LAN 传播到另一个 LAN(再次是 DoS),但可以配置为这样做。这将是LAN 上的192.168.3.255和地址。192.168.4.255

如果有办法解决这个问题,那就违反了 RFC,并且可能会导致不可预测的网络行为。

答案2

您似乎认为,仅仅拥有混合速度的设备就会给低速设备带来问题。我不必详细了解交换机、集线器和网桥的工作原理,我只想说,这种软件不可能在网络上传输 10Gbps 的广播流量。我们中的任何一个人都可以为您提供无数个网络示例,其中混合速度(10Mbps、100Mbps、1Gbps、10Gbps)的设备都可以在同一个物理网络中愉快地共存。简而言之,如果您的软件能够在网络上传输 10Gbps 的广播流量,我会感到震惊。您设计的网络是基于对网络的稍微错误的理解。我的建议是将所有设备放在同一个物理网络上的同一个子网中,然后就完成了。

相关内容