Projet

Général

Profil

BIRD » Historique » Version 11

Laurent GUERBY, 05/04/2012 19:41

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