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