Aller au contenu

OSPF Watcher

OSPF Watcher est un outil de surveillance des changements de topologie OSPF. Il écoute passivement le plan de contrôle OSPF — via une adjacence GRE ou BGP-LS — et enregistre chaque changement et/ou l'exporte (via Logstash ou Fluent Bit) vers ELK, Zabbix, les WebHooks, et le tableau de bord de surveillance de Topolograph. Tout est livré sous forme de conteneurs, donc le démarrage est rapide.

vadims06/ospfwatcher

Architecture OSPF Watcher + Topolograph avec règles XDP

Événements détectés

  • Adjacence de voisin OSPF en service/hors service
  • Changements de coût de lien OSPF
  • Réseaux OSPF apparaissant/disparaissant
  • Attributs TE OSPF (via LSA opaque ou BGP-LS) : groupe administratif, bande passante maximale du lien, bande passante réservable maximale, bande passante non réservée, métrique TE par défaut, et groupe de liens à risque partagé (SRLG)
  • Changements de rôle de nœud OSPF : un routeur devenant (ou cessant d'être) un ABR (Area Border Router), un ASBR (AS Boundary Router), ou entrant/sortant du max-metric (RFC 3137, routeur stub — tous les liens de transit annoncés à la métrique maximale pour détourner le trafic de transit ; l'équivalent OSPF du bit overload d'IS-IS)

Surveillance OSPF — événement de nouveau sous-réseau

Surveillance OSPF — changement de métrique, ancien et nouveau coût

Surveillance OSPF — événements de lien en service/hors service sur la chronologie

Le connecter

La connexion elle-même est mise en place sous Importer la topologie :

  • Mode GRE — FRR établit une adjacence OSPF via un tunnel GRE. Un filtre XDP OSPF garantit que le Watcher reste en écoute seule.
  • Mode BGP-LS — le routeur exporte la topologie OSPF via BGP-LS ; GoBGP + le forwarder alimentent le Watcher. Nécessite l'image vadims06/ospf-watcher:v3.1.0 ou plus récente.

Compatibilité

Les changements de réseau OSPF apparaissent sur le graphe Topolograph à partir de topolograph v2.27 ou ultérieur.

Laboratoire rapide (containerlab)

Un laboratoire prêt à l'emploi sous containerlab/frr01 vous permet d'observer les changements OSPF sans aucun matériel réel :

./containerlab/frr01/prepare.sh
sudo clab deploy --topo ./containerlab/frr01/frr01.clab.yml

Logs du laboratoire containerlab OSPF Watcher

Dans cette configuration minimale, le Watcher imprime les changements de topologie dans un fichier texte. Ajoutez Topolograph et/ou ELK pour les visualiser et les rechercher — voir la table des tailles de déploiement.

Pas d'équipement ? Mode test

Définissez TEST_MODE=True pour rejouer une LSDB de démonstration et des événements d'exemple (perte d'adjacence, changement de métrique) de bout en bout à travers le pipeline.

Format du journal d'événements

Les événements du Watcher sont de simples lignes séparées par des virgules. Un événement d'hôte (adjacence) :

2023-01-01T00:00:00Z,demo-watcher,host,10.10.10.4,down,10.10.10.5,01Jan2023_00h00m00s_7_hosts,0,1234,192.168.145.5

10.10.10.5 a détecté que l'hôte 10.10.10.4, sur l'interface avec 192.168.145.5, dans la zone 0 / AS 1234, est passé hors service à l'horodatage indiqué.

Un événement de changement de métrique :

2023-01-01T00:00:00Z,demo-watcher,network,192.168.13.0/24,changed,old_cost:10,new_cost:12,10.10.10.1,01Jan2023_00h00m00s_7_hosts,0.0.0.0,1234,internal,0

10.10.10.1 a détecté que la métrique du réseau stub interne 192.168.13.0/24 est passée de 10 à 12.

Un événement de changement d'indicateur de nœud :

2023-01-01T00:00:00Z,demo-watcher,node,10.1.1.3,changed,attr:abr,old:0,new:1,10.1.1.3,01Jan2023_00h00m00s_7_hosts,0,1234

10.1.1.3 s'est annoncé comme ABR (abr 01). Un événement est émis par indicateur modifié (abr, asbr, maxmetric pour OSPF ; overload, attached pour IS-IS). Entrer en max-metric émet aussi un événement metric par lien, puisque le coût de chaque lien de transit saute à son maximum.

Ces enregistrements sont ce que Logstash/Fluent Bit transmettent vers ELK, Zabbix et Webhooks.

Mode écoute seule (XDP)

En mode GRE, le Watcher exécute une véritable instance FRR — il est donc essentiel qu'il ne puisse jamais injecter de préfixes dans votre domaine OSPF. Un filtre XDP inspecte chaque message OSPF que FRR tente d'envoyer et rejette tout ce qui annonce plus que le réseau du tunnel GRE du Watcher lui-même.

Wireshark avant/après le filtre XDP

Par exemple, si 8.8.8.8/32 était accidentellement redistribué sur le Watcher, le LSA 5 est rejeté par XDP et n'atteint jamais le réseau. La même protection s'applique aux messages Database Description et aux réseaux stub supplémentaires dans le LSA 1.

Commandes utiles :

# Watch XDP drop logs
sudo cat /sys/kernel/debug/tracing/trace_pipe

# Confirm the XDP program is attached to the Watcher's interface
ip l show dev it-vhost1025      # look for "prog/xdp id ..."

# Enable / disable the filter
sudo docker run -it --rm -v ./:/home/watcher/watcher/ --cap-add=NET_ADMIN \
  -u root --network host vadims06/ospf-watcher:latest \
  python3 ./client.py --action enable_xdp --watcher_num <num>

Dépannage

Mode GRE — confirmez l'adjacence :

show ip ospf neighbor

Votre équipement doit apparaître comme voisin. Sinon, exécutez le script de diagnostic du Watcher (voir la section dépannage du dépôt).

Mode BGP-LS — le Watcher ne publie vers Topolograph qu'une fois la session BGP établie. Vérifiez-la :

docker logs watcher<num>-bgpls-ospf-bgplswatcher
docker exec -it watcher<num>-bgpls-ospf-bgplswatcher gobgp neighbor
docker exec -it watcher<num>-bgpls-ospf-bgplswatcher gobgp global rib -a ls

Voir Session BGP-LS pour le déroulé complet de la vérification.


Voir aussi : IS-IS Watcher · ELK / Kibana · Zabbix · Webhooks