Exa-Networks/exabgp · GitHub
mercredi 8 avril 2015 à 16:29GuiGui's Show - Liens 08/04/2015
ExaBGP est un bon outil mais la doc' est vraiment foireuse (pas à jour, contradictoire,...). Voici quelques notes pour noob débutant. :D
D'abord, un bon de conf' qui fonctionne :
« neighbor 198.18.0.2 {
router-id 198.18.0.1;
local-address 198.18.0.1;
local-as 65000;
peer-as 65000;
process test {
run "test.py";
encoder json;
receive {
parsed;
updates;
keepalive;
notification;
neighbor-changes;
}
}
} »
Ici on monte une session BGP avec 198.18.0.2, du classique. On veut lancer un programme qui récupère les updates/notif/keepalive/flap du pair BGP. On veut tout ça au format json et pré-parsé par exabgp (pas du brut). Le programme recevra les messages sur stdin et pourra écrire sur stdout pour envoyer des messages à exaBGP. Attention à ne pas mettre le bloc « process » en dehors du bloc « neighbor » ! Si vous faites cela, votre programme sera exécuté mais ne recevra pas les évent BGP, exaBGP ne sachant pas à quel pair BGP le lier !
Attention aussi : un « parsed | packets | consolidated » global est nécessaire même si vous précisez « <message_type> parsed|packets|consolidated » ...
Une partie de la configuration se fait avec des variables d'environnement. Exemple : env exabgp.log.destination=stdout exabgp.log.all=true exabgp exabgp.conf
Pour passer des commandes (injection de routes, par exemple), il y a deux moyens : un programme lancé par exabgp ou utiliser une socket unix. Les commandes dispos : https://github.com/Exa-Networks/exabgp/wiki/Controlling-ExaBGP-:-interacting-from-the-API . Pour la socket : env exabgp.api.socket="/tmp/exa.sock" exabgp exabgp.conf puis socat UNIX-CONNECT:/var/run/blabla/nameofthe.sock STDIN . Apparemment, on peut aussi utiliser des pipes nommés... Attention : show route affiche uniquement les routes que vous avez injectées, pas celles reçues depuis le pair BGP !
(Permalink)
ExaBGP est un bon outil mais la doc' est vraiment foireuse (pas à jour, contradictoire,...). Voici quelques notes pour noob débutant. :D
D'abord, un bon de conf' qui fonctionne :
« neighbor 198.18.0.2 {
router-id 198.18.0.1;
local-address 198.18.0.1;
local-as 65000;
peer-as 65000;
process test {
run "test.py";
encoder json;
receive {
parsed;
updates;
keepalive;
notification;
neighbor-changes;
}
}
} »
Ici on monte une session BGP avec 198.18.0.2, du classique. On veut lancer un programme qui récupère les updates/notif/keepalive/flap du pair BGP. On veut tout ça au format json et pré-parsé par exabgp (pas du brut). Le programme recevra les messages sur stdin et pourra écrire sur stdout pour envoyer des messages à exaBGP. Attention à ne pas mettre le bloc « process » en dehors du bloc « neighbor » ! Si vous faites cela, votre programme sera exécuté mais ne recevra pas les évent BGP, exaBGP ne sachant pas à quel pair BGP le lier !
Attention aussi : un « parsed | packets | consolidated » global est nécessaire même si vous précisez « <message_type> parsed|packets|consolidated » ...
Une partie de la configuration se fait avec des variables d'environnement. Exemple : env exabgp.log.destination=stdout exabgp.log.all=true exabgp exabgp.conf
Pour passer des commandes (injection de routes, par exemple), il y a deux moyens : un programme lancé par exabgp ou utiliser une socket unix. Les commandes dispos : https://github.com/Exa-Networks/exabgp/wiki/Controlling-ExaBGP-:-interacting-from-the-API . Pour la socket : env exabgp.api.socket="/tmp/exa.sock" exabgp exabgp.conf puis socat UNIX-CONNECT:/var/run/blabla/nameofthe.sock STDIN . Apparemment, on peut aussi utiliser des pipes nommés... Attention : show route affiche uniquement les routes que vous avez injectées, pas celles reçues depuis le pair BGP !
(Permalink)