4b494e5fa0a361a299cb490fc152ad8f600e1825
howto/Bird.md
... | ... | @@ -21,8 +21,151 @@ To specify the source address, you use the `krt_prefsrc` attribute, for instance |
21 | 21 | |
22 | 22 | # Example advanced configurations |
23 | 23 | |
24 | -Paste your own config template here. |
|
24 | +* Replace `<AS>` with your Autonomous System Number |
|
25 | +* Replace `<GATEWAY_IP>` with your gateway ip (the internal dn42 ip address you use on the host, where dn42 is running) |
|
26 | +* Replace `<SUBNET>` with your registered dn42 subnet, which you allocated on [nixnodes](https://io.nixnodes.net/) |
|
27 | +* Replace `<PEER_IP>` with the ip of your peer who is connected with your using your favorite vpn protocol (openvpn, ipsec, tinc, ...) |
|
28 | +* Replace `<PEER_AS>` the Autonomous System Number of your peer |
|
29 | +* Replace `<PEER_NAME>` a self chosen name for your peer |
|
25 | 30 | |
26 | -## External links |
|
31 | +``` |
|
32 | +# /etc/bird/bird.conf |
|
33 | +# Device status |
|
34 | +protocol device { |
|
35 | + scan time 10; # recheck every 10 seconds |
|
36 | +} |
|
27 | 37 | |
28 | -http://danrimal.net/doku.php?id=wiki:bgp:bird:sample_configs2 |
|
... | ... | \ No newline at end of file |
0 | +protocol static { |
|
1 | + # Static routes to announce your own range(s) in dn42 |
|
2 | + route <SUBNET> reject; |
|
3 | +}; |
|
4 | + |
|
5 | +# filter helpers |
|
6 | +################# |
|
7 | + |
|
8 | +function is_freifunk() { |
|
9 | + return net ~ [ 10.0.0.0/8+ ]; |
|
10 | +} |
|
11 | + |
|
12 | +function is_dn42() { |
|
13 | + return net ~ [ |
|
14 | + 37.1.89.160/29+, # siska |
|
15 | + 46.4.248.192/27+, # welterde |
|
16 | + 46.19.90.48/28+, # planet cyborg |
|
17 | + 46.19.90.96/28+, # planet cyborg |
|
18 | + 80.244.241.224/27+, # jchome service network |
|
19 | + 85.25.246.16/28+, # Leon Weber |
|
20 | + 87.106.29.254/32, # wintix |
|
21 | + 91.204.4.0/22+, # free.de via ctdo |
|
22 | + 94.45.224.0/19+, # ccc event network |
|
23 | + 172.22.0.53/32, # dns |
|
24 | + 172.22.0.0/15{15,30}, # official subnet for dn42 |
|
25 | + 172.23.0.0/16{15,30}, # official subnet for dn42 |
|
26 | + 178.33.32.123/32, # Martin89 |
|
27 | + 178.63.170.40/32, # jomat |
|
28 | + 188.40.34.241/32, # jomat |
|
29 | + 192.175.48.0/24+, # AS112-prefix for reverse-dns |
|
30 | + 193.43.220.0/23+, # durchdieluft via ctdo |
|
31 | + 195.16.84.40/29+, # siska |
|
32 | + 195.160.168.0/23+, # ctdo |
|
33 | + 195.191.196.0/23+ # ichdasich pi-space |
|
34 | + ]; |
|
35 | +} |
|
36 | + |
|
37 | +function is_chaosvpn() { |
|
38 | + return net ~ [ |
|
39 | + 10.4.0.0/16+, # Allocated for ChaosVPN. Ready for distribution, currently not used |
|
40 | + 10.32.0.0/16+, # Allocated for ChaosVPN. Ready for distribution, currently not used |
|
41 | + 10.42.16.0/20+, # legacy |
|
42 | + 10.100.0.0/14+, # us hackerspaces range |
|
43 | + 10.104.0.0/14+, # Warzone, currently not used |
|
44 | + 172.31.0.0/16+, # In use by European hackerspaces |
|
45 | + 83.133.178.0/23+, # kapsel - CCC Munich |
|
46 | + 172.26.0.0/15+, # KBU Freifunk |
|
47 | + 176.9.52.58/32+, # haegar_vlad |
|
48 | + 178.33.2.240/28+, # o_g |
|
49 | + 193.103.159.0/24+, # haegar_vlad |
|
50 | + 193.103.160.0/23+, # haegar_vlad |
|
51 | + 212.12.50.208/29+, # ccchh |
|
52 | + 213.238.61.128/26+ # mc.fly |
|
53 | + ]; |
|
54 | +} |
|
55 | + |
|
56 | +# local configuration |
|
57 | +###################### |
|
58 | + |
|
59 | +# keeping router specific in a seperate file, |
|
60 | +# so this configuration can be reused on multiple routers in your network |
|
61 | +include "/etc/bird/local4.conf"; |
|
62 | + |
|
63 | +# Kernel routing tables |
|
64 | +######################## |
|
65 | + |
|
66 | +/* |
|
67 | + krt_prefsrc defines the source address for outgoing connections. |
|
68 | + On Linux, this causes the "src" attribute of a route to be set. |
|
69 | + |
|
70 | + Without this option outgoing connections would use the peering IP which |
|
71 | + would cause packet loss if some peering disconnects but the interface |
|
72 | + is still available. (The route would still exist and thus route through |
|
73 | + the TUN/TAP interface but the VPN daemon would simply drop the packet.) |
|
74 | +*/ |
|
75 | +protocol kernel { |
|
76 | + scan time 20; |
|
77 | + device routes; |
|
78 | + import none; |
|
79 | + export filter { |
|
80 | + krt_prefsrc = OWNIP; |
|
81 | + accept; |
|
82 | + }; |
|
83 | +}; |
|
84 | +# DN42 |
|
85 | +####### |
|
86 | + |
|
87 | +template bgp dnpeers { |
|
88 | + local as OWNAS; |
|
89 | + # metric is the number of hops between us and the peer |
|
90 | + path metric 1; |
|
91 | + # this lines allows debugging filter rules |
|
92 | + # filtered routes can be looked up in birdc using the "show route filtered" command |
|
93 | + import keep filtered; |
|
94 | + import filter { |
|
95 | + # accept every subnet, except our own advertised subnet |
|
96 | + # filtering is important, because some guys try to advertise routes like 0.0.0.0 |
|
97 | + if (is_dn42() || is_freifunk() || is_chaosvpn()) && !is_self_net() then { |
|
98 | + accept; |
|
99 | + } |
|
100 | + reject; |
|
101 | + }; |
|
102 | + export filter { |
|
103 | + # here we export the hole net |
|
104 | + if is_dn42() || is_freifunk() || is_chaosvpn() then { |
|
105 | + accept; |
|
106 | + } |
|
107 | + reject; |
|
108 | + }; |
|
109 | + route limit 10000; |
|
110 | + source address OWNIP; |
|
111 | +}; |
|
112 | + |
|
113 | +include "/etc/bird/peers4/*"; |
|
114 | +``` |
|
115 | + |
|
116 | +``` |
|
117 | +#/etc/bird/local4.conf |
|
118 | +router id 172.23.75.1; |
|
119 | + |
|
120 | +define OWNAS = <AS>; |
|
121 | +define OWNIP = <GATEWAY_IP>; |
|
122 | + |
|
123 | +function is_self_net() { |
|
124 | + return net ~ [<SUBNET>+]; |
|
125 | +} |
|
126 | +``` |
|
127 | + |
|
128 | +``` |
|
129 | +# /etc/bird/peers4/<PEER_NAME> |
|
130 | +protocol bgp <PEER_NAME> from dnpeers { |
|
131 | + neighbor <PEERING_IP> as <PEER_AS>; |
|
132 | +}; |
|
133 | +``` |
|
... | ... | \ No newline at end of file |