具有错误 IP 地址的 ARP 请求

Mat*_*ner 6 linux router arp

我的 Linux 路由器有一个奇怪的问题。

设置是这样的:

host1   ===  Linux router   ===   host2
a.b.c.d --- a.b.c.e/g.h.i.j --- g.i.h.k
Run Code Online (Sandbox Code Playgroud)

每五分钟 host1 尝试访问 host2。

如果host2 关闭,Linux 路由器会在地址为ghij 的左侧网络(即来自右侧的网络)上向abcd 发出ARP 请求。从主机 1 接收到 MAC 地址后,路由器发送一个 ICMP-unreachable 数据包,其中 ghij 作为发送者地址。

如果 host2 已启动,则一切正常。路由器使用其地址 abce 发出 ARP 请求

在路由器上我有

$ uname -a
Linux pfc 3.6.9-voyage #1 SMP Tue Dec 11 09:53:27 HKT 2012 i586 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

不涉及 proxy_arp。

问题是:在我看来,路由不应该使用来自右侧网络的 IP 地址来进行 ARP 请求。还是我在这里遗漏了什么?

sch*_*hen 7

默认情况下,Linux 内核不会强制自己使用分配给特定接口的 IP 地址,以便在该接口上的 ARP 请求中使用。在我看来,合理性是分配给同一主机上任何接口的所有 IP 地址都属于该主机,因此在 ARP 请求中使用哪个地址无关紧要。

尝试sysctl -w net.ipv4.conf.all.arp_announce=2查看相应的内核文档

arp_announce - INTEGER
    [...]
    2 - Always use the best local address for this target. [...]
Run Code Online (Sandbox Code Playgroud)