我的机器有一个物理网络接口(eno1)和一堆虚拟网络接口(例如tap0)。每个接口都有自己的IP,它们的子网不重叠。
我注意到,如果我从另一台连接到eno1 1‘S网络的机器执行ARP请求,请求一个属于虚拟网络接口(例如tap0)的IP,Linux将响应ARP请求,并且它将响应eno1的MAC地址(也就是说,它用接收ARP请求的接口的MAC地址响应,而不管哪个接口有IP地址)。
只有当IP属于其配置的网络接口之一时,Linux才会响应ARP请求,否则它将忽略它。
我想知道是什么原因造成了这种情况?我认为它会简单地忽略这类ARP请求,因为它们正在获取it,这些it不仅由不同的接口所持有,而且在子网范围之外。
谢谢!
@编辑:根据请求,这是我观察到的真实示例:
机器1具有与IP 192.168.0.2、子网192.168.0.0/24、MAC地址82:a2:17:43:15:ef的接口eno1。
它还具有与IP 172.17.0.1、子网172.17.0.0/16、MAC地址02:42:6f:31:bb:58的接口docker0 (虚拟)。
机器2连接到eno1的同一子网,IP为192.168.0.55。机器2向网络执行ARP请求,请求IP 172.17.0.1的所有者。
机器1用MAC地址82:a2:17:43:15:ef (eno1 MAC地址)回答ARP请求。
补充说明:
发布于 2023-05-02 03:54:11
0-(默认)内核可以用来自其他接口的地址来响应arp请求。这似乎是错误的,但它通常是有意义的,因为它增加了成功沟通的机会。IP地址由Linux上的完整主机拥有,而不是由特定的接口拥有。只有在负载平衡这样更复杂的设置中,这种行为才会引发问题。
https://sysctl-explorer.net/net/ipv4/arp_过滤器/
这是一个不好的默认,但linux首先是主机,并且路由器在列表中的某个位置。虽然它的本意是“让事情正常工作”,但它可能会造成混乱,但如果arp到达错误的界面,您的网络已经一团糟(S)。
(将其设置为"1“以停止这种proxy_arp行为)
https://networkengineering.stackexchange.com/questions/83071
复制相似问题