Freifunk Server Handbuch

Aus Freifunk Dresden - Anwender-Wiki
Zur Navigation springen Zur Suche springen

Git-Repositories

Für den Betreiber eines Freifunk Servers (Vserver) gibt es ein GIT Repository. Dieses erlaubt das fast automatische Aufsetzen eines Freifunk Servers (für Internet-Gateway).

Informationen dazu sind derzeit in der readme.md auf github gegeben, werden aber in Zukunft hier gepflegt.

Bitte beachtet die Hinweise für andere Communities, welche auf der Dresdner Installation basieren sollen (Repos: firmware/vserver-base clonen, aktueller Stand von vserver-base bezüglich der Verwendbarkeit).

Basic Vserver

Dieses Repository bildet die minimale Funktionalität eines Servers für Freifunk Dresden. Der Vserver arbeitet wie ein Freifunk Knoten und ist soweit konfiguriert, dass dieser eine Knotenwebseite anbietet, Backboneverbindungen (vtund) akzeptiert und via Openvpn Internettunnel für den Internetverkehr aus dem Freifunknetz aufbauen kann.

HINWEIS: Der Vserver ist auf Freifunk Dresden zugeschnitten. Soll dieses als Basis für andere Freifunk Communities
         verwendet werden, müssen Anpassungen gemacht werden.

Vorausetzungen

Folgend sind die Vorausetzungen aufgeführt für das das Git Repository gedacht ist:

  • Linux: Ubuntu Minimal Server (64bit) Ubuntu 16.04.2 LTS
  • Netzwerk: min. 100Mbit/s
    Wenn weniger so sollte man nicht soviele Tunnel aufbauen und die bekanntgegebene Gateway-Geschwindigkeit in /etc/nvram.conf reduzieren. Das sollte man einfach über einen längeren Zeitraum beobachten und den niedrigstens Wert verwenden. Dazu aber den Traffic von verschiedenen Knoten aus testen!
batman_gateway_class="4mbit/4mbit"
  • Kernel Module: tun.ko muss vorhanden sein. Evt sollte man sich vorher beim VServer Anbieter informieren. Nicht alle Anbieter haben einen Support im Kernel. Genutzt wird es vom Routing Protokoll, Backbone, Openvpn
  • Speicher: mind. 512Mbyte RAM, 1GByte Swap
    Auf solchen systemen ist die Auslastung aber schon recht hoch, so dass oft Swap benutzt wird, was sehr nachteilig ist. Auf einen 512Mbyte System sollten maximal 50 Backbone tunnel (siehe nvram.conf) verwendet werden.
    Wenn möglich, sollten mind. 1 Gbyte RAM, 2Gbyte Swap zurverfügung stehen.
  • Virtualisierung: Wird der Freifunk Server auf einem virtuellen Server aufgesetzt, so funktionieren als Virtualisierungen KVM, XEN und LXC sehr gut.

Installation

Schritte:

  1. Bringe Ubuntu auf die aktuelle Version. Das geht bei Ubuntu Schrittweise von Version zu Version (https://help.ubuntu.com/community/UpgradeNotes). Wähle dafür aber die "server-⁠variante" (nicht desktop).
  2. Folgends cloned das Repository. Bitte verwendet eurer eignes geclontes Repository.
mkdir /⁠root/⁠freifunk
cd /⁠root/⁠freifunk
apt-⁠get install git
git clone https://github.com/ddmesh/vserver-base.git
cd freifunk-base
./⁠vserver-⁠install.sh

Es werden einige Pakete nachinstalliert, Files kopiert und am Ende noch einige Tools compiliert. Wenn das fertig ist, müssen Community-Spezifische Dinge angepasst werden:

  • ddmesh-ipcalc.sh
  • /etc/nvram.conf
  • /etc/hostname
  • /etc/issue.net
  • /etc/openvpn/....

Da hier ein Git Repository verwendet wird, kann dieses ab und zu updates erhalten (git pull). Diese Änderungen müssen dann allerdings manuell übernommen werden.

Hinweise

  • Git: Es empfielt sich dringend für andere Communities, dieses Repository zu clonen, da hier generelle Umstellungen zusammen mit der passenden Firmware für Dresdner Anforderungen erfolgen.
    Communities sollten dann auf das geclonte Repository (gilt auch für das "firmware" Repository) aufbauen.
    Jede Community trägt die alleinige Verantwortung und Kontrolle über ihr Netz und sollte eigene erfahrene Leute/Admins bereitstellen. Hilfe von Dresden ist aber jederzeit möglich, aber Administrative Aufgaben oder Garantien werden nicht übernommen, da das einfach den organisatorischen Aufwand sprengt.
  • Routingprotokoll BMXD: Diese Protokoll wurde anstelle von bmx6 oder bmx-advanced aus verschiedenen Gründen gewählt (siehe http://wiki.freifunk-dresden.de/). Es wird vom eigentlichen Autor nicht mehr weiterentwickelt oder gepflegt. Für Dresden hat Stephan einige Fehler behoben.
  • Anpassungen: Speziell gilt das für den IP Bereich und der Knotenberechnung. Aus Knotennummern werden mit ddmesh-ipcalc.sh alle notwendigen IP Adressen berechnet (http://wiki.freifunk-dresden.de/index.php/Technische_Information#Berechnung_IP_Adressen).
    Freifunk Dresden verwendet zwei IP Bereiche, eines für die Knoten selber (10.200.0.0/16) und eines für das Backbone (10.201.0.0/16). Dieses ist technisch bedingt.
    Wird bei freifunk.net nur ein solcher Bereich reserviert (z.b. 10.13.0.0/16), so muss das Script ddmesh-ipcalc.sh in der Berechnung angepasst werden, so dass zwei separate Bereich entstehen. Die Bereiche für 10.13.0.0/16 würden dann 10.13.0.0/17 und 10.128.0.0/17 sein.
  • Das Script ddmesh-ipcalc.sh wird ebenfalls in der Firmware verwendet, welches dort auch angepasst werden muss.
    In der Firmware gibt es zwei weitere Stellen, die dafür angepasst werden müssen. Das sind /www/nodes.cgi und /www/admin/nodes.cgi. Hier wurde auf den Aufruf von ddmesh-ipcalc.sh verzichtet und die Berechnung direkt gemacht, da die Ausgabe der Router-Webpage extrem lange dauern würde.
  • In /etc/nvram.conf werden die meisten Einstellungen für den Vserver hinterlegt.
    Evt. kann noch /etc/issuer.net und /etch/hostname angepasst werden, was beim Betreiben von mehreren Vservern hilfreich ist.
  • Backbone: Weiterhin verwendet das Freifunk Dresden Netz als Backbone-VPN Tool noch vtund. Dieses wird sich aber in Zukunft ändern, wobei dann vermutlich fastd eingesetzt wird (für welches noch notwendige Funktionalitäten fehlen).
  • Internet Tunnel: /etc/openvpn enthält ein Script, mit dem verschiedene Openvpn Konfiguration von Tunnelanbietern so aufbereitet werden, dass diese für Freifunk Dresden richtig arbeiten.
    Wie in der Firmware läuft per cron.d ein Internet-check, der in der ersten Stufe das lokale Internet testet und wenn dieses funktioniert, wird das Openvpn Internet geprüft. Ist das Openvpn Internet verfügbar, wird dieser Vserver als Internet-Gateway im Freifunknetz bekannt gegeben.
  • DNS: Der Vserver arbeitet als DNS Server für die Knoten, die ihn als Gateway ausgewählt haben. Der Vserver leitet allerdings die DNS Anfragen nicht über den Openvpn Tunnel, sondern geht direkt über den VServer Anbieter raus.
  • ICVPN: Für ICVPN wird eigentlich alles installiert, aber ich habe dieses noch nicht mit dieser Installation getestet, da es ein Extra-Service ist und nicht auf jedem VServer in einem Netz aktiv sein braucht. Es gibt ein script, welches ebenfall dafür angepasst werden muss /etc/quagga/gen-bgpd.conf. Dieses Script greift auf github (wo alle Communities ihre Daten hinterlegen) und erzeugt entsprechende eine Konfiguration. Einfach mal damit experimentieren. Hilfreich sind hier die Befehle "ip rule" und "ip route list table zebra". Alternativ gibt es noch andere bgp Daemons, die von anderen Freifunk Communities verwendet werden (bird). Damit habe ich aber noch keine Experimente gemacht. Scripte für die Generierung von Konfigurationsfiles für bird gibt es auch irgendwo im Github.
  • Server Anbieter: Da Server Anbieter verschieden sind, kann die Installation abbrechen. Hier sollten erfahrene Leute die Installation anpassen und mir einen Hinweis geben. Als VServer kann NICHT jeder Anbieter genutzt werden.
    Wichtig ist, dass tun/tap devices und alle möglichen iptables module möglich sind. IPv6 ist nicht notwendig, da das Freifunk Netz in Dresden nur IPv4 unterstützt (Platzmangel auf Routern, bmxd unterstützt dieses nicht)

Konfiguration

Während der Installation

Während der Installation wird der Nutzer mehrfach zu einigen Anpassungen aufgefordert. Teilweise sind hier schon die korrekten Werte vorgegeben.

  • Character-Set: UTF8
  • Locale (Länder/Zeitzone): Berlin

Optional und aktuell disabled:

  • Mysql: Bei der erstmaligen Installation von Mysql (Datenbank) wird ein Administrator eingerichtet. Der Nutzername hierfür ist root. Das Passwort sollte ein sicheres Passwort sein. Mysql ist aber so konfiguriert, dass dieses nur auf localhost hört und Verbindungen von anderen Netzwerkkarten ignoriert. Aktuell wird die Datenbank noch nicht verwendet.
  • phpmyadmin: Dieses ist eine Oberfläche, mit der die Datenbank administriert wird. Bei der Installation von phpmyadmin wird ein spezieller Nutzer für phpmyadmin selber angelegt. Damit das möglich ist, wird die Eingabe des Mysql root passwortes benötigt. Dieser neue phpmyadmin Nutzer erhält ein eigenes Passwort, welches durch die Installation per Zufall erzeugt wird, wenn das nachfolgende Eingabefeld leer gelassen wird. Man braucht diese Passwort NICHT zu merken.

Abschliessende Anpassungen

/etc/nvram.conf

nvram.conf enthält alle notwendigen Freifunk-Konfigurationen/Werte. Im unteren teil gibt es noch Backbone-Einstellungen, die nur noch für das alte Backbone-system (vtund) verwendet werden. Diese brauchen nicht mehr angepasst werden. Folgende dinge sind anzupassen:

  • ddmesh_registerkey: Der Key besteht aus 32 Hex-Werten im folgenden Format '00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff'. Dieser muss von jedem Nutzer generiert werden und MUSS sich von anderen Knoten unterscheiden. Da die Wahrscheinlichkeit sehr gering ist, dass Zufallszahlen und MAC sich wiederholen, kann diese wiefolgt erzeugt werden:
ip link | sha256sum | sed 's#\(..\)#\1:#g;s#:[ :-]$##' |  ip link | sha256sum | sed 's#\(..\)#\1:#g;s#[ :-]*$##'

Diese 'MUSS' im ersten Schritt eingetragen und gespeichert werden, da dieses für den nächsten Schritt notwendig ist!
Beispiel: ddmesh_registerkey=0d:30:22:21:32:a5:73:99:92:85:11:58:17:d0:90:41:3c:f1:44:41:11:a1:08:63:5d:e0:5a:64:4b:f0:dc:e3

  • ddmesh_node: Die Knotennummer muss im Netzwerk eindeutig sein und wird vom Registrator vergeben. Der Registrator ist ein Server, welches eine Datenbank hält und bei einer Registrierung mit dem zuvor erzeugen registerkey eine Knotennummer zurück liefert. Dazu muss dann folgendes aufgerufen werden:
/usr/bin/freifunk-register-local-node.sh

Die Ausgabe liefert eine Zeile node=51234. Diese Knotennummer sollte dann bei ddmesh_node= eingetragen werden.
Beispiel: ddmesh_node=51234

/etc/hostname

Der Hostnamen hat für Freifunk keine weitere Bedeutung und dient eigentlich nur zur Wiedererkennung der richtigen Konsole, wenn man mehrere Terminals zu verschiedenen Servern geöffnet hat.

/etc/issuer.net

Der Inhalt dieser Text-Datei wird direkt beim Verbindungsaufbau via ssh angezeigt. Dieses ist auch nur Informativ.

Optional: /etc/phpmyadmin/conf.d/fix-server-url.php

<?php
$cfg['PmaAbsoluteUri'] = 'http://lxd.freifunk-dresden.de/phpmyadmin/';

-> neustart

Backbone

Im Netz von Freifunk Dresden wird für die Backbone-Verbindung von den Routern zu den Servern, oder auch zwischen Routern selbst (wenn eingerichtet) fastd verwendet.
fastd ist ein für Freifunk entwickeltes VPN, welches eine schnelle und zuverlässige Verbindung bereitstellt.
Bei der aktuellen Installation werden alle Verbindungen von Freifunk-Router zum Server zugelassen, welche sich mit dem korrekten Public-Key des Servers verbinden. Dieser Public-Key kann über http://<ip-des-knotens>/sysinfo-json.cgi ausgelesen werden.
Verbindet sich ein Router mit einem Server erfolgreich, so "lernt" der Server diese Verbindung und erzeugt ein entsprechendes Konfigurationsfile unterhalb von '/etc/fastd/peers'
Später kann der Server umgestellt werden, so dass nur noch dort abgelegte Konfigurationen (Verbindungen) akzeptiert werden. Gesteuert wird dieses durch das Konfigurationsfile von fastd (/etc/fastd/fastd.conf), welches nicht nur in diesem Fall angefasst werden muss.

/etc/fastd
/etc/init.d/S53backbone-fastd

Internet Tunnel (Openvpn)

Ein VPN Server kann ein Exitpoint (Übergang zum Internet) sein. Der Betreiber sollte sich aber gegen die Störerhaftung schützen und entweder als Provider offiziell auftreten oder einen OPENVPN Dienst in anspruch nehmen. Ein OPENVPN Dienst stellt ein weiteres VPN zu anderen meist annonymisierten Servern her, bei denne keine Daten geloggt werden.

Aktuell werden in Dresden verschiedene Zugänge verwendet:

  • Freie Netze e.V. (arbeitet noch als Provider)
  • AirVPN (OPENVPN)

ipb_header.png

Die Konfiguration erfolgt im Verzeichnis /etc/openvpn, wo es ein Script gibt, mit dem die Konfiguration für einen Vserver angepasst werden kann.

Wichtiges

Im moment gibt es keinen Schutz, dass Routerfirmware einer Communitiy sich mit Servern oder Routern anderer Communities verbinden. Es ist Fatal wenn sich die Netze wegen gleicher WLAN BSSID oder via Backbone verbinden. Da überall das gleiche Routingprotokoll verwendet wird, würden Geräte von verschiedenen Communities miteinander reden können und das Netz würde gigantisch groß und die Router überlasten.

Bitte einhalten:

  • Ändern der BSSID auf eine eigenen
  • Keine Verwendung von Registratoren anderen Communities (Webserverdienst zum Verteilen von Knotennummern)
  • Kein Aufbau von Brücken zwischen Routern/Vservern verschiedener Communities über Backboneverbindungen. (das wird in Zukunft noch unterbunden, dazu ist aber eine Änderung am Routingprotokoll notwendig). Verbindungen von Communities dürfen nur über das ICVPN erfolgen.

Server-Anbieter

Im Laufe der Zeit haben wir bei vielen Anbietern Server für den Freifunk Dresden gebucht. Einige unserer Erfahrungen mit den verschiedenen Produkten sammeln wir hier.

1&1

„Virtual Server Linux Student“ (nicht empfohlen)

  • Anbindung: 100 Mbit/s
  • Preis: 1,00€ (monatlich kündbar)
  • Besonderheitem: Prozessanzahl auf 128 limitiert

Im Rahmen des Studentenangebotes „Campus-Code“ bot 1&1 einen Vserver für nur 1€ monatlich an. Dieser eignet sich allerdings nur für Testzwecke oder als Backbone-Server für eine sehr kleine Anzahl an Knoten, da die Anzahl der laufenden Prozesse auf nur 128 (numproc) limitiert ist. Durch das Erreichen des Prozesslimits läuft der Server regelmäßig fehlerhaft oder ist nicht mehr erreichbar und muss über das Vserver-Control-Panel neu gestartet werden. Ein halbwegs stabiler dauerhafter Betrieb ist nur bei 15-20 Backbone-Verbindungen möglich. (Stand 10/2015)

Netcup (nicht empfohlen)

Verbindung wird gedrosselt teilweise bis auf 1,6Mbyte/s dauerhaft.

„Root-Server S“

  • Virtualisierung: KVM
  • Anbindung: 100 Mbit/s
  • Preis: 4,99€ (monatlich kündbar)
  • Besonderheiten: Drosselung bei Überschreitung von 80 Mbit/s Bandbreite

Netcup drosselt Vserver, wenn diese über einen Zeitraum von 15 Minuten eine durchschnittliche Bandbreite von über 80 Mbit/s belegen. Die Drosselung erfolgt ohne Vorwarnung auf ca. 50KB/s, wodurch der Server praktisch unbenutzbar wird. Erst auf Nachfrage erfährt man vom Support von der Drosselung, die zumindest bei uns auf Bitte wieder rückgängig gemacht wurde. Falls man diesen Server für Freifunk sinnvoll nutzen möchte, sollte man selbst sicherstellen, dass die beanspruchte Bandbreite stets unter 80 Mbit/s bleibt. (Stand 10/2015)

„Root-Server L“

  • Virtualisierung: KVM
  • Anbindung: 1 Gbit/s
  • Preis: 18,99€ (monatlich kündbar)
  • Besonderheiten: Drosselung bei Überschreitung von 80 Mbit/s Bandbreite

Laut Netcup liegt bei den Gigabit-Servern eine durchschnittliche Bandbreite von nur 200 Mbit/s an. Wie beim „Root-Server S“ gilt außerdem die selbe Regelung für die Überschreitung der 80-Mbit/s-Grenze. (Stand 10/2015)

ispOne business (nicht empfohlen)

Trotz Internetflat werden Server abgeschaltet, gedrosselt oder sind drei Tage überhaupt nicht erreichbar (Traffic < 5TB/Monat). Der Support war anfänglich okay, aber seitdem vermutlich die Serverlast und der Datenverkehr zugenommen hat, wird nicht mehr auf Supportanfragen reagiert und behauptet, dass der Server gehackt wurde. Fragen nach Begrenzungen (um diese eventuell selber zuzusichern) bleiben unbeantwortet. Monatsverträge werden vonseiten ispOne ohne Begründung gekündigt. Man erfährt dies nur durch eine "Kündigungsbestätigung".

1blue

  • URL: https://www.1blu.de/server/vserver/
  • Traffic inclusive - bis jetzt keine Drosselung
  • Preis: 7,90€ (monatlich kündbar)
  • Laufzeit 1/12 Monate
  • Anbindung vermutlich 100MBit/s
  • 4GB garantierter RAM

Auf nachfrage hin drosseln sie in keinster weise die Anbindung der Server. (stand 12.2015)