BIRD » Historique » Version 11
« Précédent -
Version 11/55
(diff) -
Suivant » -
Version actuelle
Laurent GUERBY, 05/04/2012 19:41
BIRD¶
Implémentation GPL du protocole BGP
http://bird.network.cz/
Volontaires¶
- Laurent GUERBY
- autre
HOWTO¶
- ou intervenir sur le code de BIRD ?
- proposition ici
Spécification du projet¶
- http://lists.tetaneutral.net/pipermail/technique/2012-March/000230.html
- http://www.toulibre.org/archives/toulouse-ll/2012-March/006926.html
Temps estimé une semaine pour quelqu'un qui connait le C mais pas le code de BIRD.
From: Benjamin Cama
To: Laurent GUERBY
Cc: adminsys
Subject: Proposition d'amélioration pour BIRD
Date: Tue, 06 Mar 2012 01:18:31 +0100
Bonjour,
BIRD est un démon de routage qui est utilisé chez FDN pour gérer le
routage de ses abonnés, de ses services, et également des FAI locaux
avec qui il partage sa collecte ADSL. Ce démon est configuré sur deux
machines qui collectent les lignes ADSL avec basculement automatique
(failover) de l'une à l'autre en cas de besoin ou de problème. Ces
lignes sont collectées en L2TP grâce au logiciel l2tpns.
Actuellement, l2tpns ajoute/supprime les routes des abonnés quand il se
connectent/déconnectent automatiquement, dans la table de routage du
kernel. BIRD extrait ces informations du kernel pour les propager en BGP
à d'autres routeurs. Les FAI locaux ayant des interconnexions diverses
avec FDN et des adressages différents, filtrer les routes ainsi
importées du kernel fait intervenir des filtres qui peuvent devenir
complexes.
Une solution serait de filtrer uniquement sur le «â¯protocoleâ¯Â» de la
route, ainsi qu'indiqué par le kernel. En effet, chaque route contenue
dans les tables de routage du kernel contient un champ qui indique le
«â¯protocoleâ¯Â» qui a ajouté cette route, et l2tpns renseigne cette
information quand il en ajoute une (c'est une version patchée pour faire
ça, cf http://dolka.fr/code/l2tpns.git ). Cela est visible par le
mot-clé «â¯protoâ¯Â» dans les routes affichées par l'utilitaire iproute2
(le protocole n'est pas visible avec l'ancien utilitaire «â¯routeâ¯Â»).
Nous pourrions ainsi importer les routes de l2tpns uniquement en
filtrant sur cet attribut.
Malheureusement, BIRD ne sait actuellement pas filtrer sur cet attribut
(cf le thread
http://www.mail-archive.com/bird-users@atrey.karlin.mff.cuni.cz/msg01425.html
entre autres). Le travail consisterait donc en l'implémentation d'un
attribut «â¯kernel protocolâ¯Â» (ou autre meilleur nom) dans les
âroute entryâ de BIRD afin de pouvoir filtrer dessus.
Le site de BIRD est http://bird.network.cz/ et présente leur dépôt git
où se trouve le code. Une bonne compréhension des principes de BIRD
(assez déroutant quand on est habitué à d'autres démons de routage) est
nécessaire avant de se lancer dans le projet.
Merci et bon courage à celui qui voudra bien se lancer là -dedansâ¯!
benjamin
Date: Tue, 06 Mar 2012 12:06:52 +0100
Je viens de voir qu'il existe déjà certains attributs spécifiques aux
routes kernel de linux qui sont utilisés dans bird, cf
http://bird.network.cz/?get_doc&f=bird-6.html#ss6.4
en particulier krt_realm (qui pourrait être intéressant pour nous pour
classifier les routes des FAI locauxâ¯; je ne connaissais pas cet
attribut). Ãa ne devrait pas être trop dur de se baser dessus pour faire
l'équivalent «â¯krt_protoâ¯Â».
Date: Tue, 06 Mar 2012 12:28:21 +0100
Pour préciser ma pensée, j'ai lu
http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH07.web.html
et des realms différents pourraient être assignés à chaque FAI local dès
qu'un paquet rentre du tun depuis ses IP, ou de l'interco. Ainsi, on
pourrait facilement les repérer, et par exemple les null-router s'ils
veulent passer par la route par défaut de FDN. Comme ça, on «â¯sépareâ¯Â»
bien les trafics.
Juste une idée comme ça.
Date: Tue, 06 Mar 2012 12:18:35 +0100
Et des fois, on se demande WTFâ¯?â¯:
% cat /etc/iproute2/rt_realms # # reserved values # 0 cosmos # # local # #1 inr.ac #2 inr.ruhep #3 freenet #4 radio-msu #5 russia #6 internet
benjamin
Date: Sun, 11 Mar 2012 02:26:46 +0100
J'ai commencé à regarder. En fait le champ protocol est déjà présent
dans les structures de données de bird et netlink le renseigne correctement;
fichier nest/route.h, ligne 209:
struct { /* Routes generated by krt sync (both temporary and inherited ones) */
s8 src; /* Alleged route source (see krt.h) */
u8 proto; /* Kernel source protocol ID */
u8 type; /* Kernel route type */
u8 seen; /* Seen during last scan */
u32 metric; /* Kernel metric */
} krt;
Du coup il faut juste adapter le parser et l'interpréteur.
Jérémie
Date: Sun, 11 Mar 2012 13:05:28 +0100
J'ai rajouté l'accès à deux attributs depuis les filtres: krt_source et krt_proto.
Ils ont la même signification, la seule différence c'est que krt_proto est plus précis et est OS-dependent
mais n'est renseigné qu'avec netlink.
Le code est ici:
http://solaria.dimino.org/gitweb/?p=bird.git;a=summary
Les valeurs possibles pour krt_source sont:
KRT_SRC_BIRD
KRT_SRC_REDIRECT
KRT_SRC_ALIEN
KRT_SRC_KERNEL
et pour krt_proto (avec netlink uniquement):
KRT_PROTO_UNSPEC
KRT_PROTO_REDIRECT
KRT_PROTO_KERNEL
KRT_PROTO_BOOT
KRT_PROTO_STATIC
KRT_PROTO_GATED
KRT_PROTO_RA
KRT_PROTO_MRT
KRT_PROTO_ZEBRA
KRT_PROTO_BIRD
KRT_PROTO_DNROUTED
KRT_PROTO_XORP
KRT_PROTO_NTK
KRT_PROTO_DHCP
Jérémie
Misc¶
From: Ondrej Zajicek <santiago@crfreenet.org> To: Tapio Haapala <tapio.haapala@f-solutions.fi> Cc: bird-users@network.cz Subject: Re: bgp community loggin/export Date: Thu, 8 Mar 2012 11:29:25 +0100 As cmmunities already answered by others, i just note that for traffic accounting probably the better way than using iptables is to use ip realms for routes (route attribute krt_realm in BIRD), kernel automatically keeps statistics for different realms.