Projet

Général

Profil

BIRD » Historique » Version 52

Laurent GUERBY, 03/05/2014 19:38

1 11 Laurent GUERBY
{{>toc}}
2 11 Laurent GUERBY
3 1 Laurent GUERBY
h1. BIRD
4 1 Laurent GUERBY
5 52 Laurent GUERBY
Implémentation GPL du protocole [[BGP]]
6 3 Laurent GUERBY
http://bird.network.cz/
7 3 Laurent GUERBY
8 12 Laurent GUERBY
cheat sheet
9 12 Laurent GUERBY
http://bird.mpls.in/projects/mpls-bird/wiki/Bird_cheatsheet
10 12 Laurent GUERBY
11 14 Laurent GUERBY
http://vincent.bernat.im/en/blog/2011-dns-anycast.html
12 14 Laurent GUERBY
https://git.nic.cz/redmine/projects/bird/wiki/OSPF_example
13 14 Laurent GUERBY
14 16 Laurent GUERBY
bird related software
15 16 Laurent GUERBY
https://redmine.labs.nic.cz/projects/bird/wiki/Related
16 14 Laurent GUERBY
17 24 Laurent GUERBY
bird to mail
18 24 Laurent GUERBY
http://sourceforge.net/projects/swatch/
19 24 Laurent GUERBY
http://mmonit.com/monit/
20 26 Laurent GUERBY
http://simple-evcorr.sourceforge.net/
21 1 Laurent GUERBY
22 52 Laurent GUERBY
a tool that maintains the ROA table in BIRD, i.e.,  automatically adds and deletes ROA information
23 52 Laurent GUERBY
https://github.com/rtrlib/bird-rtrlib-cli
24 52 Laurent GUERBY
25 17 Laurent GUERBY
h2. Support ou Donation
26 1 Laurent GUERBY
27 18 Laurent GUERBY
Site : http://bird.network.cz/?support
28 52 Laurent GUERBY
Courriel de présentation : http://lists.tetalab.org/pipermail/tetaneutral/2013-May/001742.html
29 17 Laurent GUERBY
30 17 Laurent GUERBY
* Pour
31 17 Laurent GUERBY
32 17 Laurent GUERBY
# Laurent GUERBY (entre 100 et 500 euros suivant dispo)
33 19 Raphaël Durand
# Solarus
34 21 bikepunk bikepunk
# bikepunk
35 22 Matthieu Herrb
# Matthieu Herrb
36 23 Mehdi Abaakouk
# Mehdi Abaakouk
37 20 Raphaël Durand
# Autre
38 17 Laurent GUERBY
39 17 Laurent GUERBY
* Contre
40 17 Laurent GUERBY
# Autre
41 17 Laurent GUERBY
42 17 Laurent GUERBY
43 3 Laurent GUERBY
h2. Volontaires
44 3 Laurent GUERBY
45 3 Laurent GUERBY
* Laurent GUERBY
46 3 Laurent GUERBY
* autre
47 3 Laurent GUERBY
48 4 Laurent GUERBY
h2. HOWTO
49 4 Laurent GUERBY
50 1 Laurent GUERBY
* ou intervenir sur le code de BIRD ?
51 4 Laurent GUERBY
* proposition ici
52 1 Laurent GUERBY
53 52 Laurent GUERBY
h2. Spécification du projet
54 1 Laurent GUERBY
55 5 Laurent GUERBY
* http://lists.tetaneutral.net/pipermail/technique/2012-March/000230.html
56 5 Laurent GUERBY
* http://www.toulibre.org/archives/toulouse-ll/2012-March/006926.html
57 4 Laurent GUERBY
58 52 Laurent GUERBY
Temps estimé une semaine pour quelqu'un qui connait le C mais pas le code de BIRD.
59 1 Laurent GUERBY
60 1 Laurent GUERBY
From: Benjamin Cama 
61 1 Laurent GUERBY
To: Laurent GUERBY 
62 1 Laurent GUERBY
Cc: adminsys 
63 52 Laurent GUERBY
Subject: Proposition d'amélioration pour BIRD
64 1 Laurent GUERBY
Date: Tue, 06 Mar 2012 01:18:31 +0100
65 1 Laurent GUERBY
66 1 Laurent GUERBY
Bonjour,
67 1 Laurent GUERBY
68 52 Laurent GUERBY
BIRD est un démon de routage qui est utilisé chez FDN pour gérer le
69 52 Laurent GUERBY
routage de ses abonnés, de ses services, et également des FAI locaux
70 52 Laurent GUERBY
avec qui il partage sa collecte ADSL. Ce démon est configuré sur deux
71 1 Laurent GUERBY
machines qui collectent les lignes ADSL avec basculement automatique
72 52 Laurent GUERBY
(failover) de l'une à l'autre en cas de besoin ou de problème. Ces
73 52 Laurent GUERBY
lignes sont collectées en L2TP grâce au logiciel l2tpns.
74 1 Laurent GUERBY
75 52 Laurent GUERBY
Actuellement, l2tpns ajoute/supprime les routes des abonnés quand il se
76 52 Laurent GUERBY
connectent/déconnectent automatiquement, dans la table de routage du
77 1 Laurent GUERBY
kernel. BIRD extrait ces informations du kernel pour les propager en BGP
78 52 Laurent GUERBY
à d'autres routeurs. Les FAI locaux ayant des interconnexions diverses
79 52 Laurent GUERBY
avec FDN et des adressages différents, filtrer les routes ainsi
80 52 Laurent GUERBY
importées du kernel fait intervenir des filtres qui peuvent devenir
81 1 Laurent GUERBY
complexes.
82 1 Laurent GUERBY
83 52 Laurent GUERBY
Une solution serait de filtrer uniquement sur le « protocole » de la
84 52 Laurent GUERBY
route, ainsi qu'indiqué par le kernel. En effet, chaque route contenue
85 1 Laurent GUERBY
dans les tables de routage du kernel contient un champ qui indique le
86 52 Laurent GUERBY
« protocole » qui a ajouté cette route, et l2tpns renseigne cette
87 52 Laurent GUERBY
information quand il en ajoute une (c'est une version patchée pour faire
88 52 Laurent GUERBY
ça, cf http://dolka.fr/code/l2tpns.git ). Cela est visible par le
89 52 Laurent GUERBY
mot-clé « proto » dans les routes affichées par l'utilitaire iproute2
90 52 Laurent GUERBY
(le protocole n'est pas visible avec l'ancien utilitaire « route »).
91 1 Laurent GUERBY
Nous pourrions ainsi importer les routes de l2tpns uniquement en
92 1 Laurent GUERBY
filtrant sur cet attribut.
93 1 Laurent GUERBY
94 1 Laurent GUERBY
Malheureusement, BIRD ne sait actuellement pas filtrer sur cet attribut
95 1 Laurent GUERBY
(cf le thread
96 1 Laurent GUERBY
http://www.mail-archive.com/bird-users@atrey.karlin.mff.cuni.cz/msg01425.html 
97 52 Laurent GUERBY
entre autres). Le travail consisterait donc en l'implémentation d'un 
98 52 Laurent GUERBY
attribut « kernel protocol » (ou autre meilleur nom) dans les 
99 52 Laurent GUERBY
“route entry” de BIRD afin de pouvoir filtrer dessus.
100 6 Laurent GUERBY
101 52 Laurent GUERBY
Le site de BIRD est http://bird.network.cz/ et présente leur dépôt git
102 52 Laurent GUERBY
où se trouve le code. Une bonne compréhension des principes de BIRD
103 52 Laurent GUERBY
(assez déroutant quand on est habitué à d'autres démons de routage) est
104 52 Laurent GUERBY
nécessaire avant de se lancer dans le projet.
105 6 Laurent GUERBY
106 52 Laurent GUERBY
Merci et bon courage à celui qui voudra bien se lancer là-dedans !
107 6 Laurent GUERBY
108 6 Laurent GUERBY
benjamin
109 6 Laurent GUERBY
110 6 Laurent GUERBY
Date: 	Tue, 06 Mar 2012 12:06:52 +0100
111 6 Laurent GUERBY
112 52 Laurent GUERBY
Je viens de voir qu'il existe déjà certains attributs spécifiques aux
113 52 Laurent GUERBY
routes kernel de linux qui sont utilisés dans bird, cf
114 1 Laurent GUERBY
http://bird.network.cz/?get_doc&f=bird-6.html#ss6.4
115 52 Laurent GUERBY
en particulier krt_realm (qui pourrait être intéressant pour nous pour
116 52 Laurent GUERBY
classifier les routes des FAI locaux ; je ne connaissais pas cet
117 52 Laurent GUERBY
attribut). Ça ne devrait pas être trop dur de se baser dessus pour faire
118 52 Laurent GUERBY
l'équivalent « krt_proto ».
119 6 Laurent GUERBY
120 6 Laurent GUERBY
Date: 	Tue, 06 Mar 2012 12:28:21 +0100
121 6 Laurent GUERBY
122 52 Laurent GUERBY
Pour préciser ma pensée, j'ai lu
123 6 Laurent GUERBY
http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH07.web.html
124 52 Laurent GUERBY
et des realms différents pourraient être assignés à chaque FAI local dès
125 6 Laurent GUERBY
qu'un paquet rentre du tun depuis ses IP, ou de l'interco. Ainsi, on
126 52 Laurent GUERBY
pourrait facilement les repérer, et par exemple les null-router s'ils
127 52 Laurent GUERBY
veulent passer par la route par défaut de FDN. Comme ça, on « sépare »
128 1 Laurent GUERBY
bien les trafics.
129 1 Laurent GUERBY
130 52 Laurent GUERBY
Juste une idée comme ça.
131 6 Laurent GUERBY
132 6 Laurent GUERBY
Date: 	Tue, 06 Mar 2012 12:18:35 +0100
133 6 Laurent GUERBY
134 52 Laurent GUERBY
Et des fois, on se demande WTF ? :
135 6 Laurent GUERBY
136 6 Laurent GUERBY
<pre>
137 6 Laurent GUERBY
% cat /etc/iproute2/rt_realms
138 6 Laurent GUERBY
#
139 6 Laurent GUERBY
# reserved values
140 7 Laurent GUERBY
#
141 6 Laurent GUERBY
0       cosmos
142 6 Laurent GUERBY
#
143 8 Jérémie Dimino
# local
144 8 Jérémie Dimino
#
145 8 Jérémie Dimino
#1      inr.ac
146 8 Jérémie Dimino
#2      inr.ruhep
147 8 Jérémie Dimino
#3      freenet
148 8 Jérémie Dimino
#4      radio-msu
149 8 Jérémie Dimino
#5      russia
150 8 Jérémie Dimino
#6      internet
151 8 Jérémie Dimino
</pre>
152 8 Jérémie Dimino
153 8 Jérémie Dimino
benjamin
154 8 Jérémie Dimino
155 8 Jérémie Dimino
Date:   Sun, 11 Mar 2012 02:26:46 +0100
156 8 Jérémie Dimino
157 52 Laurent GUERBY
J'ai commencé à regarder. En fait le champ protocol est déjà présent
158 52 Laurent GUERBY
dans les structures de données de bird et netlink le renseigne correctement;
159 1 Laurent GUERBY
fichier nest/route.h, ligne 209:
160 8 Jérémie Dimino
161 8 Jérémie Dimino
<pre><code class="C">
162 8 Jérémie Dimino
    struct {				/* Routes generated by krt sync (both temporary and inherited ones) */
163 9 Jérémie Dimino
      s8 src;				/* Alleged route source (see krt.h) */
164 9 Jérémie Dimino
      u8 proto;				/* Kernel source protocol ID */
165 9 Jérémie Dimino
      u8 type;				/* Kernel route type */
166 9 Jérémie Dimino
      u8 seen;				/* Seen during last scan */
167 9 Jérémie Dimino
      u32 metric;			/* Kernel metric */
168 9 Jérémie Dimino
    } krt;
169 9 Jérémie Dimino
</pre>
170 9 Jérémie Dimino
171 52 Laurent GUERBY
Du coup il faut juste adapter le parser et l'interpréteur.
172 9 Jérémie Dimino
173 52 Laurent GUERBY
Jérémie
174 10 Jérémie Dimino
175 10 Jérémie Dimino
Date: Sun, 11 Mar 2012 13:05:28 +0100
176 10 Jérémie Dimino
177 52 Laurent GUERBY
J'ai rajouté l'accès à deux attributs depuis les filtres: krt_source et krt_proto.
178 52 Laurent GUERBY
Ils ont la même signification, la seule différence c'est que krt_proto est plus précis et est OS-dependent
179 52 Laurent GUERBY
mais n'est renseigné qu'avec netlink.
180 10 Jérémie Dimino
181 10 Jérémie Dimino
Le code est ici:
182 10 Jérémie Dimino
183 10 Jérémie Dimino
http://solaria.dimino.org/gitweb/?p=bird.git;a=summary
184 10 Jérémie Dimino
185 10 Jérémie Dimino
Les valeurs possibles pour krt_source sont:
186 10 Jérémie Dimino
187 10 Jérémie Dimino
* @KRT_SRC_BIRD@
188 10 Jérémie Dimino
* @KRT_SRC_REDIRECT@
189 10 Jérémie Dimino
* @KRT_SRC_ALIEN@
190 10 Jérémie Dimino
* @KRT_SRC_KERNEL@
191 10 Jérémie Dimino
192 10 Jérémie Dimino
et pour krt_proto (avec netlink uniquement):
193 10 Jérémie Dimino
194 10 Jérémie Dimino
* @KRT_PROTO_UNSPEC@
195 10 Jérémie Dimino
* @KRT_PROTO_REDIRECT@
196 10 Jérémie Dimino
* @KRT_PROTO_KERNEL@
197 10 Jérémie Dimino
* @KRT_PROTO_BOOT@
198 9 Jérémie Dimino
* @KRT_PROTO_STATIC@
199 11 Laurent GUERBY
* @KRT_PROTO_GATED@
200 11 Laurent GUERBY
* @KRT_PROTO_RA@
201 11 Laurent GUERBY
* @KRT_PROTO_MRT@
202 11 Laurent GUERBY
* @KRT_PROTO_ZEBRA@
203 11 Laurent GUERBY
* @KRT_PROTO_BIRD@
204 11 Laurent GUERBY
* @KRT_PROTO_DNROUTED@
205 11 Laurent GUERBY
* @KRT_PROTO_XORP@
206 11 Laurent GUERBY
* @KRT_PROTO_NTK@
207 11 Laurent GUERBY
* @KRT_PROTO_DHCP@
208 11 Laurent GUERBY
209 52 Laurent GUERBY
Jérémie
210 11 Laurent GUERBY
211 11 Laurent GUERBY
h2. Misc
212 11 Laurent GUERBY
213 11 Laurent GUERBY
<pre>
214 15 Laurent GUERBY
From: 	Ondrej Zajicek <santiago@crfreenet.org>
215 15 Laurent GUERBY
To: 	Tapio Haapala <tapio.haapala@f-solutions.fi>
216 15 Laurent GUERBY
Cc: 	bird-users@network.cz
217 26 Laurent GUERBY
Subject: 	Re: bgp community loggin/export
218 26 Laurent GUERBY
Date: 	Thu, 8 Mar 2012 11:29:25 +0100
219 25 Laurent GUERBY
220 25 Laurent GUERBY
As cmmunities already answered by others, i just note that for traffic
221 25 Laurent GUERBY
accounting probably the better way than using iptables is to use ip
222 25 Laurent GUERBY
realms for routes (route attribute krt_realm in BIRD), kernel
223 25 Laurent GUERBY
automatically keeps statistics for different realms.
224 25 Laurent GUERBY
</pre>
225 25 Laurent GUERBY
226 25 Laurent GUERBY
h2. Misc
227 26 Laurent GUERBY
228 26 Laurent GUERBY
h3. Misc Routes
229 26 Laurent GUERBY
230 26 Laurent GUERBY
If you need to create some routes just for the purpose of exporting them
231 26 Laurent GUERBY
to BIRD, you could create them as unreachable routes:
232 26 Laurent GUERBY
233 26 Laurent GUERBY
ip route add unreachable 192.168.1.0/24
234 26 Laurent GUERBY
235 26 Laurent GUERBY
So you don't have to specify a next hop or an iface. When such route is
236 25 Laurent GUERBY
exported to OSPF, only the prefix matters.
237 15 Laurent GUERBY
238 15 Laurent GUERBY
h3. import or export
239 15 Laurent GUERBY
240 15 Laurent GUERBY
So for each protocol :
241 15 Laurent GUERBY
- you *import* route from the protocol to the bird routing table
242 15 Laurent GUERBY
- you *export* route to the protocol from the birdrouting table
243 15 Laurent GUERBY
244 15 Laurent GUERBY
Reminber also, that the bird routing table is not the kernel routing table.
245 15 Laurent GUERBY
246 15 Laurent GUERBY
h3. Static
247 15 Laurent GUERBY
248 15 Laurent GUERBY
<pre>
249 15 Laurent GUERBY
Subject: 	RE: BGP and Redistribute Static with AS-Prepend
250 15 Laurent GUERBY
Date: 	Thu, 3 Jan 2013 07:49:55 +0000 (01/03/2013 08:49:55 AM)
251 15 Laurent GUERBY
252 15 Laurent GUERBY
protocol static {
253 15 Laurent GUERBY
  route 2.2.2.2/32 via 10.1.2.1; 
254 15 Laurent GUERBY
}
255 15 Laurent GUERBY
256 15 Laurent GUERBY
protocol bgp test {
257 15 Laurent GUERBY
258 15 Laurent GUERBY
   local as 65501;
259 15 Laurent GUERBY
260 15 Laurent GUERBY
   neighbor 10.2.3.3 as 65501;
261 15 Laurent GUERBY
262 15 Laurent GUERBY
   export filter {
263 15 Laurent GUERBY
264 15 Laurent GUERBY
     if ( source = RTS_STATIC && net = 2.2.2.2/32 ) then {
265 15 Laurent GUERBY
266 15 Laurent GUERBY
       bgp_path.empty;
267 15 Laurent GUERBY
268 15 Laurent GUERBY
      bgp_path.prepend(65502);
269 1 Laurent GUERBY
270 1 Laurent GUERBY
       bgp_path.prepend(65501);
271 1 Laurent GUERBY
272 1 Laurent GUERBY
       accept;
273 1 Laurent GUERBY
274 1 Laurent GUERBY
     };
275 1 Laurent GUERBY
276 1 Laurent GUERBY
   };
277 1 Laurent GUERBY
278 1 Laurent GUERBY
};
279 1 Laurent GUERBY
</pre>