Projet

Général

Profil

BIRD » Historique » Version 55

Laurent GUERBY, 20/09/2014 14:12

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