Freifunk-BGP-Gateway: Unterschied zwischen den Versionen
(→Babel) |
(→Babel) |
||
Zeile 156: | Zeile 156: | ||
Mit dieser Konfiguration ist das OWN_SUBNET/48 nun im ganzen Babelnetz bekannt und jeder kann theoretisch im Babelnetz sich nun aus diesen /48 ein /64 "herausziehen" und z.b. in eine Hood weiter verteilen. | Mit dieser Konfiguration ist das OWN_SUBNET/48 nun im ganzen Babelnetz bekannt und jeder kann theoretisch im Babelnetz sich nun aus diesen /48 ein /64 "herausziehen" und z.b. in eine Hood weiter verteilen. | ||
Hier muss noch diskutiert werden ob und wie das ganze am sinnvollsten gefiltert werden sollte. | Hier muss noch diskutiert werden ob und wie das ganze am sinnvollsten gefiltert werden sollte. | ||
== Freifunk Gateway IPv6 verteilen == | |||
Wie oben bereits gesagt, kann nun aus diesem verteilten Netzblock von oben auf jedem anderen Server im L3 Netz ein /64 herausgezogen und in eine Hood verteilt werden. Dazu ist es zwingend nötig das auf dem ganzen Peeringweg zum BGP Gateway mindestens an jeden GRE Interface die Rule: | |||
* post-up ip -6 rule add iif $IFACE table fff | |||
dran hängt. Dies ist mittlerweile auch in der Gateway Anleitung fest geschrieben war aber früher nie der Fall. | |||
Sinnvoll ist natürlich jederzeit ein direktes Peering und dann auch eine Peering IP auf dem GRE Interface. |
Version vom 19. November 2017, 17:08 Uhr
In dieser Anleitung geht es darum, wie man BGP (hier mit Bird) spricht und diese Routen ins Layer 3 (Babel) Freifunknetz verteilt.
Das ganze ist alles noch im Aufbau und die Anleitung ist auch den ersten Livesystem entstanden. Es kann durchaus sein, das hier noch viel Optimierungspotential vorhanden ist.
Grundlegendes
- Routing im Linux aktivieren
- Alle Partner die im Babel das v6 Netz mit rumschubsen wollen, müssen folgende Config auf den genutzen GRE Tunnels aktivieren:
- Wir legen 2 Kernel Routingtabellen an. In einer landet der Freifunk Kram in der anderen die Internet routen in unserem Beispiel 10 fff & 100 ft
Bird installieren und einrichten
Zuerst installieren wir bird:
apt-get install bird
Peering Interfaces
Zudem muss ein Partner vorhanden sein, mit dem man BGP sprechen kann. In dieser Beispielconfig ist es Hurricane Electric per Tunnel worüber es auch Transit gibt und ein privates Peering über einen GRE Tunnel.
HE Tunnel
auto he-ipv6 iface he-ipv6 inet6 static address EIGENE-IPv6_TUNNEL_IP/64 pre-up ip tunnel add $IFACE mode sit remote HE-IPV4 local EIGENE-IPv4 ttl 255 post-down ip tunnel del $IFACE
Privates Peering
(Beispiel, am Ende muss zusammen ausgehandelt werden wie man peert)
auto cd-bgp iface cd-bgp inet6 static address EIGENE-IPv6_TUNNEL_IP/64 pre-up ip tunnel add $IFACE mode ip6gre remote PARTNER-PUBLIC-IP local EIGENE_PUBLIC_IP ttl 255 post-down ip tunnel del $IFACE # -------- # /|_| |_| \ o # | | o # --O---O--==
Bird config
Dies ist nur eine funktionierende Beispielconfig:
router id x.x.x.x; #z.b. eigene IPv4 Adresse protocol kernel { # learn; scan time 25; device routes; import all; export all; kernel table 100; } protocol device { scan time 15; } protocol static { import all; route v6Subnetz/48 via "INTERFACE"; #v6Subnetz/48 durch das eigene Subnetz und Interface durch das Peering Interface ersetzen } function network_he() { return net ~ [ v6Subnetz/48 #v6Subnetz/48 durch das eigene Subnetz ersetzen ]; } protocol bgp WÄHLBARER_NAME { local as OWNAS; source address OWN_PEERING_IP; neighbor NEIGHBOR_IP as NEIGHBOR_AS; import all; export filter { # here we export the whole net if network_he() then { accept; } reject; }; } protocol bgp cd { local as OWNAS; source address OWN_PEERING_IP; neighbor NEIGHBOR_IP as NEIGHBOR_AS; import all; export filter { # here we export the whole net if network_he() then { accept; } reject; }; }
Babel
Babel config
Die Babelconfig sollte so aussehen:
[...] redistribute local ip 10.50.0.0/16 redistribute local ip 10.83.0.0/16 redistribute local ip fd43:5602:29bd::/48 redistribute local ip OWN_IP_SUBNET # eigenes Public Subnetz redistribute local deny redistribute ip 10.50.0.0/16 redistribute ip 10.83.0.0/16 redistribute ip fd43:5602:29bd::/48 redistribute ip ::/0 [...]
Babel Interface
iface lo inet manual up ip rule add to 10.0.0.0/8 lookup fff up ip rule add to 172.20.0.0/14 lookup fff up ip -6 rule add to fc00::/7 lookup fff
Dies muss für jedes Babel Interface gemacht werden:
auto ens7 iface ens7 inet6 static address OWN_PEERING_IP/128 # rules post-up ip -6 rule add to OWN_SUBNET/48 lookup fff priority 1000 post-up ip -6 rule add from OWN_SUBNET/48 lookup ft priority 2000 pre-down ip -6 rule del to OWN_SUBNET/48 lookup fff priority 1000 pre-down ip -6 rule del from OWN_SUBNET/48 lookup ft priority 2000 # route post-up ip -6 route add unreachable OWN_SUBNET/48 table fff post-down ip -6 route del unreachable OWN_SUBNET/48 table fff # route post-up ip -6 route add default from OWN_SUBNET/48 dev $IFACE table fff proto static pre-down ip -6 route del default from OWN_SUBNET/48 dev $IFACE table fff proto static
Mit dieser Konfiguration ist das OWN_SUBNET/48 nun im ganzen Babelnetz bekannt und jeder kann theoretisch im Babelnetz sich nun aus diesen /48 ein /64 "herausziehen" und z.b. in eine Hood weiter verteilen. Hier muss noch diskutiert werden ob und wie das ganze am sinnvollsten gefiltert werden sollte.
Freifunk Gateway IPv6 verteilen
Wie oben bereits gesagt, kann nun aus diesem verteilten Netzblock von oben auf jedem anderen Server im L3 Netz ein /64 herausgezogen und in eine Hood verteilt werden. Dazu ist es zwingend nötig das auf dem ganzen Peeringweg zum BGP Gateway mindestens an jeden GRE Interface die Rule:
- post-up ip -6 rule add iif $IFACE table fff
dran hängt. Dies ist mittlerweile auch in der Gateway Anleitung fest geschrieben war aber früher nie der Fall. Sinnvoll ist natürlich jederzeit ein direktes Peering und dann auch eine Peering IP auf dem GRE Interface.