下一跳路由器需要代理ARP

网络工程 代理arp
2021-07-11 00:16:03

我正在观看 Cisco 提供的视频课程,我遇到了一个关于代理 ARP 需求的有趣部分:

如果路由器使用使用传出接口而不是下一跳路由器 IP 地址的静态路由,则必须在下一跳路由器上启用代理 ARP。否则,下一跳路由器将不会响应第一跳路由器执行的 ARP 请求。

所以,如果我使用

ip route 10.1.1.0 255.255.255.0 Gi0/0 

下一跳路由器必须启用代理 ARP。

但如果我使用

ip route 10.1.1.0 255.255.255.0 192.168.1.1

那么下一跳路由器不必启用代理 ARP。

它是如何工作的?即使我使用

ip route 10.1.1.0 255.255.255.0 Gi0/0

本地路由器将执行递归查找并最终将下一跳的 IP 地址解析为 192.168.1.1,那么这里有什么区别,为什么下一跳路由器要关心我如何在本地路由器上配置静态路由?

这只是思科的事情吗?

2个回答

本地路由器将执行 [递归] 查找并最终将下一跳的 IP 地址解析为 192.168.1.1

如果你想一分钟,你可能会改变主意。没有什么可递归的,因为根本不知道下一跳。

由于没有下一跳,本地路由器必须假设目的地是直接连接的。因此,它为目标地址发送 ARP。除非下一跳路由器启用了代理 ARP,否则它不会响应 ARP。

代理 ARP 告诉下一跳路由器响应它有路由的任何 ARP。在这种情况下,它将响应目标地址的 ARP。

这似乎与上下文无关......

当非本地目的地对于源来说应该是本地的时,需要代理 ARP。在这种情况下,源是路由器并且没有下一跳路由,目的地应该是路由器本地的。然而,事实并非如此,因此本地目的地的常规 ARP 会失败(因为它在广播域之外)。

在这种情况下,(隐藏的)下一跳路由器必须代表目的地(代理 ARP)回复 ARP 请求以使其显示为本地。代理 ARP 路由器发送自己的 MAC 而不是目的地的 MAC,IP 数据包被发送到路由器并转发到目的地。

代理 ARP 的替代方法是源路由器上的静态 ARP 表条目。

您的示例不起作用,因为目标不是源路由器的本地。

相反,如果源路由器有一个本地接口 10.0.1.1/16 并尝试将数据包转发到 10.0.2.20,它将假定目的地是本地的。但是,目标子网实际上分为 10.0.1.0/24 和 10.0.2.0/24,中间有一个隐藏的网关。这个网关必须用它自己的 MAC 来响应目标 IP 的 ARP 请求,然后简单地转发数据包。

通常,只有当您的网络增长不成比例或设计不合理时,才需要使用 ARP 欺骗。在几乎所有情况下,都会建议进行良好的清理或重新编号。