Avant-propos
Il se trouve que lors de l'analyse des raisons de la dégradation des services réseau, vous souhaitez disposer d'une machine à remonter le temps. Eh bien, ou du moins quelque chose qui enregistrerait l'historique des mesures d'itinéraires ... Si vous vous êtes déjà retrouvé dans une telle situation, alors ce sera peut-être intéressant.

Les réseaux modernes basés sur le routage de paquets IP, ou plutôt les services qu'ils fournissent, sont en fait contrôlés par BGP. Ce protocole a été conçu à la fin des années 1980 sur trois serviettes. Oui, depuis lors, de nombreuses fonctionnalités ont été ajoutées à ce protocole, notamment l'échange d'informations de routage VPN, des règles de filtrage du trafic et d'autres choses utiles, mais la base reste la même, décrite sur trois serviettes. Et cela a son plus, car ce protocole est très simple dans son essence.
Mais je voulais parler non pas de sa simplicité, mais de "agiter les poings après un combat", auquel sont souvent confrontés tout service d'exploitation de réseau, ou NOC - centre d'exploitation de réseau (et peut-être centre).
" ", " -, 5 ". 5 . ? . , "" 5 , ? , - , , . - . ( ) . - , . , bgplay. . , , , .
. ( , ). , - ? , .
. , , BGP - exabgp. . , , - python. , . , . python (, GIL), , . ( ) , . BGP (, golang!). ? , , bgp- . . .
Rust — . BGP . exabgp BGP FSM , Rust API, std , . zettabgp, — bgpexplorer.
. Bgpexplorer bgp-, ( route reflector) bgp-, . RIB (Routing Information Database) , . -. - , .
- . , () .
, git rust.
$ git clone https://github.com/wladwm/bgpexplorer
...
$ cd bgpexplorer
$ cargo build
...
. .
Cisco, :
! 65535 ,
router bgp 65535
! , IBGP
neighbor 10.1.1.1 remote-as 65535
!
neighbor 10.1.1.1 update-source Loopback0
!
neighbor 10.1.1.1 transport connection-mode passive
address-family ipv4
!
neighbor 10.1.1.1 activate
!
neighbor 10.1.1.1 route-reflector-client
! ipv4 labeled-unicast
neighbor 10.1.1.1 send-label
address-family vpnv4
! VPNv4
neighbor 10.1.1.1 activate
neighbor 10.1.1.1 send-community extended
$ cat > bgpexplorer.ini <<EOF
[main]
httplisten=0.0.0.0:8080
httproot=contrib
session=s0
whoisjsonconfig=whois.json
[s0]
mode=bmpactive
bgppeer=10.0.0.1
peeras=65535
EOF
main :
httplisten — http
httproot — . index.html .
Whoisjsonconfig whois
Session – , bgp, s0
(s0 ) :
bgppeer — BGP
Peeras —
protolisten — :, BGP BMP
Mode —
mode :
bgppassive —
bgpactive —
bmpactive — BMP
bmppassive — BMP
ini- bgpexplorer, ,
cargo run
.
RIB - IPv4, IPv6, VPN ..
, - .
. , .
community, aspath, nexthop, route-target, route-distinguisher.

Lorsque vous passez le curseur sur ASn, l'adresse des routeurs, une requête vers whois ou DNS sera effectuée et les informations reçues seront affichées dans la fenêtre contextuelle. Parfois c'est long, mais ça peut être utile.

Je serais heureux si cet outil est utile à quelqu'un d'autre. Les problèmes trouvés, les souhaits, les idées, les critiques constructives sont les bienvenus.