networking - 通过子网与另一个接口的子网相同的虚拟接口发送数据包
问题描述
我有一台带有 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。但是,没有成功。
感谢是否有人可以提供建议。
解决方案
从外观上看,您至少有两个问题,根据您选择的解决方案,可能会出现其他问题。
问题一,重叠子网:解决此问题的绝对 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 以确保流量正确通过。如果不是,请提供输出和您希望它与当前设置一起采用的路线。
如果多播仍然不起作用,那么我建议为它创建另一个问题。
推荐阅读
- php - 如何用 PHP 中的不同字符替换字符串中的每个无效字符?
- javascript - 如何使用类中的静态 getter 并调用对象并使用 this 关键字?
- node.js - 如何控制并从 apm 无人机获取实时遥测数据以响应和基于 nodejs 的 GCS?
- javascript - 使用 CSS/Javascript (splitting.js) 将动态文本包裹在旋转的圆柱体周围
- docker - .net 项目的 docker build 完成后如何启动多个微服务?
- django - 如何处理 django_rest_framework 中的关系字段
- reactjs - 在 React 应用程序 Pod 中无法访问 kubectl 机密
- java - ZonedDateTime 不显示通过 DateTimeFormatter 预期的时区
- ruby-on-rails - Ruby on Rails 无法更新 pg 数据库表值
- excel - VBA Excel 模块 - 保存为 pdf 并发送