在 Cisco 2901 上打包的 malloc 故障和 ARP

网络工程 思科 路由 以太网 思科-ios arp
2021-07-16 08:27:41

我在网络和互联网之间有一个 2901。它附带的路由定义如下。

ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/1

当它出现时,使用这样的接口而不是 IP 让我感到奇怪,但我们没有改变它。

我们一直有 mallocfail 错误,我可以追溯到“IP ARP Adjacency”过程。一个表演 arp 带有 60,000 多个条目。这可以解释内存消耗和性能不佳的原因,但我不能 100% 确定为什么会发生这种情况。

我已经看到一些参考资料,如果您使用接口名称,则会导致需要将每个 IP 解析为 MAC 以用于下一跳。

这就是这里发生的事情吗?我怎么知道?

1个回答

显示 arp 返回 60,000 多个条目。这可以解释内存消耗和性能不佳的原因,但我不能 100% 确定为什么会发生这种情况。

当您配置时ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/1,您有效地告诉路由器您已将整个互联网直接连接到 GigabitEthernet 0/1。您的路由器相信您,因此它必须按照默认设置为每个新的目标 IP 地址发送一个 ARP 请求。

如果下一跳路由器配置了代理 ARP (Cisco 路由器上的默认配置),那么这实际上“有效”,直到其中一个路由器像您一样遇到资源耗尽。两个路由器都可能耗尽 CPU(来自 ARP 处理),但由于大量 ARP 缓存,只有您的路由器可能会遇到内存限制。我通常在接口上禁用代理 ARP,以确保我的路由器不会参与这样的错误配置。

您这边的简单解决方案是配置显式 IP 下一跳,而不是指出接口。如果你有自虐倾向,你可以保持路由不变并玩 ARP 超时游戏来避免内存耗尽,但永远不要在生产网络上玩这样的游戏。

默认路由到以太网接口是个坏消息;每个网络工程师都会犯一次这个错误。我自己也是这样学的。如果你真的很不幸,你的 ARP 表已满的原因是因为某些东西(即病毒)决定扫描整个互联网以寻找受害者。