查看博客目录

抓住 BGP路由每一次改变:开源神器OpenBMP 实时监控实战

BMP 协议(BGP Monitoring Protocol)

BMP协议是用于实时监控BGP(边界网关协议)运行状态和路由处理轨迹的网络协议,旨在提升网络监控效率和安全性。

核心功能

  • BGP运行状态监控

    :包括对等体关系的建立与解除、路由信息刷新等。

  • 路由处理轨迹监控

    :记录BGP路由的加工过程(如入口/出口策略应用)。

  • 数据上报

    :被监控设备通过TCP会话向监控服务器主动发送状态信息,无需服务器指令。

消息类型

BMP会话包含以下消息类型:

消息类型描述
Initiation初始化消息,包含厂商信息、版本号等。
PU (Peer Up Notification)上报 BGP 对等体连接建立。
RM (Route Monitoring)上报路由状态,如 Adj-RIB-In。
PD (Peer Down Notification)上报 BGP 对等体连接中断。
SR (Stats Reports)定期发送统计信息,如路由数量。
ROFT (Route Policy and Attribute Trace)实时上报路由处理轨迹。

应用场景

  • 网络运营商

    :监控ISP、数据中心等大规模网络的BGP状态。

  • 企业网络

    :优化路由策略,识别潜在故障。

  • 安全防护

    :及时发现异常路由行为,保障网络稳定性。

技术特点

  • 单向通信

    :仅被监控设备向服务器发送数据,服务器不响应。

  • 实时性

    :支持增量更新和定期统计,减少数据延迟。

OpenBMP

OpenBMP是一个开源的BGP监控平台,它通过实现BMP协议来提供全网级别的BGP路由可视性 关于此项目可参考:https://github.com/SNAS/openbmp

💡 核心优势总结

传统 BGP 监控OpenBMP 解决方案
❌ 只能看到最终路由表✅ 记录完整的路由变化过程
❌ 单设备视角有限✅ 全网统一监控视图
❌ 历史数据缺失✅ 完整的时间序列数据
❌ 故障排查困难✅ 快速精准的根因分析
❌ 安全威胁难发现✅ 实时安全事件检测

1、环境准备

在开始安装前,确保你的系统满足以下要求:

  • 🖥️ Linux/Unix系统(本文以centos为例)
  • 🌐 支持BMP协议的网络设备(交换机、路由器)

2、安装示例(使用 Docker Compose)

[root@localhost BMP]# wget https://raw.githubusercontent.com/OpenBMP/obmp-docker/main/docker-compose.yml
[root@localhost BMP]# git clone https://github.com/OpenBMP/obmp-grafana.git
[root@localhost BMP]# mkdir -p /var/openbmp
[root@localhost BMP]# export OBMP_DATA_ROOT=/var/openbmp
[root@localhost BMP]# sudo mkdir -p $OBMP_DATA_ROOT
[root@localhost BMP]# sudo chmod -R 7777 $OBMP_DATA_ROOT
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/config
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/kafka-data
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/zk-data
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/zk-log
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/postgres/data
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/postgres/ts
[root@localhost BMP]# mkdir -p $OBMP_DATA_ROOT/grafana
[root@localhost BMP]# chmod -R 7777 $OBMP_DATA_ROOT/*
[root@localhost BMP]# cp -r obmp-grafana/dashboards obmp-grafana/provisioning $OBMP_DATA_ROOT/grafana/
[root@localhost BMP]# vim docker-compose.yml
# 修改文件中的 MEM 字段,将 Docker 使用的内存改为 2G,测试环境足够使用。
[root@localhost BMP]# OBMP_DATA_ROOT=/var/openbmp docker-compose -f ./docker-compose.yml -p obmp up -d

# 查看容器状态
[root@localhost BMP]# docker ps
CONTAINER ID   IMAGE                         STATUS        PORTS
...            confluentinc/cp-kafka:6.0.2  Up             0.0.0.0:9092->9092/tcp
...            openbmp/psql-app:latest      Up             0.0.0.0:9005->9005/tcp
...            openbmp/postgres:latest      Up             0.0.0.0:5432->5432/tcp
...            openbmp/collector:latest     Up             0.0.0.0:5000->5000/tcp
...            grafana/grafana:latest       Up             0.0.0.0:3000->3000/tcp

[root@localhost BMP]# OBMP_DATA_ROOT=/var/openbmp docker-compose -p obmp down  # 停止和删除所有容器

网络设备 BMP 配置示例

网络设备配置BMP将BGP相关信息上报OPENBMP

华为交换机示例

拓扑如下

抓住 BGP路由每一次改变:开源神器OpenBMP 实时监控实战 配图 1

以下为BGP配置和BMP配置

CE12800-1:

bgp 100
 router-id 1.1.1.1
 peer 12.1.1.2 as-number 200
 ipv4-family unicast
  import-route ospf 1
  peer 12.1.1.2 enable
#
bmp
 session 192.168.225.128
  tcp connect port 5000

CE12800-2:

bgp 200
 router-id 2.2.2.2
 peer 12.1.1.1 as-number 100
 ipv4-family unicast
  import-route ospf 1
  peer 12.1.1.1 enable
#
bmp
 session 192.168.225.128
  tcp connect port 5000

效果展示

上面已经使用docker安装好了OPENBMP,安装好后默认也已经安装好了grafana,并且也已经内置模版了,可以直接访问使用:

http://服务器IP:3000

抓住 BGP路由每一次改变:开源神器OpenBMP 实时监控实战 配图 2

1、可以查看对应路由器的在线状态,以及对应 BGP 邻居的信息

抓住 BGP路由每一次改变:开源神器OpenBMP 实时监控实战 配图 3

2、可以查看对应 AS 历史通告的路由信息

抓住 BGP路由每一次改变:开源神器OpenBMP 实时监控实战 配图 4

3、查看当前 RIB 状态、历史前缀信息

抓住 BGP路由每一次改变:开源神器OpenBMP 实时监控实战 配图 5

因为上述为简单的实验环境所以信息有限,实际场景可以查看更多信息,功能还是比较强大的,有兴趣的小伙伴们可以尝试部署感受下效果

总结:OpenBMP通过将BMP协议开源化、平台化,彻底改变了BGP网络监控的方式,从被动的”救火式”运维转变为主动的、预防性的、数据驱动的网络运维模式。