howto/Bird.md
... ...
@@ -10,6 +10,8 @@ Compared to quagga, bird supports multiple routing, which is useful, if you also
10 10
* Replace `<PEER_AS>` the Autonomous System Number of your peer
11 11
* Replace `<PEER_NAME>` a self chosen name for your peer
12 12
13
+### IPV4
14
+
13 15
```
14 16
# /etc/bird/bird.conf
15 17
# Device status
... ...
@@ -146,6 +148,157 @@ protocol bgp <PEER_NAME> from dnpeers {
146 148
};
147 149
```
148 150
151
+### IPV6
152
+
153
+```
154
+#/etc/bird/bird6.conf
155
+protocol device {
156
+ scan time 10;
157
+}
158
+
159
+# filter helpers
160
+#################
161
+
162
+include "/etc/bird/filter6.conf";
163
+
164
+# local configuration
165
+######################
166
+
167
+include "bird/local6.conf";
168
+
169
+# Kernel routing tables
170
+########################
171
+
172
+protocol kernel {
173
+ scan time 20;
174
+ device routes;
175
+ import none;
176
+ export filter {
177
+ krt_prefsrc = OWNIP;
178
+ accept;
179
+ };
180
+}
181
+
182
+# static routes
183
+################
184
+
185
+protocol static {
186
+ route <SUBNET> reject;
187
+}
188
+
189
+template bgp dnpeers {
190
+ local as OWNAS;
191
+ path metric 1;
192
+ import keep filtered;
193
+ import filter {
194
+ if is_valid_network() && !is_self_net() then {
195
+ accept;
196
+ }
197
+ reject;
198
+ };
199
+ export filter {
200
+ if is_valid_network() then {
201
+ accept;
202
+ }
203
+ reject;
204
+ };
205
+ route limit 10000;
206
+}
207
+
208
+include "/etc/bird/peers6/*";
209
+```
210
+
211
+```
212
+# /etc/bird/local6.conf
213
+# should be a unique identifier, use same id as for ipv4
214
+router id <GATEWAY_IP>;
215
+
216
+define OWNAS = <AS>;
217
+define OWNIP = <GATEWAY_IP>;
218
+
219
+function is_self_net() {
220
+ return net ~ [<SUBNET>+];
221
+}
222
+```
223
+
224
+Generate the filter list from the monotone repository
225
+
226
+```
227
+cd net.dn42.registry
228
+ruby utils/bgp-filter.rb < data/filter6.txt > /etc/bird/filter6.conf
229
+```
230
+
231
+example filter list:
232
+
233
+```
234
+function is_valid_network() {
235
+ return net ~ [
236
+ fc00::/8{48,64}, # ULA (undefined)
237
+ fd00::/8{48,64}, # ULA (defined)
238
+ 2001:67c:20c1::/48{48,48}, # E-UTP IPv6
239
+ 2001:bf7::/32{32,128}, # Freifunk (Foerderverein Freie Netzwerke) IPv6 Range
240
+ 2001:67c:20a1::/48{48,48}, # CCC Event Network
241
+ 2001:0470:006c:01d5::/64{64,64}, # Registered IANA
242
+ 2001:0470:006d:0655::/64{64,64},
243
+ 2001:0470:1f09:172d::/64{64,64},
244
+ 2001:0470:1f0b:0592::/64{64,64},
245
+ 2001:0470:1f0b:0bca::/64{64,64},
246
+ 2001:0470:1f0b:1af5::/64{64,64},
247
+ 2001:0470:1f10:0275::/64{64,64},
248
+ 2001:0470:1f12:0004::/64{64,64},
249
+ 2001:0470:5084::/48{48,64},
250
+ 2001:0470:51c6::/48{48,64},
251
+ 2001:0470:73d3::/48{48,64},
252
+ 2001:0470:7972::/48{48,64},
253
+ 2001:0470:9949::/48{48,64},
254
+ 2001:0470:99fc::/48{48,64},
255
+ 2001:0470:9af8::/48{48,64},
256
+ 2001:0470:9ce6::/55{55,64},
257
+ 2001:0470:9f43::/48{48,64},
258
+ 2001:0470:caab::/48{48,64},
259
+ 2001:0470:cd99::/48{48,64},
260
+ 2001:0470:d4df::/48{48,64},
261
+ 2001:0470:d889:0010::/64{64,64},
262
+ 2001:0470:e3f0:000a::/64{64,64},
263
+ 2001:067c:21ec::/48{48,64},
264
+ 2001:06f8:1019:0000::/64{64,64},
265
+ 2001:06f8:118b::/48{48,64},
266
+ 2001:06f8:1194::/48{48,64},
267
+ 2001:06f8:121a::/48{48,64},
268
+ 2001:06f8:1c1b::/48{48,64},
269
+ 2001:06f8:1d14::/48{48,64},
270
+ 2001:06f8:1d26::/48{48,64},
271
+ 2001:06f8:1d53::/48{48,64},
272
+ 2001:07f0:3003::/48{48,64},
273
+ 2001:08d8:0081:05c8::/63{63,64},
274
+ 2001:08d8:0081:05ca::/64{64,64},
275
+ 2001:15c0:1000:0100::/64{64,64},
276
+ 2001:1b60:1000:0001::/64{64,64},
277
+ 2001:41d0:0001:b6bb::/64{64,64},
278
+ 2001:41d0:0001:cd42::/64{64,64},
279
+ 2001:4dd0:fcff::/48{48,64},
280
+ 2001:4dd0:fdd3::/48{48,64},
281
+ 2001:4dd0:ff00:8710::/64{64,64},
282
+ 2604:8800:0179:4200::/56{56,64},
283
+ 2801:0000:80:8000::/50{50,64},
284
+ 2a00:1328:e101:0200::/56{56,64},
285
+ 2a00:1828:2000:0289::/64{64,64},
286
+ 2a00:1828:a013:d242::/64{64,64},
287
+ 2a00:5540:0387::/48{48,64},
288
+ 2a01:0198:022c::/48{48,64},
289
+ 2a01:0198:035a:fd13::/64{64,64},
290
+ 2a01:0198:0485::/48{48,64},
291
+ 2a01:04f8:0121:4fff::/64{64,64},
292
+ 2a01:04f8:0140:1ffd::/64{64,64},
293
+ 2a01:04f8:0d13:17c0::/64{64,64},
294
+ 2a02:0a00:e010:3c00::/56{56,64},
295
+ 2a02:0ee0:0002:0051::/64{64,64},
296
+ 2a03:2260::/30{30,64}
297
+ ];
298
+}
299
+```
300
+
301
+
149 302
# Useful bird commmands
150 303
151 304
bird can be remote controlled via the `birdc` command. Here is a list of useful bird commands:
... ...
@@ -169,6 +322,15 @@ bird> show route for 172.22.141.181 # show possible routes to internal.dn42
169 322
172.22.141.0/24 via 172.23.67.1 on tobee [tobee 07:20:30] * (100) [AS64737i]
170 323
via 172.23.64.1 on chelnok [chelnok 07:20:29] (100) [AS64737i]
171 324
via 172.23.136.65 on hax404 [hax404 07:20:26] (100) [AS64737i]
325
+bird> show route filtered
326
+172.23.245.1/32 via 172.23.64.1 on chelnok [chelnok 21:26:18] * (100) [AS76175i]
327
+172.22.247.128/32 via 172.23.64.1 on chelnok [chelnok 21:26:18] * (100) [AS76175i]
328
+172.22.227.1/32 via 172.23.64.1 on chelnok [chelnok 21:26:18] * (100) [AS76115i]
329
+172.23.196.75/32 via 172.23.64.1 on chelnok [chelnok 21:26:18] * (100) [AS76115i]
330
+172.22.41.241/32 via 172.23.64.1 on chelnok [chelnok 21:26:18] * (100) [AS76115i]
331
+172.22.249.4/30 via 172.23.64.1 on chelnok [chelnok 21:26:18] * (100) [AS4242420002i]
332
+172.22.255.133/32 via 172.23.64.1 on chelnok [chelnok 21:26:18] * (100) [AS64654i]
333
+...
172 334
```
173 335
174 336
# External Links