我正在设置一组静态路由(这是安全要求,所以不要问我为什么不使用路由协议)。
可以通过指定下一跳来创建静态路由
199.199.199.0 255.255.255.0 199.199.200.1
或者通过指定传出接口
199.199.199.0 255.255.255.0 千兆以太网0/23
在这种情况下,Gi 0/23 的 IP 为 199.199.200.2,并直接连接到 199.199.200.1。还有多个其他静态路由从同一接口发出。
在这种情况下最佳做法是什么?
编辑:基于答案的差异,我不得不对此进行更多研究。根据我的经验,思科不会为您提供两种方法来做同一件事,这就是我发现的。如果接口有多个目的地,则不建议指定接口。以下是我找到的链接,感谢 Vlad H 的准确回答。
http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a00800ef7b2.shtml http://www.cisco.com/en/US/docs/ios/12_2/iproute/command/reference/1rfindp1.html#wp1054112
答案1
如果您未指定下一跳,则应将下一跳路由器配置为执行代理 ARP。将会发生的情况是,每当数据包发送到不在 ARP 表中的新目的地时,您的路由器都会发出 ARP 请求,并且下一跳路由器应代表目的地以其 MAC 进行响应。不建议使用此配置,因为最初执行 ARP 会有延迟,并且如果您有许多这样的路由(甚至更糟,我看到了这样的默认路由!),您会看到内存和高 CPU 问题。
不会出现双重路由查找或类似情况,因为在所有现代路由器上,数据包都将由 CEF 转发。仅指定接口将在 CEF 中为整个路由创建一个 glean 邻接关系(这类似于普通直接连接的广播网络的情况)。然后,当 ARP 到达时,将填充更具体的 /32。
答案2
我必须同意 Vlads 的观点 - 我们曾经遇到过路由器随机崩溃的情况,花了很长时间才找出原因。因为我们将默认路由设置为传出接口,所以它缓存了所有这些 ARP 条目,直到最终 CEF 进程崩溃。当 CEF 崩溃时,其他东西也会失败,例如我们的 VPN。
答案3
有没有最佳实践?这似乎完全取决于您的网络设计需求和目标。我的想法是,如果您不关心流量采用什么物理路径,那么您可以指定下一跳;如果您想指定流量采用的物理路径,并使其始终采用特定的预定义路径,那么您可以指定接口。
答案4
通常指定出接口更好,因为它可以避免第二次路由表查找。如果是以太网,您可能需要同时指定出接口和下一跳 IP 地址。