Linux(Ubuntu 12.04)通过单一接口发送 ARP 请求

Linux(Ubuntu 12.04)通过单一接口发送 ARP 请求

我有一个系统,其中的自定义硬件连接到同一系统上的 2 个不同以太网端口。接口配置在同一个子网上,因为硬件(基于 FPGA)具有与硬件配置关联的硬编码 IP 地址。我不希望配置对设备连接的端口敏感。

设备会响应计算机发出的 ARP 请求,如果只有一个设备,则一切顺利。但是,如果连接了两个设备,则第二个设备的 ARP 请求只会从第一个设备所连接的接口发出,因此无法通过标准套接字与该设备通信。

乍一看,这似乎是问题的反面看到这里。那里的解决方案似乎不起作用。

有什么建议可以让 Linux 通过同一子网上的所有接口发送特定子网上的 ARP 请求?

设置摘要:

eth2 - IP:192.168.1.102,子网:255.255.255.0,网关:192.168.1.0

eth3 - IP:192.168.1.103,子网:255.255.255.0,网关:192.168.1.0

设备 IP 地址:

192.168.1.2, 192.168.1.3

答案1

如果我正确理解了您的设置 - 虽然我不确定我是否理解,但我相信解决方案是桥接 eth2 和 eth3(使其充当交换机),然后为 192.168.1.102 创建 br0 并为 192.168.1.103 创建虚拟接口 br0:1

建立桥梁的具体细节可以是找到这里

我确实注意到,这意味着具有硬编码 IP 地址的设备将能够看到所有其他设备(即,就像它被插入一个公共交换机一样 - 我不确定这是否是个问题。我没有这样做过,但如果这是一个问题,你应该能够使用防火墙将其关闭ebtables

答案2

在这种奇怪的配置中,我只需手动配置 arp 和路由表。

ip neigh add to 192.168.1.2 dev eth2 lladdrr DEVICEMAC1 permanent
ip neigh add to 192.168.1.3 dev eth3 lladdrr DEVICEMAC2 permanent
ip route add to 192.168.1.2/32 dev eth2
ip route add to 192.168.1.3/32 dev eth3

用正确的 mac 地址替换设备MAC 1和 2.

答案3

我相信我之前的一个问题可能会有所帮助:在同一网络上具有多个接口的 Linux 服务器上,ARP 使用单个 MAC 地址进行响应

查看第一个回应。

相关内容