首页 > 解决方案 > 通过子网与另一个接口的子网相同的虚拟接口发送数据包

问题描述

我有一台带有 eth0 和 eth1 两个接口的 Linux 机器。eth0 有 192.168.2.30,eth1 有 172.16.30.20。eth0 连接到路由器,该路由器也是 WAN 的网关。eth1 连接到局域网。一切正常,直到我不得不将一组 IP 范围为 192.168.2.5 - 192.168.2.15 的设备连接到 eth1 也连接到的 LAN。

我想向这些设备发送多播数据包。由于多播在同一个子网上工作,我使用以下方法创建了一个 IP 别名。

system("ifconfig eth1:1 192.168.2.100 网络掩码 255.255.255.0 向上");

尽管添加了上述内容,但数据包并未通过 eth1。发现这是因为 eth0 也与 eth1 具有相同的子网:1。

我尝试调用 ip route add <multicast ip> dev eth1。但是,没有成功。

感谢是否有人可以提供建议。

标签: networking

解决方案


从外观上看,您至少有两个问题,根据您选择的解决方案,可能会出现其他问题。

问题一,重叠子网:解决此问题的绝对 100% 正确的方法是更改​​子网,使它们不重叠。我怎么强调这在你的情况下有多重要。如果假设 192.168.2.5 - 192.168.2.15 上的这些计算机连接到与 eth0 相同的网络,那么您需要重新考虑您的设置,因为这将永远无法工作,因为您将创建网络循环或错误的路由。

在第一种情况下,192.168.2.5 - 192.168.2.15 和 192.168.2.15 没有以任何方式物理连接,如果您上面的人说您不能这样做,您可以尝试在 eth1 上创建一个 NAT,以便您的系统看到不同网络上的子网。但这会使对路由的理解变得混乱,并可能干扰多播流量。

完成此操作后,运行 tracerroute 以确保流量正确通过。如果不是,请提供输出和您希望它与当前设置一起采用的路线。

如果多播仍然不起作用,那么我建议为它创建另一个问题。


推荐阅读