在本课中,你将了解边界网关协议(BGP)以及如何监控它并对常见问题进行故障排除。
完成本课后,你应该能够实现上图显示的目标。
通过在BGP中展示能力,你将能够监控和检查BGP通信状态,并对最常见的BGP问题进行故障排除。
在本节中,你将回顾BGP及其组件。
AS是同一管理下的一组路由器和网络。每个AS都由一个唯一的编号标识,通常运行内部网关协议(IGP),如OSPF或RIP。
BGP发言者或对等是发送和接收BGP路由信息的路由器。两个BGP对等之间的连接被称为BGP会话。
BGP路由器将路由信息存储在三个逻辑表中:
● RIB-in表包含任何过滤前从其他BGP路由器接收的所有路由信息。
● 本地RIB表在过滤后包含相同的信息。
● RIB-out表包含选择向其他BGP路由器发布广告的BGP路由信息。
上图展示了一个总结BGP流程的流程图。BGP路由器将其从其他路由器接收的BGP路由存储在RIB-in表中。BGP路由器应用过滤器,生成的路由存储在本地RIB表中。然后,BGP路由器添加从路由表重新分配的路由,并应用另一个过滤器(出站)。BGP路由器发布生成的路由。
BGP基于AS路径路由流量。每个AS路径都包含属性,BGP使用这些属性来选择每个目的地的最佳路线。其中一个属性是AS_Path,其中包含流量必须通过的AS才能到达目的地。
BGP属性有四种类型:
● 众所周知的强制性
● 众所周知的自由裁量
● 可选传递,可以从一个AS传递到另一个AS
● 可选非传递,不能从一个AS传递到另一个AS
上图显示了FortiGate支持的BGP属性及其属性类型的列表。
FortiGate在路由选择过程中使用一些BGP属性。如果同一目的地的多个路由的所有属性都匹配,并且启用了ECMP,FortiGate将在最多10条BGP路由之间共享流量。如果你不启用ECMP,FortiGate将使用通往BGP路由器ID最低的路由器的路由。
在本节中,你将了解BGP故障排除的工具和技巧。
这张幻灯片显示了BGP邻居状态的流程图,以及它们是如何变化的:
● Idle:初始状态。
● Connect:等待成功的三路TCP连接
● Active:无法建立TCP会话
● OpenSent:等待对等的OPEN消息
● OpenConfirm:等待对等的keepalive消息
● Established:对等已经成功交换OPEN和keepalive消息
上图显示了你通常首先使用的调试命令,以概述BGP状态及其所有邻居的状态。上图显示了本地路由器ID和AS。对于每个邻居,输出还显示以下内容:
● AS
● 数据包数量
● 邻居连接多久了
State/PfxRcd列列出了建立后的相邻状态和前缀数量。如果状态未建立,此列将显示BGP状态。如果状态已建立,此列将显示本地FortiGate从该邻居那里收到的前缀数量。
你可以使用上图显示的命令来获取有关每个BGP邻居的详细信息。信息包括对等IP地址、对等路由器ID、远程AS、BGP状态、各种计时器和消息计数器。
该信息还显示了宣布和接受的前缀数量、会话下降的次数以及会话最后一次重置的时间。
上图显示了可用于获取本地路由器广告前缀的详细信息的命令。状态代码信息标识了与路由条目关联的代码。对于每个前缀,该命令显示以下内容:
● 下一跳IP地址
● 本地偏好
● 权重
● AS路径
上图显示了可用于显示邻居发布的路由的命令。
你可以使用get router info bgp network命令查看BGP数据库信息。BGP数据库列出所有邻居发布的前缀,以及本地路由器。
上图还突出显示了用于BGP表的源代码。IGP的i表示网络命令用于发布路由。这适用于表中的最后一条路由10.20.30.0/24。所有其他发布的路由都标记为?,表示从其他路由协议发布的路由使用了重新分配。e为EGP,只用于传统路线广告,很少见到。
FortiGate可以记录路由事件,这使你能够获得仅在运行BGP实时调试时才可用的信息。默认情况下,启用了BGP事件日志记录。你可以使用上图显示的命令禁用BGP事件日志记录。
你可以在GUI上查看与BGP相关的路由器事件。你可以单击任何已登录的条目来查看详细信息。
在本节中,你将了解常见的BGP问题以及如何解决这些问题。
按照以下步骤对两个对点之间的BGP问题进行故障排除:
● 检查本地路由器是否能够到达远程对等端。
● 确保TCP端口179在对等之间没有被阻止。
● 检查TCP会话。
● 检查BGP会话。
如果建立了BGP会话,请检查每个对等端接收和发布的前缀。
上图显示了可用于启用和禁用BGP实时调试的命令。请注意,此示例允许从事件和级别信息中调试输出。
一个常见的问题是,FortiOS转发信息库(FIB)中没有通往BGP邻居的路由。如果是这种情况,实时BGP应用程序调试将输出上图显示的消息:Sock Status: 113-No route to host。也可以使用get router info bgp summary和get router info bgp neighbor命令来验证这一点。两个输出都显示状态为活动状态,这意味着无法建立TCP三方握手。解决方案是确保BGP邻居的IP地址有活动路由。
上图和下一张图片展示了成功建立一个BGP会话的实时调试输出示例。在本例中,输出显示会话何时进入OpenSent状态。
上图显示了从邻居那里收到keepalive消息后包含OpenConfirm状态的实时调试输出,以及连接的建立。
输出还列出了BGP会话建立后FortiGate收到的前缀。
你可以使用上图显示的命令在两个对等之间重新启动BGP会话。你还可以使用此命令执行BGP软重置,这迫使两个对等端交换完整的BGP路由表。
上图显示的故障排除示例中,FGT-A没有收到FGT-B发布的前缀。这种情况下的问题是,前缀的子网掩码在FGT-B上配置错误,促使Fortios不向其他BGP对等端发布网络。
在故障排除场景2中,有两种方法可以解决问题。第一个方法是手动更改前缀,以表示FGT-B上分配给端口3的网络。这是推荐的方法。将子网掩码从255.255.0.0更改为255.255.255.0允许FGT-B向其对等发布前缀。
另一个选项是禁用set network-import-check。这是防止FortiOS发布错误配置路由的安全机制。通常不建议禁用该机制,因为该机制可以确保只发布正确的网络。
在上图所示的场景中,FGT-A没有收到FGT-B的预期前缀。FGT-A配置了prefix-list-in,用于控制邻居发布的网络是否被路由表接受。
仔细观察前缀配置会发现,172.16.0.0/16子网中的任何对等广告网络都不被BGP数据库接受。
首选的解决方案是添加一个额外的规则,特别是允许在同一前缀列表中使用172.16.54.0前缀。与防火墙策略不同,列表不是自上而下评估的。列表中的每条规则都经过检查。
配置附加规则后,前缀被接受并添加到BGP数据库中。
上图展示了你在本课中涵盖的目标。
通过掌握本课中涵盖的目标,你了解了BGP组件和命令,以及如何对BGP的常见问题进行故障排除。