Project

General

Profile

BIRD » History » Version 26

Laurent GUERBY, 12/07/2013 11:29 AM

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