我想为整个子网添加 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 个接口:eth0
、p4p1
和p4p2
。
p2p1
并p2p2
通过设备连接,但可以说像电线一样。
A.B.x.x
我们的网络中有多个服务器连接到Eth0
.
从系统中,我想访问A.B.x.x
:
- 直接通过
Eth0
:ping A.B.X.X
没问题,它会自动执行
- 通过
p2p1
->external device/wire
->p2p2
然后重定向到Eth0
:ping 10.50.X.X
在这种情况下,我需要创建与接口10.50.0.0/16
相同A.B.0.0/16
但通过接口的虚拟 IP p4p*
。
数据包需要保留10.50.x.x
IP 源/目的地,只有当到达 时eth0
,IP 才会被转换为A.B.X.X
。
让我们一步一步来做。
- 我路由
10.50.0.0/16
到我的界面p4p1
:ip 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/16
到p4p2
.
答案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