故事:

故事:

我想为整个子网添加 ARP 条目 ( 10.50.0.0/16)。

我试过 :arp -v -i p4p1 -s 10.50.0.0 MAC_OF_P4P2 netmask 255.255.0.0 pub

但命令返回:

arp: SIOCSARP()
SIOCSARP: Invalid argument

我一一添加就没问题了:arp -v -i p4p1 -s 10.50.0.1 MAC_OF_P4P2

有什么办法可以做我想做的事吗?

就像是:arp -v -i p4p1 -s 10.50.0.0/16 MAC_OF_P4P2

故事:

我有 3 个接口:eth0p4p1p4p2

p2p1p2p2通过设备连接,但可以说像电线一样。

A.B.x.x我们的网络中有多个服务器连接到Eth0.

从系统中,我想访问A.B.x.x

  1. 直接通过Eth0ping A.B.X.X 没问题,它会自动执行

在此输入图像描述

  1. 通过p2p1-> external device/wire ->p2p2然后重定向到Eth0ping 10.50.X.X

在此输入图像描述

在这种情况下,我需要创建与接口10.50.0.0/16相同A.B.0.0/16但通过接口的虚拟 IP p4p*

数据包需要保留10.50.x.xIP 源/目的地,只有当到达 时eth0,IP 才会被转换为A.B.X.X

让我们一步一步来做。

  1. 我路由10.50.0.0/16到我的界面p4p1ip route add 10.50.0.0/16 dev p2p1

=> p4p1不知道Who has 10.50.0.152? Tell 10.0.0.1

我需要设置一个 ARP 条目来链接10.50.0.0/16p4p2.

答案1

Linux 2.2 中删除了对网络代理 arp 条目(网络掩码不等于 0xffffffff)的支持。它被内核为其他接口上的所有可访问主机设置的自动代理 arp 设置所取代(当为接口启用转发和代理 arp 时)。

参考: https://manpages.courier-mta.org/htmlman7/arp.7.html

也许你可以尝试一下设置。

echo 1 > /proc/sys/net/ipv4/conf/"interface"/proxy_arp

接口将检查接口子网相关的路由表并发送arp代理数据包。

答案2

您要做的就是设置一条路线。你的问题没有说这个10.50.0.0/16子网是否存在目标设备,或在后面目标设备,但这并不重要。就您的机器而言,它们完全相同。

当您将路由添加到路由表时,您所说的是将目标子网的所有流量路由到具有给定 IP 的设备的 MAC 地址。例如,对于ip route add 10.50.0.0/16 via 1.2.3.4,当您的系统需要与 中的任何计算机通信时,10.50.0.0/16它将查找 的 MAC 地址1.2.3.4,并将流量发送到该 MAC 地址。传出数据包中的任何位置都没有 IP 地址1.2.3.4

因此你的解决方案很简单:

ip route add 10.50.0.0/16 via 1.2.3.4

^ 其中1.2.3.4是拥有该 MAC 地址的设备的 IP 00:XX:XX:XX:XX:XX。如果同一子网上有多个接口(这可能是一个坏主意,但并非总是如此),您可以指定传出接口:

ip route add 10.50.0.0/16 via 1.2.3.4 dev p2p1

相关内容