====== Gateways beim Freifunk Stuttgart ====== Gateways sind in Freifunknetzen die eigentlichen Router, während die Freifunk-Router (Nodes) für die Clients als Switches erscheinen. Über die Gateways laufen alle Verbindungen, die nicht über direkte Mesh-Beziehungen zwischen benachbarten Nodes abgewickelt werden können, egal ob zu anderen Zielen innerhalb des Freifunknetzes oder ins Internet (Ausleitung). Alle Verbindungen zwischen Nodes und Gateways sowie zwischen den Gateways sind verschlüsselt (VPN). {{tag>gw}} ===== Gateway-Gruppen ===== Beim Freifunk Stuttgart werden die Gateways nicht zentral betrieben und verwaltet, sondern unterschiedliche Personen oder/und Vereine können Gateways betreiben. Deshalb benutzen wir Gateway-Gruppen für die einzelnen Betreiber, die ihrerseits mehrere Instanzen (Maschinen), also die eigentlichen Gateways, in der jeweiligen Gruppe einrichten können. Ein einzelnes Gateway hat deshalb z.B. den Namen * "gw01n03" = Gateway-Gruppe 01 (entspricht Gateway des Betreibers 01) und dort die Instanz 03 * "gw05n02" = Gateway-Gruppe 05 (entspricht Gateway des Betreibers 05) und dort die Instanz 02 * "gw08n01" = Gateway-Gruppe 08 (entspricht Gateway des Betreibers 08) und dort die Instanz 01 ==== Liste der Gateway-Gruppen ==== ^Gateway-Gruppe ^Betreiber ^Status | |gw01 |Poldy |aktiv | |gw02 |Flip |inaktiv | |gw03 |Dentaku |inaktiv | |gw04 |FFS e.V. |aktiv | |gw05 |Adrian |aktiv | |gw06 |Adrian |inaktiv | |gw07 |Albi |inaktiv | |gw08 |Albi |inaktiv | |gw09 |FFS e.V. |aktiv | |gw10 |(Adrian) |inaktiv | ===== Segmente ===== Durch die Aufteilung des Freifunk-Netzes in mehrere [[technik:gateways:segmentkarte|Segmente]] (Subnets), kann ein Gateway (GW) bei uns mehrere Segmente bedienen. Im ersten Schritt halten alle GWs alle Segmente, im zweiten Schritt wird ein [[:technik:gateways:routing|Routing-Protokoll]] implementiert, das die dynamische Zuordnung von Gateways zu einzelnen Segmenten ermöglicht. Pro Segment läuft auf einem GW * eine Fastd-Instanz für die VPN-Verbindungen von den Nodes mit MTU 1340 (seit Firmware v1.3) * eine Fastd-Instanz für die VPN-Verbindungen von den Nodes mit MTU 1406 (bis Firmware v1.1) * eine Fastd-Instanz für die Verbindungen der Gateways untereinander im selben Segment (Segment-Backbone). * eine batman-adv Instanz zur Ein- und Auskopplung des Client-Traffic sowie Weiterleitung des Mesh-Traffic von/zu Nodes und anderen GWs im selben Segment ===== VPN-Verbindung von Nodes zu Gateways ===== Um die notwendige Zeit zum Aufbau der Verbindung des VPN-Tunnels (fastd) zwischen Node und Gateway möglichst klein zu halten, ist im Node keine vollständige Liste aller möglichen Ziele enthalten, sondern nur eine Liste der GW-Gruppen. Das zugehörige Segment erfährt der Node per DNS-Abfrage auf seine eigene erweiterte Node-ID, woraus er die GW-Gruppenliste im RAM so modifiziert, dass nur Verbindungen zu den Gateways im eigenen Segment aufgebaut werden. Die DNS-Namen für fastd sehen auf den Nodes im RAM dann z.B. so aus: * "gw01s03.gw.freifunk-stuttgart.de" = GW-Gruppe 01 im Segment 03 * "gw04s11.gw.freifunk-stuttgart.de" = GW-Gruppe 04 im Segment 11 * "gw08s18.gw.freifunk-stuttgart.de" = GW-Gruppe 08 im Segment 18 Welches konkrete GW (GW-Instanz) aus der GW-Gruppe ausgewählt wird, hängt von der DNS-Antwort auf diese URLs ab. Ein Node weiß von sich aus also weder, zu welchem Segment er gehört, noch welches GW ihn tatsächlich bedienen wird. Ohne Modifikation der internen GW-Gruppenliste zeigen die URLs auf Onboarder, die für die automatische Registrierung neuer oder geänderter Nodes zuständig sind. Aktuell (Stand 18.02.2018) gibt es zwei Onboarder (gw04 und gw07), die sich gegenüber den Nodes zunächst als GWs ausgeben, die jeden beliebigen Node akzeptieren, aber tatsächlich dann nur die für die Registrierung notwendigen Daten abfragen und die Verbindung wieder trennen. Danach ist eine normale Verbindung zu richtigen GWs möglich. Für die VPN-Verbindung zwischen Node und Gateway werden je nach Segment und MTU unterschiedliche **UDP-Ports** benutzt: ^Segment^MTU 1340 (ab FW v1.3)^MTU 1406 (bis FW v1.1)| |01|10201|10041| |02|10202|10042| |03|10203|10043| |:| : | : | |09|10209|10049| |10|10210|10050| |11|10211|10051| |:| : | : | |23|10223|10063| |24|10224|10064| |Onboarder|10299|10139| ===== IP-Adressen ===== Jedes Segment soll aus Performance Gründen maximal 800 Clients beinhalten. Durch den Verschnitt bei der IPv4-Adressvergabe per DHCP-Server (lease time) und Reserve für statische IP-Adressen werden die Segmente jeweils für 2048 IPv4-Adressen ausgelegt, das entspricht einem /21 Netz. Für die automatische IP-Vergabe stehen die drei DHCP-Server dhcp01, dhcp02 und dhcp03 zur Verfügung, jeweils mit einem Pool von 512 IP-Adressen pro Segment. Somit kann einer der DHCP-Server ausfallen, ohne dass das Netz beeinträchtigt wird. Alle Gateways sind per tinc (ffsl3) am zentralen Backbone 10.191.255.0/24 angeschlossen, an dem auch die drei DHCP-Server angeschlossen sind, und über den auch das Routing zwischen den Segmenten abgewickelt wird. Die DHCP Server haben dabei die IPv4 10.191.255.251 .. 253 Die einzelnen Gateways verteilen die IPv4-Adressen per DHCP-Relays an die Clients, haben also keine eigenen Adresspools. Lediglich Standardgateway und DNS-Server wird von den Gateways auf das Segment des anfragenden Clients angepasst. IPv4-Range der Client-Netze = 10.190.0.0/21 bis 10.191.250.0/21 Für IPv6 senden die Gateways nur Router Advertisements (RA) mit den IPv6-Routen zu den anderen Segmenten, um das jeweilige Subnet und dessen Übergänge zu definieren. Die Adressvergabe als solche übernehmen die Nodes selbst. Es wird kein IPv6-Standardgateway gesetzt, da das Freifunknetz derzeit noch keine IPv6-Anbindung an das Internet hat. IPv6-Range der Client-Netze = fd21:b4dc:4b01::/64 bis fd21:b4dc:4b60::/64 Jedes GW belegt pro Segment eine IPv6-Adresse fd21:b4dc:4bxx::a38:ggg und eine IPv4-Adresse 10.19x.y.g ^Was^Bsp Segment 1-32^Segment 33-63| |IPv4 Netz |10.190.0.0/21 |10.191.0.0/21 | |IPv6 Prefix |fd21:b4dc:4b01::/64 |fd21:b4dc:4b33::/64 | |BatIf |bat01 .. bat32 |bat33 .. bat63 | |Bridge Interface|br01 .. br32 |br33 .. br63 | |Fastd-If |vpn01 .. vpn32 |vpn33 .. vpn63 | |Fastd-Port | | | | bis FW v1.1 |10041 .. 10072 und 10139 |10073 .. 10103 und 10139 | | ab FW v1.3 |10201 .. 10232 und 10299 |10233 .. 10263 und 10299 | |Fastd-Socket |/var/run/fastd-vpn01.sock |/var/run/fastd-vpn33.sock | |ALFRED script |/etc/init/alfred-vpn01.conf|/etc/init/alfred-vpn33.conf| ^Segment^Netz ^IPv6-Prefix ^Port ^MAC ^BatIf^Fastd^Bridge(Bat/client)| |01 |10.190.0.0/21 |fd21:b4dc:4b01::/64|10041|02:00:38:01:0g:0n|bat01|vpn01|br01| |02 |10.190.8.0/21 |fd21:b4dc:4b02::/64|10042|02:00:38:02:0g:0n|bat02|vpn02|br02| |03 |10.190.16.0/21 |fd21:b4dc:4b03::/64|10043|02:00:38:03:0g:0n|bat03|vpn03|br03| |04 |10.190.24.0/21 |fd21:b4dc:4b04::/64|10044|02:00:38:04:0g:0n|bat04|vpn04|br04| |05 |10.190.32.0/21 |fd21:b4dc:4b05::/64|10045|02:00:38:05:0g:0n|bat05|vpn05|br05| |06 |10.190.40.0/21 |fd21:b4dc:4b06::/64|10046|02:00:38:06:0g:0n|bat06|vpn06|br06| |07 |10.190.48.0/21 |fd21:b4dc:4b07::/64|10047|02:00:38:07:0g:0n|bat07|vpn07|br07| |08 |10.190.56.0/21 |fd21:b4dc:4b08::/64|10048|02:00:38:08:0g:0n|bat08|vpn08|br08| ^Segment^GW ^IP4 ^Betreiber^IPv6 | |01|gw01n03|10.190.0.13/21 |Leonard |fd21:b4dc:4b01::a38:103| |01|gw05n01|10.190.0.5/21 |Adrian |fd21:b4dc:4b01::a38:501| |01|gw05n02|10.190.0.52/21 |Adrian |fd21:b4dc:4b01::a38:502| |01|gw05n03|10.190.0.53/21 |Adrian |fd21:b4dc:4b01::a38:503| |01|gw08n00|10.190.0.8/21 |Albi |fd21:b4dc:4b01::a38:800| |01|gw08n01|10.190.0.81/21 |Albi |fd21:b4dc:4b01::a38:801| |01|gw08n02|10.190.0.82/21 |Albi |fd21:b4dc:4b01::a38:802| |01|gw08n03|10.190.0.83/21 |Albi |fd21:b4dc:4b01::a38:803| |01|gw08n04|10.190.0.84/21 |Albi |fd21:b4dc:4b01::a38:804| |01|gw08n05|10.190.0.85/21 |Albi |fd21:b4dc:4b01::a38:805| |02|gw01n03|10.190.8.13/21 |Leonard |fd21:b4dc:4b02::a38:103| |02|gw05n01|10.190.8.5/21 |Adrian |fd21:b4dc:4b02::a38:501| |02|gw05n02|10.190.8.52/21 |Adrian |fd21:b4dc:4b02::a38:502| |02|gw05n03|10.190.8.53/21 |Adrian |fd21:b4dc:4b02::a38:503| |02|gw08n00|10.190.8.8/21 |Albi |fd21:b4dc:4b02::a38:800| |02|gw08n01|10.190.8.81/21 |Albi |fd21:b4dc:4b02::a38:801| |02|gw08n02|10.190.8.82/21 |Albi |fd21:b4dc:4b02::a38:802| |02|gw08n03|10.190.8.83/21 |Albi |fd21:b4dc:4b02::a38:803| |02|gw08n04|10.190.8.84/21 |Albi |fd21:b4dc:4b02::a38:804| |02|gw08n05|10.190.8.85/21 |Albi |fd21:b4dc:4b02::a38:805| ===== MAC-Adressen der GWs ===== Schema: 02:00:ii:ss:gg:nn |ii|Interface| |ss|Segment| |gg|Gateway-Gruppe| |nn|laufende Nummer der Gateway-Instanz| Definierte Werte für ii |33|Mesh Fastd Nodes mit MTU = 1340 (vpyXX)| |34|(ex. Mesh Fastd Nodes mit MTU = 1312 (vpxXX))| |35|Segment-Backbone fastd mit MTU = 1340 (bbXX)| |36|Zentraler Backbone Tinc (ffsl3) für zentrale Dienste und Inter-Segment-Routing| |37|(Mesh Fastd Gateways)| |38|Mesh Fastd Nodes mit MTU = 1406 (vpnXX)| |39|Client| Verbotene Werte für ii: 4c .. 4f 58 .. 5b 70 .. 73 8d .. 90 c8 .. cb