如何在 BGP 路由中找到环路

How do you find loops in a BGP routing

我正在尝试编写 eBGP 扬声器的简化版本。对于导入策略,我想确保我导入的任何新路由都没有任何循环。我构建的路由 table 看起来像这样。

10.0.0.0/8 3 8 11
10.8.0.0/8 4
192.168.0.0/16 3 5 6
192.168.43.0/24 (local)

我的问题是,如何检查路由环路?

现在我已经尝试了多种方法,我认为查看是否存在任何循环的正确方法是使用 all 路由中的路由构建 DAG table。然后检查新路线是否在图中创建了一个循环。但是我无法理解在创建 DAG 时是否应该只查看某些前缀。

在 eBGP 中,环路检测基于 ASPATH。您不能接受包含您自己的 ASN 的 ASPATH 路由。

这是在 RFC4271 中定义的:

如果BGP路由的AS_PATH属性包含AS环路,则BGP 路线应排除在第 2 阶段决策功能之外。作为循环 检测是通过扫描完整的 AS 路径(如在 AS_PATH 属性),并检查自治系统编号 本地系统不会出现在 AS 路径中。 BGP的操作 配置为接受具有自己自治的路由的扬声器 AS 路径中的系统号不在本文档的范围内。

提示:如果你想实现一个BGP Speaker,我建议你仔细阅读所有从RFC4271开始的相关RFC。

至于 iBGP,没有环路检测需要,因为 iBGP 发言者不会将 iBGP 获悉的路由转发到另一个 iBGP 发言者。您需要以全网状方式连接所有 iBGP 扬声器,使用路由反射器或联盟。

关于这些原则的文章(对于 iBGP):http://www.rogerperkin.co.uk/routing-protocols/bgp/bgp-confederation-vs-route-reflector/