Server Internes: Unterschied zwischen den Versionen

Aus Freifunk Dresden - Anwender-Wiki
Zur Navigation springen Zur Suche springen
(Libre-Speedtest)
 
(17 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 
[[Category:Dokumentation]][[Category:Server]]
 
[[Category:Dokumentation]][[Category:Server]]
<big>'''IN BEARBEITUNG!!!'''</big>
+
== Allgemeines ==
 +
[https://freifunk-dresden.github.io/ffdd-server/ Projektseite]
  
 +
[https://github.com/Freifunk-Dresden/ffdd-server/releases Releases] - [https://github.com/Freifunk-Dresden/ffdd-server/tree/T_RELEASE_latest latest Stable Release] - [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/CHANGELOG.md CHANGELOG] - [https://github.com/Freifunk-Dresden/ffdd-server/issues Issues]
  
== Git Repository ==
+
[https://www.debian.org/security/ Debian Security Informations] - [https://docs.saltstack.com/en/latest/ Salt Dokumentation]
  
  https://github.com/Freifunk-Dresden/ffdd-server
+
=== Git-Repository ===
 +
Die aktuellste ''ffdd-server'' Version sowie Release Informationen findest du direkt auf der Projektseite.
 +
 
 +
https://github.com/Freifunk-Dresden/ffdd-server
  
 
== Bereitstellung / Initialisierung ==
 
== Bereitstellung / Initialisierung ==
 
+
Die Initialisierung des Gateway-Server erfolgt über das ''<code>[https://github.com/Freifunk-Dresden/ffdd-server/blob/T_RELEASE_latest/init_server.sh init_server.sh]</code>'' Script. Dieses stellt sicher dass der Server auch den Grundlegenden Anforderungen entspricht und die Basis Konfiguration für Salt vorhanden ist.<br>
Die Initialisierung des Gateway-Server erfolgt über die ''[https://github.com/Freifunk-Dresden/ffdd-server/blob/T_RELEASE_latest/init_server.sh init_server.sh]'' welches sicherstellt dass der Server auf dem aktuellen Stand ist und alle Abhängigkeiten vorhanden sind.<br>
 
  
 
Wichtige Punkte sind hier:
 
Wichtige Punkte sind hier:
* User check
 
 
* Konfiguration:
 
* Konfiguration:
** /etc/nvram.conf ''(Enthält alle Gateway Spezifische Informationen)''
+
** <code>/etc/config/ffdd</code> ''(Enthält alle Gateway Spezifische Informationen)''
** /etc/salt/minion.d/freifunk-masterless.conf ''(Definiert das Arbeitsverzeichnis für Salt - /srv/ffdd-server/salt/freifunk/base/ )''
+
** <code>/etc/salt/minion.d/freifunk-masterless.conf</code> ''(Definiert das Arbeitsverzeichnis für Salt - <code>/srv/ffdd-server/salt/freifunk/base/</code> )''
 
* Pakete:
 
* Pakete:
 
** git - für die Bereitstellung und Aktualisierung des Repositories
 
** git - für die Bereitstellung und Aktualisierung des Repositories
** salt-minion (Salt) - Automatisierung 'Masterless-Orchestration-Management' für Konfigurationen und Pakete
+
** salt-minion (Salt) - Automatisierung 'Masterless-Orchestration-Management'
* Bereitstellung des Repositoryies unter /srv/ffdd-server/
+
* Bereitstellung des Repositories unter <code>/srv/ffdd-server/</code>
  
[https://docs.saltstack.com/en/latest/ Salt] übernimmt nun die weitere Initialisierung des Gateway-Server. Desweiteren wird Salt mit dem "''salt-call state.highstate --local''" Befehl im weiteren Betrieb dauerhaft verwendet um sicherzustellen das alle Konfigurationen wie gewünscht korrekt vorhanden sind und alle Services funktionieren. Dies geschieht per Aufruf über einen Cronjob (siehe XXXXXX).
+
Im init_server.sh Script wird der ''<code>salt-call state.highstate --local</code>'' Befehl aufgerufen. Damit übernimmt [https://docs.saltstack.com/en/latest/ Salt] nun die weitere Initialisierung des Gateway-Server und wird die von uns definierten Pakete und Konfiguration wie gewünscht auf das System spielen.
  
 
== Betrieb / Operating ==
 
== Betrieb / Operating ==
 
+
=== Salt Basics ===
=== Salt ===
 
 
 
 
Salt benötigt seine Konfiguration ( ''/etc/salt/minion.d/freifunk-masterless.conf'' )
 
Salt benötigt seine Konfiguration ( ''/etc/salt/minion.d/freifunk-masterless.conf'' )
 
  file_client: local
 
  file_client: local
Zeile 32: Zeile 33:
 
   base:
 
   base:
 
     - /srv/ffdd-server/salt/freifunk/base
 
     - /srv/ffdd-server/salt/freifunk/base
und das [https://github.com/Freifunk-Dresden/ffdd-server/tree/T_RELEASE_latest/salt/freifunk/base Arbeitsverzeichnis] ( ''/srv/ffdd-server/salt/freifunk/base/'' ) welches einen "Ablaufplan" die ''[https://github.com/Freifunk-Dresden/ffdd-server/blob/T_RELEASE_latest/salt/freifunk/base/top.sls top.sls]'' bereitstellt.<br>
+
und das [https://github.com/Freifunk-Dresden/ffdd-server/tree/T_RELEASE_latest/salt/freifunk/base Arbeitsverzeichnis] ( ''<code>/srv/ffdd-server/salt/freifunk/base/</code>'' ) welches einen "Ablaufplan" die ''[https://github.com/Freifunk-Dresden/ffdd-server/blob/T_RELEASE_latest/salt/freifunk/base/top.sls top.sls]'' bereitstellt.<br>
  
 
Alle hier definierten Aufgaben bekommen je nach Umfang und Komplexität im Arbeitsverzeichnis entweder:<br>
 
Alle hier definierten Aufgaben bekommen je nach Umfang und Komplexität im Arbeitsverzeichnis entweder:<br>
Zeile 38: Zeile 39:
 
eine Konfigurationsdatei ( ''../freifunk/base/AUFGABE.sls'' )<br>
 
eine Konfigurationsdatei ( ''../freifunk/base/AUFGABE.sls'' )<br>
 
oder<br>
 
oder<br>
einen Unterordner ( ''..freifunk/base/AUFGABE/'' ) welcher eine ''init.sls'' enthält.
+
einen Unterordner ( ''../freifunk/base/AUFGABE/'' ) der eine ''init.sls'' enthält.
  
Desweiteren gibt es noch ein Konfigurationfile, die [https://github.com/Freifunk-Dresden/ffdd-server/blob/T_RELEASE_latest/salt/freifunk/base/config.jinja config.jinja], welche für dynamische Variablen die in den "Aufgaben-Scripten" genutzt wird.
+
Des weiteren gibt es noch ein Konfigurationsfile, die [https://github.com/Freifunk-Dresden/ffdd-server/blob/T_RELEASE_latest/salt/freifunk/base/config.jinja config.jinja], welche dynamische Variablen enthält. Diese Variablen können in den einzelnen "Aufgaben-Scripten" einfach eingebunden und genutzt werden.
  
=== Salt - Aufgaben (top.sls) ===
+
=== Salt - Aufgaben (''[https://github.com/Freifunk-Dresden/ffdd-server/blob/T_RELEASE_latest/salt/freifunk/base/top.sls top.sls]'') ===
==== clear_oldenv ====
+
Über SLS-Dateien (Salt State), die im YAML-Format verfasst werden, legen wir die Konfiguration, zu installierende Pakete und einiges mehr für FFDD-Gateway-Server fest.
Säubert ältere Pakete, Konfigurationen, Dateien und Verzeichnisse ältere Gateway-Server Versionen.
 
  
==== apt ====
+
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/apt apt] ====
Konfiguriert benötigte Pakete um das Betriebssystem des Gateway-Server aktuell zuhalten.
+
Das Kommandline Interface für die Paketverwaltung. Hier werden die aktuellen 'source.list' für die Paketverwaltung hinterlegt.<br>
 +
Weiterhin definieren wir in der 'apt.conf.d' dass einmal am Tag ein Packagelist-Update sowie ein Security-Update gemacht werden soll.<br>
 +
Sollten Updates einen Neustartet benötigen so wird dieser um 4:30 Uhr (Serverzeit) durchgeführt.
  
==== remove_pkg ====
+
Ebenso hinterlegen wir einen Cronjob der prüft ob sich eine alte Kernel-Version auf dem Server befindet welche entfernt werden kann.
Entfernt alle Pakete welche die Funktionalität des Servers einschränken könnten.
 
  
==== install_pkg ====
+
==== [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/remove_pkg.sls remove_pkg] ====
 +
Entfernt alle überflüssigen Pakete welche die Funktionalität des Servers einschränken könnten.
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/cleanup_old_env.sls cleanup_old_env] ====
 +
'cleanup_old_env' wird für die Bereinigung alter und überflüssiger Konfigurations-Versionen genutzt.
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/install_pkg.sls install_pkg] ====
 
Installiert alle für den Server nötigen Pakete welche keine zusätzliche Konfiguration benötigen.
 
Installiert alle für den Server nötigen Pakete welche keine zusätzliche Konfiguration benötigen.
  
==== tools ====
+
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/tools tools] ====
Stellt Programme und Verknüpfungen für die Unterstützung des Administrators bereit.
+
Stellt Programme und Verknüpfungen als "Helferlein" für die Unterstützung des Administrators bereit.
  
==== root ====
+
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/root root] ====
Hinterlegt die aktuelle root user .bashrc .
+
Hinterlegt für den User 'root' eine <code>.bashrc</code> Konfiguration für die default shell: bash.<br>
 +
In dieser werden unter anderem aliases (Kürzel) bereitgestellt Kommandos abzukürzen.
  
==== users ====
+
Es gibt die Möglichkeit auch eigene aliases in der <code>/root/.bash_user_aliases</code> zu definieren. Diese wird in <code>/root/.bash_aliases</code> eingebunden und automatisch mitgeladen.
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/users users] ====
 
Stellt sicher das alle Benutzer für den Betrieb mit den richtigen Berechtigungen vorhanden sind.
 
Stellt sicher das alle Benutzer für den Betrieb mit den richtigen Berechtigungen vorhanden sind.
  
==== bash ====
+
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/bash bash] ====
Hinterlegt die Standart Konfiguration für "bash".
+
Hinterlegt die Standart Konfiguration für die default Shell "bash".
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/inputrc inputrc] ====
 +
Hinterlegt die Standart Konfiguration für das Console-Verhalten.
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/locales.sls locales] ====
 +
Konfiguriert die Ausgabe-Sprache des Servers.
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/timezone.sls timezone] ====
 +
Konfiguriert die Zeitzone nach der die Uhr des Servers gestellt wird.
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/ntp ntp] ====
 +
Stellt sicher dass die Serverzeit immer aktuell ist.
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/kernel kernel] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/kernel/sysctl.sls kernel.sysctl] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/systemd systemd] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/sudo sudo] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/rsyslog rsyslog] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/logrotate logrotate] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/cron cron] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/devel.sls devel] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/bmxd bmxd] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/fastd fastd] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/salt-minion salt-minion] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/ddmesh ddmesh] ====
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/uci uci] ====
 +
Die [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/uci/etc/config/ffdd <code>/etc/config/ffdd</code>] enthält alle Gateway Spezifische Informationen.
 +
 
 +
===== uci Konfigurtations Optionen =====
 +
Hier ist eine [https://github.com/Freifunk-Dresden/ffdd-server/blob/master/salt/freifunk/base/uci/etc/config/ffdd /etc/config/ffdd] Beispiel mit allen verfügbaren Optionen:
 +
 
 +
  config 'ffdd' 'sys'
 +
 
 +
    # install_dir !Please do not touch!
 +
    option 'install_dir' '/srv/ffdd-server'
 +
 
 +
    # ffdd-server repo url
 +
    option 'freifunk_repo' 'https://github.com/Freifunk-Dresden/ffdd-server'
 +
 
 +
    # Git-Branch/Tag
 +
    option 'branch' 'T_RELEASE_latest'
 +
 
 +
    # set autoupdate (0=off 1=on)
 +
    option 'autoupdate' '1'
 +
 
 +
    # Register key must be uniq. See http://wiki.freifunk-dresden.de/index.php/Technische_Information#Berechnung_IP_Adressen
 +
    option 'ddmesh_node' '-'
 +
    option 'ddmesh_registerkey' '-'
 +
 
 +
    # If set to 1, vserver will not announce itself as gateway. normally you do not need to change this.
 +
    option 'ddmesh_disable_gateway' '0'
 +
 
 +
    # used by webpage and /etc/issue.net
 +
    option 'servername' 'VPN Server X'
 +
 
 +
    #vserver network interface; this depends on vserver provider (hoster)
 +
    option 'ifname' 'eth0'
 +
 
 +
    # this is the secret key which is used to decrypt secured backbone connection
 +
    # the corresponding public key should be given to the peers, so those can encrpyt/connect to this server
 +
    # To generate the keys: /etc/init.d/S53backbone-fastd genkey
 +
    option 'fastd_secret' '-'
 +
    option 'fastd_public' '-'
  
==== vim ====
+
    # to accept all in comming connection, set this to 0 or remove this line.
Hinterlegt die Standart Konfiguration für "vim".
+
    # When set to 1, only already known connections are accepted. this may be used
 +
    # to prevent overloading a server.
 +
    option 'fastd_restrict' '0'
  
==== inputrc ====
+
    # SSH Password-Authentification (0=off 1=on)
 +
    # To disable tunneled clear text passwords and allow only pub-key auth.
 +
    option 'ssh_pwauth' '1'
  
==== locales ====
+
    option 'apache_ddos_prevent' '1'
Konfiguriert die Server-Ausgabe-Sprache.
 
  
==== timezone ====
+
    # DNS-Server
Konfiguriert die Serverzeit.
+
    list 'default_dns' '194.150.168.168'
 +
    list 'default_dns' '46.182.19.48'
  
==== ntp ====
+
    # BMXD
Stellt sicher dass die Serverzeit immer aktuell ist.
+
    option 'bmxd_prefered_gateway' '-'
 +
    list 'bmxd_mesh_if' '-'
 +
 
 +
    # gps coordinates. see /var/www/sysinfo.json
 +
    # this functionality is not part of Basic Vserver installation, as this service should only run on one or an backup server.
 +
    option 'gps_latitude' '51.033865'
 +
    option 'gps_longitude' '13.653252'
 +
    option 'gps_altitude' '0'
 +
    option 'city' 'Dresden'
 +
 
 +
    option 'contact_name' 'name'
 +
    option 'contact_location' 'Hosting Provider'
 +
    option 'contact_email' 'email'
 +
    option 'contact_note' 'VPN X'
 +
 
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/iproute2 iproute2] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/network network] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/iptables iptables] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/conntrack conntrack] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/fail2ban fail2ban] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/ssh ssh] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/openvpn openvpn] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/wireguard wireguard] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/bind bind] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/iperf3 iperf3] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/apache2 apache2] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/php php] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/letsencrypt letsencrypt] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/monitorix monitorix] ====
 +
==== [https://github.com/Freifunk-Dresden/ffdd-server/tree/master/salt/freifunk/base/vnstat vnstat] ====
 +
 
 +
== Autoupdate ==
 +
Bei jeder Durchführung des salt Befehls wird überprüft ob das locale ffdd-server Repository unter <code>/srv/ffdd-server</code> auf dem aktuellsten Stand ist.
 +
Dies gewährleistet das Änderungen sowie Bugfixes aber auch Neuerungen schnellst möglich zur Verfügung gestellt werden können.
 +
 
 +
=== Manuell Update ===
 +
Das Autoupdate kann zur jeder Zeit abzuschaltet werden. Dazu muss dieses lediglich über das folgende Kommando in der <code>/etc/config/ffdd</code> deaktiviert werden:<br>
 +
<code>uci set ffdd.sys.autoupdate=0</code>
 +
 
 +
 
 +
'''Ein manuelles Update durchzuführen:'''
 +
cd /srv/ffdd-server
 +
git stash
 +
git checkout $(uci -qX get ffdd.sys.branch)
 +
git pull -f origin $(uci -qX get ffdd.sys.branch)
 +
salt-call state.highstate --local -l error
 +
 
 +
== Fehlerhaftes Repository ==
 +
Sollte es Probleme jeglicher Art mit dem 'ffdd-server' repo geben dann ist der einfachste Weg dieses neu zu erstellen und salt erneut aufzurufen:
 +
 
 +
cd /srv/ ; rm -rf /srv/ffdd-server
 +
git clone https://github.com/Freifunk-Dresden/ffdd-server/ /srv/ffdd-server
 +
cd /srv/ffdd-server/ ; git checkout T_RELEASE_latest
 +
salt-call state.highstate --local -l error
 +
 
 +
== Development ==
 +
Um eine andere Release-Version zu benutzen ist ein notwendig in der <code>/etc/config/ffdd</code> die Option "branch=" anzupassen.
 +
 
 +
Default (Stable):
 +
uci set ffdd.sys.branch='T_RELEASE_latest'
 +
 
 +
Development:
 +
uci set ffdd.sys.branch='master'
 +
 
 +
=== DEV init_server.sh - Installation ===
 +
 
 +
apt install -y git
 +
git clone https://github.com/Freifunk-Dresden/ffdd-server.git /srv/ffdd-server
 +
cd /srv/ffdd-server
 +
 +
# master branch
 +
./init_server.sh dev
 +
# or
 +
./init_server.sh dev <branch/tag>
 +
 
 +
== Dienste / Installations-Anleitungen ==
 +
* [[Libre-Speedtest]] Interner Speedtest, basierend auf HTML5
 +
 
 +
== Wichig für Communitiy Forks ==
 +
'''HINWEIS:'''<br>
 +
Der FFDD-Server ist auf Freifunk Dresden zugeschnitten. Soll dieses als Basis für andere Freifunk Communities
 +
verwendet werden, müssen Anpassungen gemacht werden. Bitte ein [https://github.com/Freifunk-Dresden/ffdd-server/issues Issue] im Github erstellen.
  
==== cron ====
+
Es empfiehlt sich dringend für andere Communities, dieses Repository zu forken, da hier generelle Umstellungen zusammen mit der passenden Firmware für Dresdener Anforderungen erfolgen.<br/>
==== sysctl ====
+
Communities sollten dann auf das geforkte Repository (gilt auch für das "[https://github.com/Freifunk-Dresden/firmware-freifunk-dresden firmware-freifunk-dresden]" 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.<br/>
==== systemd ====
 
==== sudo ====
 
==== rsyslog ====
 
==== logrotate ====
 
==== devel ====
 
==== bmxd ====
 
==== fastd ====
 
==== salt-minion ====
 
==== ddmesh ====
 
==== nvram ====
 
==== iproute2 ====
 
==== network ====
 
==== iptables ====
 
==== conntrack ====
 
==== fail2ban ====
 
==== ssh ====
 
==== openvpn ====
 
==== bind ====
 
==== iperf3 ====
 
==== apache2 ====
 
==== php ====
 
==== letsencrypt ====
 
==== monitorix ====
 
==== vnstat ====
 
  
=== Laufzeit / Runtime ===
+
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 eigene!
 +
* 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.
 +
* <code>/usr/local/bin/ddmesh-ipcalc.sh</code> muss angepasst werden!

Aktuelle Version vom 24. Januar 2021, 15:35 Uhr

Allgemeines

Projektseite

Releases - latest Stable Release - CHANGELOG - Issues

Debian Security Informations - Salt Dokumentation

Git-Repository

Die aktuellste ffdd-server Version sowie Release Informationen findest du direkt auf der Projektseite.

https://github.com/Freifunk-Dresden/ffdd-server

Bereitstellung / Initialisierung

Die Initialisierung des Gateway-Server erfolgt über das init_server.sh Script. Dieses stellt sicher dass der Server auch den Grundlegenden Anforderungen entspricht und die Basis Konfiguration für Salt vorhanden ist.

Wichtige Punkte sind hier:

  • Konfiguration:
    • /etc/config/ffdd (Enthält alle Gateway Spezifische Informationen)
    • /etc/salt/minion.d/freifunk-masterless.conf (Definiert das Arbeitsverzeichnis für Salt - /srv/ffdd-server/salt/freifunk/base/ )
  • Pakete:
    • git - für die Bereitstellung und Aktualisierung des Repositories
    • salt-minion (Salt) - Automatisierung 'Masterless-Orchestration-Management'
  • Bereitstellung des Repositories unter /srv/ffdd-server/

Im init_server.sh Script wird der salt-call state.highstate --local Befehl aufgerufen. Damit übernimmt Salt nun die weitere Initialisierung des Gateway-Server und wird die von uns definierten Pakete und Konfiguration wie gewünscht auf das System spielen.

Betrieb / Operating

Salt Basics

Salt benötigt seine Konfiguration ( /etc/salt/minion.d/freifunk-masterless.conf )

file_client: local
file_roots:
  base:
    - /srv/ffdd-server/salt/freifunk/base

und das Arbeitsverzeichnis ( /srv/ffdd-server/salt/freifunk/base/ ) welches einen "Ablaufplan" die top.sls bereitstellt.

Alle hier definierten Aufgaben bekommen je nach Umfang und Komplexität im Arbeitsverzeichnis entweder:

eine Konfigurationsdatei ( ../freifunk/base/AUFGABE.sls )
oder
einen Unterordner ( ../freifunk/base/AUFGABE/ ) der eine init.sls enthält.

Des weiteren gibt es noch ein Konfigurationsfile, die config.jinja, welche dynamische Variablen enthält. Diese Variablen können in den einzelnen "Aufgaben-Scripten" einfach eingebunden und genutzt werden.

Salt - Aufgaben (top.sls)

Über SLS-Dateien (Salt State), die im YAML-Format verfasst werden, legen wir die Konfiguration, zu installierende Pakete und einiges mehr für FFDD-Gateway-Server fest.

apt

Das Kommandline Interface für die Paketverwaltung. Hier werden die aktuellen 'source.list' für die Paketverwaltung hinterlegt.
Weiterhin definieren wir in der 'apt.conf.d' dass einmal am Tag ein Packagelist-Update sowie ein Security-Update gemacht werden soll.
Sollten Updates einen Neustartet benötigen so wird dieser um 4:30 Uhr (Serverzeit) durchgeführt.

Ebenso hinterlegen wir einen Cronjob der prüft ob sich eine alte Kernel-Version auf dem Server befindet welche entfernt werden kann.

remove_pkg

Entfernt alle überflüssigen Pakete welche die Funktionalität des Servers einschränken könnten.

cleanup_old_env

'cleanup_old_env' wird für die Bereinigung alter und überflüssiger Konfigurations-Versionen genutzt.

install_pkg

Installiert alle für den Server nötigen Pakete welche keine zusätzliche Konfiguration benötigen.

tools

Stellt Programme und Verknüpfungen als "Helferlein" für die Unterstützung des Administrators bereit.

root

Hinterlegt für den User 'root' eine .bashrc Konfiguration für die default shell: bash.
In dieser werden unter anderem aliases (Kürzel) bereitgestellt Kommandos abzukürzen.

Es gibt die Möglichkeit auch eigene aliases in der /root/.bash_user_aliases zu definieren. Diese wird in /root/.bash_aliases eingebunden und automatisch mitgeladen.

users

Stellt sicher das alle Benutzer für den Betrieb mit den richtigen Berechtigungen vorhanden sind.

bash

Hinterlegt die Standart Konfiguration für die default Shell "bash".

inputrc

Hinterlegt die Standart Konfiguration für das Console-Verhalten.

locales

Konfiguriert die Ausgabe-Sprache des Servers.

timezone

Konfiguriert die Zeitzone nach der die Uhr des Servers gestellt wird.

ntp

Stellt sicher dass die Serverzeit immer aktuell ist.

kernel

kernel.sysctl

systemd

sudo

rsyslog

logrotate

cron

devel

bmxd

fastd

salt-minion

ddmesh

uci

Die /etc/config/ffdd enthält alle Gateway Spezifische Informationen.

uci Konfigurtations Optionen

Hier ist eine /etc/config/ffdd Beispiel mit allen verfügbaren Optionen:

 config 'ffdd' 'sys'
   # install_dir !Please do not touch!
   option 'install_dir' '/srv/ffdd-server'
   # ffdd-server repo url
   option 'freifunk_repo' 'https://github.com/Freifunk-Dresden/ffdd-server'
   # Git-Branch/Tag
   option 'branch' 'T_RELEASE_latest'
   # set autoupdate (0=off 1=on)
   option 'autoupdate' '1'
   # Register key must be uniq. See http://wiki.freifunk-dresden.de/index.php/Technische_Information#Berechnung_IP_Adressen
   option 'ddmesh_node' '-'
   option 'ddmesh_registerkey' '-'
   # If set to 1, vserver will not announce itself as gateway. normally you do not need to change this.
   option 'ddmesh_disable_gateway' '0'
   # used by webpage and /etc/issue.net
   option 'servername' 'VPN Server X'
   #vserver network interface; this depends on vserver provider (hoster)
   option 'ifname' 'eth0'
   # this is the secret key which is used to decrypt secured backbone connection
   # the corresponding public key should be given to the peers, so those can encrpyt/connect to this server
   # To generate the keys: /etc/init.d/S53backbone-fastd genkey
   option 'fastd_secret' '-'
   option 'fastd_public' '-'
   # to accept all in comming connection, set this to 0 or remove this line.
   # When set to 1, only already known connections are accepted. this may be used
   # to prevent overloading a server.
   option 'fastd_restrict' '0'
   # SSH Password-Authentification (0=off 1=on)
   # To disable tunneled clear text passwords and allow only pub-key auth.
   option 'ssh_pwauth' '1'
   option 'apache_ddos_prevent' '1'
   # DNS-Server
   list 'default_dns' '194.150.168.168'
   list 'default_dns' '46.182.19.48'
   # BMXD
   option 'bmxd_prefered_gateway' '-'
   list 'bmxd_mesh_if' '-'
   # gps coordinates. see /var/www/sysinfo.json
   # this functionality is not part of Basic Vserver installation, as this service should only run on one or an backup server.
   option 'gps_latitude' '51.033865'
   option 'gps_longitude' '13.653252'
   option 'gps_altitude' '0'
   option 'city' 'Dresden'
   option 'contact_name' 'name'
   option 'contact_location' 'Hosting Provider'
   option 'contact_email' 'email'
   option 'contact_note' 'VPN X'

iproute2

network

iptables

conntrack

fail2ban

ssh

openvpn

wireguard

bind

iperf3

apache2

php

letsencrypt

monitorix

vnstat

Autoupdate

Bei jeder Durchführung des salt Befehls wird überprüft ob das locale ffdd-server Repository unter /srv/ffdd-server auf dem aktuellsten Stand ist. Dies gewährleistet das Änderungen sowie Bugfixes aber auch Neuerungen schnellst möglich zur Verfügung gestellt werden können.

Manuell Update

Das Autoupdate kann zur jeder Zeit abzuschaltet werden. Dazu muss dieses lediglich über das folgende Kommando in der /etc/config/ffdd deaktiviert werden:
uci set ffdd.sys.autoupdate=0


Ein manuelles Update durchzuführen:

cd /srv/ffdd-server
git stash
git checkout $(uci -qX get ffdd.sys.branch)
git pull -f origin $(uci -qX get ffdd.sys.branch)
salt-call state.highstate --local -l error

Fehlerhaftes Repository

Sollte es Probleme jeglicher Art mit dem 'ffdd-server' repo geben dann ist der einfachste Weg dieses neu zu erstellen und salt erneut aufzurufen:

cd /srv/ ; rm -rf /srv/ffdd-server
git clone https://github.com/Freifunk-Dresden/ffdd-server/ /srv/ffdd-server
cd /srv/ffdd-server/ ; git checkout T_RELEASE_latest
salt-call state.highstate --local -l error

Development

Um eine andere Release-Version zu benutzen ist ein notwendig in der /etc/config/ffdd die Option "branch=" anzupassen.

Default (Stable):

uci set ffdd.sys.branch='T_RELEASE_latest'

Development:

uci set ffdd.sys.branch='master'

DEV init_server.sh - Installation

apt install -y git
git clone https://github.com/Freifunk-Dresden/ffdd-server.git /srv/ffdd-server
cd /srv/ffdd-server

# master branch
./init_server.sh dev
# or
./init_server.sh dev <branch/tag>

Dienste / Installations-Anleitungen

Wichig für Communitiy Forks

HINWEIS:
Der FFDD-Server ist auf Freifunk Dresden zugeschnitten. Soll dieses als Basis für andere Freifunk Communities verwendet werden, müssen Anpassungen gemacht werden. Bitte ein Issue im Github erstellen.

Es empfiehlt sich dringend für andere Communities, dieses Repository zu forken, da hier generelle Umstellungen zusammen mit der passenden Firmware für Dresdener Anforderungen erfolgen.
Communities sollten dann auf das geforkte Repository (gilt auch für das "firmware-freifunk-dresden" 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.

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 eigene!
  • 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.
  • /usr/local/bin/ddmesh-ipcalc.sh muss angepasst werden!