Projet

Général

Profil

BIRD » Historique » Version 10

Jérémie Dimino, 11/03/2012 13:14

1 1 Laurent GUERBY
h1. BIRD
2 1 Laurent GUERBY
3 3 Laurent GUERBY
Implémentation GPL du protocole BGP
4 3 Laurent GUERBY
http://bird.network.cz/
5 3 Laurent GUERBY
6 3 Laurent GUERBY
h2. Volontaires
7 3 Laurent GUERBY
8 3 Laurent GUERBY
* Laurent GUERBY
9 3 Laurent GUERBY
* autre
10 3 Laurent GUERBY
11 4 Laurent GUERBY
h2. HOWTO
12 4 Laurent GUERBY
13 4 Laurent GUERBY
* ou intervenir sur le code de BIRD ?
14 4 Laurent GUERBY
* proposition ici
15 4 Laurent GUERBY
16 1 Laurent GUERBY
h2. Spécification du projet
17 4 Laurent GUERBY
18 5 Laurent GUERBY
* http://lists.tetaneutral.net/pipermail/technique/2012-March/000230.html
19 5 Laurent GUERBY
* http://www.toulibre.org/archives/toulouse-ll/2012-March/006926.html
20 5 Laurent GUERBY
21 4 Laurent GUERBY
Temps estimé une semaine pour quelqu'un qui connait le C mais pas le code de BIRD.
22 1 Laurent GUERBY
23 2 Laurent GUERBY
From: Benjamin Cama 
24 2 Laurent GUERBY
To: Laurent GUERBY 
25 2 Laurent GUERBY
Cc: adminsys 
26 1 Laurent GUERBY
Subject: Proposition d'amélioration pour BIRD
27 1 Laurent GUERBY
Date: Tue, 06 Mar 2012 01:18:31 +0100
28 1 Laurent GUERBY
29 1 Laurent GUERBY
Bonjour,
30 1 Laurent GUERBY
31 1 Laurent GUERBY
BIRD est un démon de routage qui est utilisé chez FDN pour gérer le
32 1 Laurent GUERBY
routage de ses abonnés, de ses services, et également des FAI locaux
33 1 Laurent GUERBY
avec qui il partage sa collecte ADSL. Ce démon est configuré sur deux
34 1 Laurent GUERBY
machines qui collectent les lignes ADSL avec basculement automatique
35 1 Laurent GUERBY
(failover) de l'une à l'autre en cas de besoin ou de problème. Ces
36 1 Laurent GUERBY
lignes sont collectées en L2TP grâce au logiciel l2tpns.
37 1 Laurent GUERBY
38 1 Laurent GUERBY
Actuellement, l2tpns ajoute/supprime les routes des abonnés quand il se
39 1 Laurent GUERBY
connectent/déconnectent automatiquement, dans la table de routage du
40 1 Laurent GUERBY
kernel. BIRD extrait ces informations du kernel pour les propager en BGP
41 1 Laurent GUERBY
à d'autres routeurs. Les FAI locaux ayant des interconnexions diverses
42 1 Laurent GUERBY
avec FDN et des adressages différents, filtrer les routes ainsi
43 1 Laurent GUERBY
importées du kernel fait intervenir des filtres qui peuvent devenir
44 1 Laurent GUERBY
complexes.
45 1 Laurent GUERBY
46 1 Laurent GUERBY
Une solution serait de filtrer uniquement sur le « protocole » de la
47 1 Laurent GUERBY
route, ainsi qu'indiqué par le kernel. En effet, chaque route contenue
48 1 Laurent GUERBY
dans les tables de routage du kernel contient un champ qui indique le
49 1 Laurent GUERBY
« protocole » qui a ajouté cette route, et l2tpns renseigne cette
50 1 Laurent GUERBY
information quand il en ajoute une (c'est une version patchée pour faire
51 1 Laurent GUERBY
ça, cf http://dolka.fr/code/l2tpns.git ). Cela est visible par le
52 1 Laurent GUERBY
mot-clé « proto » dans les routes affichées par l'utilitaire iproute2
53 1 Laurent GUERBY
(le protocole n'est pas visible avec l'ancien utilitaire « route »).
54 1 Laurent GUERBY
Nous pourrions ainsi importer les routes de l2tpns uniquement en
55 1 Laurent GUERBY
filtrant sur cet attribut.
56 1 Laurent GUERBY
57 1 Laurent GUERBY
Malheureusement, BIRD ne sait actuellement pas filtrer sur cet attribut
58 1 Laurent GUERBY
(cf le thread
59 1 Laurent GUERBY
http://www.mail-archive.com/bird-users@atrey.karlin.mff.cuni.cz/msg01425.html 
60 1 Laurent GUERBY
entre autres). Le travail consisterait donc en l'implémentation d'un 
61 1 Laurent GUERBY
attribut « kernel protocol » (ou autre meilleur nom) dans les 
62 1 Laurent GUERBY
“route entry” de BIRD afin de pouvoir filtrer dessus.
63 1 Laurent GUERBY
64 1 Laurent GUERBY
Le site de BIRD est http://bird.network.cz/ et présente leur dépôt git
65 1 Laurent GUERBY
où se trouve le code. Une bonne compréhension des principes de BIRD
66 1 Laurent GUERBY
(assez déroutant quand on est habitué à d'autres démons de routage) est
67 1 Laurent GUERBY
nécessaire avant de se lancer dans le projet.
68 1 Laurent GUERBY
69 1 Laurent GUERBY
Merci et bon courage à celui qui voudra bien se lancer là-dedans !
70 1 Laurent GUERBY
71 1 Laurent GUERBY
benjamin
72 6 Laurent GUERBY
73 6 Laurent GUERBY
Date: 	Tue, 06 Mar 2012 12:06:52 +0100
74 6 Laurent GUERBY
75 6 Laurent GUERBY
Je viens de voir qu'il existe déjà certains attributs spécifiques aux
76 6 Laurent GUERBY
routes kernel de linux qui sont utilisés dans bird, cf
77 6 Laurent GUERBY
http://bird.network.cz/?get_doc&f=bird-6.html#ss6.4
78 6 Laurent GUERBY
en particulier krt_realm (qui pourrait être intéressant pour nous pour
79 6 Laurent GUERBY
classifier les routes des FAI locaux ; je ne connaissais pas cet
80 6 Laurent GUERBY
attribut). Ça ne devrait pas être trop dur de se baser dessus pour faire
81 6 Laurent GUERBY
l'équivalent « krt_proto ».
82 6 Laurent GUERBY
83 6 Laurent GUERBY
Date: 	Tue, 06 Mar 2012 12:28:21 +0100
84 6 Laurent GUERBY
85 6 Laurent GUERBY
Pour préciser ma pensée, j'ai lu
86 6 Laurent GUERBY
http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH07.web.html
87 6 Laurent GUERBY
et des realms différents pourraient être assignés à chaque FAI local dès
88 6 Laurent GUERBY
qu'un paquet rentre du tun depuis ses IP, ou de l'interco. Ainsi, on
89 6 Laurent GUERBY
pourrait facilement les repérer, et par exemple les null-router s'ils
90 6 Laurent GUERBY
veulent passer par la route par défaut de FDN. Comme ça, on « sépare »
91 6 Laurent GUERBY
bien les trafics.
92 6 Laurent GUERBY
93 6 Laurent GUERBY
Juste une idée comme ça.
94 6 Laurent GUERBY
95 6 Laurent GUERBY
Date: 	Tue, 06 Mar 2012 12:18:35 +0100
96 6 Laurent GUERBY
97 6 Laurent GUERBY
Et des fois, on se demande WTF ? :
98 6 Laurent GUERBY
99 7 Laurent GUERBY
<pre>
100 6 Laurent GUERBY
% cat /etc/iproute2/rt_realms
101 6 Laurent GUERBY
#
102 6 Laurent GUERBY
# reserved values
103 6 Laurent GUERBY
#
104 6 Laurent GUERBY
0       cosmos
105 6 Laurent GUERBY
#
106 6 Laurent GUERBY
# local
107 6 Laurent GUERBY
#
108 6 Laurent GUERBY
#1      inr.ac
109 6 Laurent GUERBY
#2      inr.ruhep
110 6 Laurent GUERBY
#3      freenet
111 6 Laurent GUERBY
#4      radio-msu
112 6 Laurent GUERBY
#5      russia
113 6 Laurent GUERBY
#6      internet
114 7 Laurent GUERBY
</pre>
115 6 Laurent GUERBY
116 6 Laurent GUERBY
benjamin
117 8 Jérémie Dimino
118 8 Jérémie Dimino
Date:   Sun, 11 Mar 2012 02:26:46 +0100
119 8 Jérémie Dimino
120 8 Jérémie Dimino
J'ai commencé à regarder. En fait le champ protocol est déjà présent
121 8 Jérémie Dimino
dans les structures de données de bird et netlink le renseigne correctement;
122 8 Jérémie Dimino
fichier nest/route.h, ligne 209:
123 8 Jérémie Dimino
124 8 Jérémie Dimino
<pre><code class="C">
125 8 Jérémie Dimino
    struct {				/* Routes generated by krt sync (both temporary and inherited ones) */
126 8 Jérémie Dimino
      s8 src;				/* Alleged route source (see krt.h) */
127 8 Jérémie Dimino
      u8 proto;				/* Kernel source protocol ID */
128 8 Jérémie Dimino
      u8 type;				/* Kernel route type */
129 8 Jérémie Dimino
      u8 seen;				/* Seen during last scan */
130 8 Jérémie Dimino
      u32 metric;			/* Kernel metric */
131 8 Jérémie Dimino
    } krt;
132 8 Jérémie Dimino
</pre>
133 8 Jérémie Dimino
134 8 Jérémie Dimino
Du coup il faut juste adapter le parser et l'interpréteur.
135 8 Jérémie Dimino
136 8 Jérémie Dimino
Jérémie
137 9 Jérémie Dimino
138 9 Jérémie Dimino
Date: Sun, 11 Mar 2012 13:05:28 +0100
139 9 Jérémie Dimino
140 9 Jérémie Dimino
J'ai rajouté l'accès à deux attributs depuis les filtres: krt_source et krt_proto.
141 9 Jérémie Dimino
Ils ont la même signification, la seule différence c'est que krt_proto est plus précis et est OS-dependent
142 9 Jérémie Dimino
mais n'est renseigné qu'avec netlink.
143 9 Jérémie Dimino
144 9 Jérémie Dimino
Le code est ici:
145 9 Jérémie Dimino
146 9 Jérémie Dimino
http://solaria.dimino.org/gitweb/?p=bird.git;a=summary
147 9 Jérémie Dimino
148 10 Jérémie Dimino
Les valeurs possibles pour krt_source sont:
149 10 Jérémie Dimino
150 10 Jérémie Dimino
* @KRT_SRC_BIRD@
151 10 Jérémie Dimino
* @KRT_SRC_REDIRECT@
152 10 Jérémie Dimino
* @KRT_SRC_ALIEN@
153 10 Jérémie Dimino
* @KRT_SRC_KERNEL@
154 10 Jérémie Dimino
155 10 Jérémie Dimino
et pour krt_proto (avec netlink uniquement):
156 10 Jérémie Dimino
157 10 Jérémie Dimino
* @KRT_PROTO_UNSPEC@
158 10 Jérémie Dimino
* @KRT_PROTO_REDIRECT@
159 10 Jérémie Dimino
* @KRT_PROTO_KERNEL@
160 10 Jérémie Dimino
* @KRT_PROTO_BOOT@
161 10 Jérémie Dimino
* @KRT_PROTO_STATIC@
162 10 Jérémie Dimino
* @KRT_PROTO_GATED@
163 10 Jérémie Dimino
* @KRT_PROTO_RA@
164 10 Jérémie Dimino
* @KRT_PROTO_MRT@
165 10 Jérémie Dimino
* @KRT_PROTO_ZEBRA@
166 10 Jérémie Dimino
* @KRT_PROTO_BIRD@
167 10 Jérémie Dimino
* @KRT_PROTO_DNROUTED@
168 10 Jérémie Dimino
* @KRT_PROTO_XORP@
169 10 Jérémie Dimino
* @KRT_PROTO_NTK@
170 10 Jérémie Dimino
* @KRT_PROTO_DHCP@
171 10 Jérémie Dimino
172 9 Jérémie Dimino
Jérémie