Skip to content

BMP 监控器

BMP 监控器用于接收路由器或测试客户端发送的 BMP 数据,并在本地查看客户端、BGP session、Loc-RIB、路由明细和统计报告。

先选对页面

这几个页面都在看 BMP 路由,但回答的问题不同。所有页面都基于 current RIB 快照:SQLite 只保存每个 Scope 当前(active/stale)的路由,不保存历史事件流水。

页面最适合回答的问题主要数据范围能否看到已撤销路由
BGP 会话某个 Peer、地址族、RIB 阶段当前有哪些路由?一个 Peer Scope 的 current RIB不能;入口来自 current route
BGP Loc-RIB某个 Loc-RIB Instance 当前有哪些路由?一个 Loc-RIB Scope 的 current RIB不能;入口来自 current route
路由矩阵当前全局五阶段哪里存在缺口或属性不一致?当前/ stale 路由快照,跨 Scope 分析不能;它不是历史分析
路由追踪一个 Prefix / NLRI 在 Pre-In 到 Post-Out 各阶段是什么样?当前/ stale 路由,按五阶段横向组装不能;成功撤销的路由不再保存
会话/Loc-RIB 统计设备上报的 Statistics Report 当前值是什么?Statistics Report 最新投影不适用

典型排障顺序是:先在“路由矩阵”发现异常候选,点击“追踪”进入“路由追踪”核对五阶段,再打开路由卡片详情查看完整属性。

已实现能力

  • BMP v3 / v4 报文接收。
  • BMPv4 TLV draft-19 / draft-20 可配置。
  • Linux 6.7+ 上的 TCP-AO 双向认证,可同时选择多个对端 Profile 并按 IPv4/IPv6 CIDR 匹配密钥。
  • Linux 上的 TCP MD5 兼容认证,支持 1–32 个互不重叠的对端 Profile。
  • Initiation、Termination、Peer Up、Peer Down、Route Monitoring、Statistics Report 处理。
  • 客户端连接列表。
  • BGP session 列表和 session RIB 路由列表。
  • Loc-RIB instance 列表和 Loc-RIB 路由列表。
  • BMP 路由按 AFI/SAFI 归类到页面地址组。
  • IPv4 / IPv6 单播、VPN、Label Unicast、MVPN、FlowSpec、QP、L2VPN EVPN、BGP-LS、BGP-LS VPN 地址组解析。
  • 路由状态过滤:active、stale、all。
  • 前缀关键字过滤。
  • 路由详情查询。
  • BGP 原始报文解析摘要按需查询。
  • BMPv4 Path Marking TLV 展示。
  • 路由矩阵:五阶段 RIB 漏斗、异常候选和证据等级。
  • 路由追踪:按 IP、CIDR 或复杂 NLRI 横向关联 Pre-In、Post-In、Loc-RIB、Pre-Out、Post-Out。
  • 非 IP NLRI 查询:EVPN、BGP-LS、FlowSpec 等使用 parser 生成的可读语义标识。
  • 过期路由清理。
  • 只读 HTTP API 查询。

核心亮点:

  • 多地址组覆盖:BMP Route Monitoring 和 Loc-RIB 可识别 IPv4-UNC、IPv6-UNC、VPNv4、VPNv6、IPv4/IPv6 Label Unicast、IPv4/IPv6 MVPN、IPv4/IPv6 FlowSpec、IPv4/IPv6 QP、L2VPN EVPN、BGP-LS 和 BGP-LS VPN。
  • Add-Path 友好:路由 key 和列表字段包含 pathId,同一 RD、前缀、掩码下的多路径可以分开查看。
  • BMPv4 TLV:支持 draft-19 / draft-20 切换,Route Monitoring、Statistics Report 和 Path Marking TLV 可在列表或详情中查看。
  • Loc-RIB instance:Local-RIB 按 instance 维度拆分,便于查看不同路由表实例的路由与统计项。
  • 只保存 current 投影:数据库回答“现在有没有”;已撤销路由随即从 RIB 投影删除,不会伪装成 current row,也不保留历史事件。
  • 证据分级:路由矩阵和路由追踪区分“设备上报”“观测事实”“推测分析”,避免把跨 Scope 关联误写成设备真实策略日志。

页面

BMP 配置和客户端

配置 BMP 监听端口、认证方式、BMPv4 TLV draft 和 Path Marking TLV 类型。页面下方展示当前 BMP 客户端及其认证状态。

BMP 配置和客户端信息

按钮说明:

按钮功能
启动BMP / BMP已启动按监听端口、认证方式和 TLV draft 启动 BMP 服务;启动后显示运行状态。
停止BMP停止 BMP 服务、断开当前客户端连接,并关闭所有 BMP Client 独立监控窗口。
前往 TCP-AO 设置打开 BMP、RPKI-RTR 共享的 TCP-AO Profile 和密钥轮换设置。
前往 TCP MD5 设置打开 BMP、RPKI-RTR 共享的 TCP MD5 对端与密钥 Profile。
Client 监控为当前客户端打开或切换到唯一的独立监控窗口;窗口内可查看会话、Loc-RIB 和两类统计。
详情打开当前 BMP 客户端的连接、Initiation TLV 和 Termination 信息。

客户端详情:

BMP 客户端详情

注意:

  • draft-20 的 Route Monitoring BGP Message TLV 类型为 7
  • draft-19 的 Route Monitoring BGP Message TLV 类型为 4
  • 如果发送端的 draft 与页面配置不一致,日志可能出现 does not contain mandatory BGP Message TLV

TCP-AO 认证

TCP-AO 只支持 Ubuntu 24.04+、Linux kernel 6.7+ 且 CONFIG_TCP_AO=y 的桌面环境,并要求应用包含与当前 CPU 架构匹配的原生 helper。首次配置时先到“设置 → TCP-AO”保存 Profile 和轮换密钥;完整的 Key ID、算法、时间边界和密钥轮换规则见 TCP-AO 设置

BMP 的选择和验证规则如下:

  • 认证方式为“无认证”时,服务使用普通 IPv4/IPv6 TCP 监听;认证方式为“TCP-AO”时,整个监听器强制使用 TCP-AO,不会同时开放普通 TCP 入口,也不会在认证失败时回退。
  • 一次可选择 1–32 个 Profile。每个 Profile 的地址或 CIDR 既是允许连接的对端范围,也是该范围使用的密钥计划;IPv4 和 IPv6 可同时选择。
  • helper 按连接的真实对端地址匹配 Profile。为了避免同一地址对应多套密钥,同一 BMP 监听器所选范围不能重叠;未落入所选范围的对端不会进入 BMP Worker。
  • 启动前会验证所有所选 Profile 均存在、密钥可解密、当前恰好有一把发送有效密钥、后续发送窗口连续,并核对 helper 报告的地址族、Profile 数和密钥数。任一项失败时 BMP 不会启动。
  • BMP 配置仅保存 Profile ID,渲染层不会取得密钥明文。主进程在启动时解密密钥并一次性交给 helper;运行期间修改 Profile 后,需要停止并重新启动 BMP 才会加载新计划。
  • TCP-AO 由 Linux 内核双向执行:入站段必须通过对端密钥和 RcvID 验证,NetNexus 发出的 ACK/数据段使用当前 SndID 签名。客户端列表的“认证”列会显示 TCP-AO · Profile 名称,详情中可核对允许的对端范围。

如果最后一把发送密钥到期且没有后继密钥、系统时钟不可用或回拨、发生全局轮换失败,或者 helper 异常退出,BMP 会安全停止监听并断开全部客户端;选择多个 Profile 时,其中任一 Profile 的发送计划耗尽都会停止整个 BMP 服务。配置页会保留明确的红色运行时故障提示,不会改用未认证 TCP。修正密钥计划、系统时间或运行环境后,重新启动 BMP 即可清除提示。

TCP MD5 认证

TCP MD5 用于兼容仍使用 TCP MD5 Signature Option 的设备;新部署优先选择 TCP-AO。先在“设置 → TCP MD5”为对端地址或 CIDR 保存 1–80 字节共享密钥,然后在 BMP 配置中选择 1–32 个互不重叠的 Profile。正确密钥连接由 Linux 内核验证,错误或缺失密钥会被拒绝;未匹配 Profile 的来源不会被转发给 BMP Worker。客户端列表的“认证”列会显示 TCP MD5 · Profile 名称。修改密钥或对端后需重启 BMP,详见 TCP MD5 设置

Client 独立监控窗口

每个 BMP Client 只打开一个独立窗口;重复点击“Client 监控”会复用已有窗口,不会为同一份数据再建立第二个 renderer。窗口顶部提供四个页签:

  • BGP 会话
  • Loc-RIB
  • 会话统计
  • Loc-RIB 统计

原生标题栏随当前页签显示 BGP 会话 / Loc-RIB / 会话统计 / Loc-RIB 统计 · Client 名称 · IP。Client 信息只出现在原生标题栏,页面正文不再重复显示 Client 标题或 Client Tab。

Session、Loc-RIB 和 Statistics Report 更新只投递给对应 Client 的独立窗口;该 Client 窗口不存在时不产生这些 renderer IPC。主窗口中的路由矩阵和路由追踪仅在页面激活期间订阅轻量失效信号,再按需重新查询,不接收完整更新明细。

独立监控页按 URL 中的 clientKey 向 Worker 查询单个 Client,不维护或传输完整 Client 列表;完整列表只供 BMP 配置页使用。停止 BMP 服务会直接关闭全部 Client 监控窗口并解除订阅。

BGP Session

统一 Client 窗口中的“BGP 会话”页签展示该客户端下的 BGP peer session 和 session RIB 路由。

BMP 客户端和 BGP 监控对等体信息

按钮说明:

按钮功能
查询 / 刷新按客户端和过滤条件重新加载 Session 或路由数据。
详情在 Session 列表中查看 peer 详情;在路由列表中查看单条路由详情。
解析BGP按需解析并展示该路由携带的原始 BGP 报文摘要。
清理 stale清理当前过滤范围内的 stale 路由。

Session 详情:

BMP Session 详情

Session RIB 路由详情:

BMP Session 路由详情

路由详情抽屉展示由 NLRI identity、payload、Path Attributes、Scope 和连接信息组装出的完整对象。

路由列表包含地址组、pathIdrd、前缀、掩码、下一跳、AS Path、路由状态等字段。IPv4/IPv6 单播没有携带 RD 时,页面和存储按 0:0 处理,避免路由 key 歧义。

路由操作:

  • 查询路由详情。
  • 查询 BGP 原始报文解析摘要。
  • 清理 stale 路由。

Session RIB 适合检查:

  • per-peer 的 Adj-RIB-In / Route Monitoring 数据。
  • 同一前缀下不同 pathId 的 Add-Path 路由。
  • VPN、MVPN、QP 等携带 RD 或扩展 NLRI 的地址组。

Loc-RIB

统一 Client 窗口中的“Loc-RIB”页签展示该客户端的 Local-RIB instance 和 Loc-RIB 路由。窗口只接收对应客户端的 BMP 更新批次;关闭后会立即退订。

BMP 监控 BGP 路由

按钮说明:

按钮功能
查询 / 刷新按客户端、Instance 和过滤条件重新加载 Loc-RIB 数据。
详情在 Instance 列表中查看 Loc-RIB instance 详情;在路由列表中查看单条路由详情。
解析BGP按需解析 Loc-RIB 路由携带的原始 BGP 报文摘要。
清理 stale清理当前 Instance 下的 stale Loc-RIB 路由。

Loc-RIB instance 详情:

BMP Loc-RIB Instance 详情

Loc-RIB 路由详情:

BMP Loc-RIB 路由详情

Loc-RIB 使用 instance 维度查询,支持路由列表、路由详情和 stale 路由清理。页面会保留 instance 名称、RD、地址组、pathId 和路由状态,便于对比不同 Loc-RIB 实例中的同一前缀。

Session 和 Loc-RIB 的详情入口都来自 current route。路由成功 withdraw 或 purge 且没有重新宣告后,不会继续留在列表中,数据库也不再保留它的记录。

路由矩阵

“路由矩阵”面向全局 current RIB 快照,不要求先知道某个 Peer。开启右上角“分析”开关后,页面按 Client、VRF / Table、地址族、异常类型、路由状态和 Prefix / NLRI 过滤数据,并同时生成五阶段漏斗和异常矩阵。

BMP 路由矩阵:五阶段漏斗和异常候选

分析是在 BMP Worker 内对 SQLite 的 current RIB 做一次流式扫描:数据库按“同一 Client、同一 NLRI”的顺序吐出路由,Worker 逐条 NLRI 评估五阶段并只保留异常、计数和筛选面板,不会把整张 RIB 装进内存,百万级路由也能完成。扫描期间页面显示进度;邻居正在全表上报时,重建会等写入队列空闲后再开始,避免每次 EOR 都重头扫描。异常明细每类最多保留前 20,000 条(页面会提示),异常计数和漏斗始终是全量统计。分析开启后,后续的单条路由变化只重新评估受影响的 NLRI;Peer Up/Down、EOR 等 Scope 级变化则触发一次重建。

五个阶段的标准含义:

页面阶段BMP RIB 视图含义
Pre-InPre-policy Adj-RIB-In入站策略处理前收到的路由
Post-InPost-policy Adj-RIB-In入站策略处理后的路由
Loc-RIBLocal RIB设备上报的本地选路结果
Pre-OutPre-policy Adj-RIB-Out出站策略处理前准备发布的路由
Post-OutPost-policy Adj-RIB-Out出站策略处理后的路由

漏斗的数量差用于快速缩小排障范围,但“前一阶段有、后一阶段没有”本身不能证明设备执行了某条策略。设备也可能没有启用对应 BMP RIB 视图,或者不同阶段来自无法确定配对关系的 Peer / Instance。

异常矩阵当前识别的候选类型:

异常类型页面含义典型后续动作
入站策略后缺失Pre-In 有、Post-In 无检查 Path Marking、入站策略和 BMP 视图配置
收到但未选中Post-In 有、Loc-RIB 无检查选路条件;没有 Path Marking 时只作为推测
已选中但未生成出口Loc-RIB 有、Pre-Out 无检查目标 Peer、地址族和出口生成条件
出站策略后缺失Pre-Out 有、Post-Out 无检查 Path Marking 和出站策略
多出口属性不一致同一 NLRI 的多个 Post-Out 属性不同比较 Next Hop、AS Path、Community 等出口属性

证据标签必须按下面口径理解:

  • “设备上报”:结论直接使用设备携带的 Path Marking TLV 等字段。
  • “观测事实”:数据库确实观测到了路由或属性差异,但不声明设备内部原因。
  • “推测分析”:根据跨 Scope、跨阶段快照关联得到的排障线索,需要回到设备策略和选路日志核验。

矩阵没有单独的详情抽屉。每行的“追踪”按钮会携带 Prefix / NLRI 和状态条件跳转到“路由追踪”,用五阶段路由卡片继续核对。

路由追踪

“路由追踪”用于回答“同一个查询目标在各个 RIB 阶段分别是什么样”。输入 IP、CIDR 或复杂 NLRI 标识后,页面把命中路由按 Pre-In、Post-In、Loc-RIB、Pre-Out、Post-Out 横向排列,并展示相邻阶段的属性差异和证据等级。

BMP 路由追踪:同一 Prefix 的五阶段视图

查询规则:

  • IP / CIDR 使用网络前缀语义匹配。
  • EVPN、BGP-LS、FlowSpec 等使用 parser 生成的 NLRI 可读标识做文本匹配。
  • Current 只看 active route,Stale 只看 stale route,All 同时包含两者。
  • 成功 withdraw 后 current row 已删除,不会继续出现在追踪结果中。

图中的连线表示页面尝试把同一查询目标在相邻阶段进行关联。不同阶段属于不同 Scope,数据库没有一个“设备内部策略流水号”可以天然串起五段,因此连线和属性配对属于观测关联,不是原始策略执行日志。

点击任一路由卡片可打开完整路由详情:

BMP 路由追踪的路由详情

点击 Inbound / Outbound 属性差异卡片,可查看参与比较的原始关联对象和差异字段:

BMP 路由追踪的属性差异详情

统计报告

统一 Client 窗口中的“会话统计”和“Loc-RIB 统计”页签展示该 Client 的 BMP Statistics Report 当前内存数据,不再查询或渲染 Client 列表:

  • session statistics(同一 peer 使用唯一会话页签,在 Pre/Post Adj-RIB-In/Out 四个 RIB 阶段间切换)
  • Loc-RIB statistics
  • BMPv4 TLV 信息
  • per-AFI/SAFI 统计项

统计项中的 per-AFI/SAFI 数据用于观察不同地址组的路由量,例如 IPv4/IPv6 单播、VPN、MVPN、QP、EVPN 和 BGP-LS 类路由。

BMP BGP 会话统计

按钮说明:

按钮功能
查询 / 刷新重新加载指定客户端的 Session Statistics Report。
详情打开单条 Statistics Report 详情,查看统计项和 TLV。

Session 统计详情:

BMP Session 统计详情

BMP Loc-RIB 统计

按钮说明:

按钮功能
查询 / 刷新重新加载指定客户端和 Instance 的 Loc-RIB Statistics Report。
详情打开单条 Loc-RIB Statistics Report 详情。

Loc-RIB 统计详情:

BMP Loc-RIB 统计详情

页面数据从哪里来

页面上没有一张“全字段路由表”。current 路由在查询时由 Scope、current 分区行、NLRI identity、扩展 payload、Path Attributes、Source 和 Connection 组装。

页面/操作首要定位键主要读取范围
Session 路由列表和详情scope_idScope 对应的一张 bmp_current_routes_peer_* 分区
Loc-RIB 路由列表和详情scope_idScope 对应的一张 bmp_current_routes_loc_rib_* 分区
路由矩阵页面筛选条件跨 current 分区读取当前快照并生成五阶段异常候选
路由追踪IP / CIDR / NLRI + route state按地址族剪枝后跨 Scope 组装五阶段结果

完整表结构、JOIN、字段来源、事务、固定分区和清理规则见 BMP SQLite 数据库说明,其中“0. 先看这一节”按实际页面调用链给出了等价 SQL 和组装顺序。

外部 API

BMP 查询接口由外部 HTTP API 提供。API 是只读的,不负责启动 BMP 服务。使用前需要在设置页启用 HTTP API,并在 BMP 页面启动 BMP。

详见 外部 API 文档

注意事项

  • SQLite 是 BMP RIB 的权威存储;完整路由不再保存在 worker 内存中。数据库表、字段、关联和自动清理规则详见 BMP SQLite 数据库说明
  • BMP 客户端断开后会保留为离线节点;Session、Loc-RIB 和未超过保留期的路由可在 BMP 重启后从 SQLite 恢复,并以 stale 状态展示。
  • 路由矩阵和路由追踪基于 current/stale 快照,不等价于设备内部策略执行日志;缺少 Path Marking 时尤其不能把推测关联当成设备上报原因。
  • 打开 debug/info 日志时,高频 BMP Route Monitoring 会产生大量日志,可能影响 CPU 和磁盘 IO。

基于 MIT License 发布