Contents
Server Dokumentation
Diese Dokumentation beschreibt unsere Serverlandschaft. Die restliche Technische Dokumentation ist auf der Seite TechnischeDokumentation zu finden. Zurzeit gibt es an 2 Standorte Server von Funkfeuer Graz. Die Meisten Server befinden sich in unserem Rack im Keller des Spektrals. Ausserdem gibt es noch einen Server in der Leitnergasse im Serverhousing von mur.at.
Rack im Spektral/Housing
KVM Host (wirt.ffgraz.net)
Ein leistungsfähiger Rechner im Rack im Spektral der uns als Wirtsystem für unsere KVM Instanzen dient. Er hängt mit je einem Netzwerkinterface im Funkfeuer VLAN des Housing Switches und im VLAN für das Housing selbst und hat somit direkten Zugang zum Internet über die SDSL Verbindung zu Inode. Die derzeitige Hardwareausstattung:
Intel Core2Duo E8500, 2x 3.16 GHz
- Intel S3210SHLC Entry Server Board, 2x GBit Ethernet onboard
8GB (4x2GB) Kingston ValueRam DDR2-800
- 1x Intel Pro-1000 Server Adapter
- 2x SAMSUNG HD502IJ 500 GB Raid Edition
Der Wirt selbst ist ein Debian Lenny in einer sehr minimalen Basisinstallation. Die beiden Festplatten sind in 3 jeweils als Software Raid-1 gebündelte Partitionen geteilt. Die erste Partition enthält den Bootloader und alles was unter /boot liegt. Die zweite Partition ist mittels LVM (Volumegroup ffxen) weiter unterteilt und dient hauptsächlich als Systempartition. Der dritte Teil ist ebenfalls ein LVM (Volumegroup data) und beherbergt neben einer 200GB großen reinen Datenpartition (gemountet unter /srv) die einzelnen Volumes für die virtuellen Maschinen. Als Virtualisierungslösung wird KVM (aufbauend auf Intel VT) eingesetzt. Die Konfiguration und Steuerung der virtuellen Maschinen erfolgt über libvirtd. Die Konfigurationsdateien für die einzelnen VM's sind im XML-Format in /etc/libvirt/qemu/ zu finden. Beim Booten werden alle als automatisch markierte VM's gestartet und bei einem Reboot werden alle laufenden Maschinen beendet (nicht suspended). Zur Steuerung und Konfiguration der virtuellen Maschinen sollte bevorzugt virsh verwendet werden. Diese kann entweder als root ausgeführt werden oder von allen Benutzern die zur Gruppe libvirt gehören gestartet werden. Im letzteren fall muss die virsh mit dem Kommando:
# virsh --connect qemu:///system
gestartet werden. Zu bemerken ist dabei das die XML Dateien der einzelnen VM's nur vom user root gelesen oder geändert werden können allerdings können alle anderen Gruppenmitglieder virtuelle Maschinen steuern (rebooten etc). Alle bisher installierten VM's verwenden als tty die erste (virtuelle) serielle Schnittstelle (Bootloader + Kernel + getty) damit ist es möglich über das virsh Kommando console sich auf der Maschine einzuloggen auch wenn das über Netzwerk nicht funktionieren sollte. Auch dafür sind derzeit root Rechte von Nöten. Besondere Vorsicht ist bei dem virsh Kommando undefine geboten da damit nicht nur die virtuelle Maschine aus der Hostliste entfernt wird sondern auch die dazugehörende XML Datei gelöscht wird. Also vor einem undefine unbedingt die XML Datei sichern.
Als einziger erwähnenswerter Dienst läuft auf unserem Wirt eine munin-node mithilfe derer Langzeitstatistiken über die wichtigsten Systemparameter geführt werden. Näheres ist unter Munin zu finden.
Wegen einiger Stabilitätsprobleme ist der Hardware Watchdog des BMC des Mainboards aktiviert und auf 900 Sekunden gestellt. Die dazupassenden Modulparemter werden in der Datei /etc/modules gesetzt. Der Watchdog wird mit dem ersten Starten des watchdog Daemons aktiviert und dann mindestens alle 10 Sekunden zurücksetzt. Sollte der Daemon nicht ordnungsgemäß beendet werden wird die Maschine nach Ablauf des Timers resetiert. Den derzeitigen Status des Timers kann man mit dem ipmitool wie folgt abfragen:
# sudo ipmitool -I open mc watchdog get
Ausserdem kann er mit folgendem Kommando zum Stillstand gebracht werden.
# sudo ipmitool -I open mc watchdog off
Nat-Gateway (oldgw.ffgraz.net)
Zurzeit gibt es einen Gateway der auf unsere DSL Leitung um Spektral das NAT für das gesamte Netzwerk übernimmt. Dieser Gateway ist als virtuelle Maschine auf unserem Wirt Server eingerichtet. Der Gateway natet auf die IP Adresse 83.64.208.18 und ist einer der Knoten des Anycast DNS Netzes. Die VM ist relativ minimalistisch ausgeführt. Die folgende Dienste laufen darauf:
olsrd (/etc/olsrd/olsrd.conf) - announced die default Route und die Anycast DNS Adresse (10.12.0.10)
lighttpd (/etc/lighttpd/lighttpd.conf, /var/www) - Serviert eine minimale Webseite hauptsächlich für unseren Version Scan.
snmpd (/etc/snmp/snmpd.conf) - dient zum Auslesen der Interfacestatistik über MRTG
named (/etc/bind/*) - als Slave für die diversen Funkfeuer DNS-Zonen konfiguriert. Er verwendet 2 DNS Server von Inode/UPC als Forwarder.
munin-node (etc/munin/*) - Datensammelnode für Munin
Die Firewall (NAT Regeln etc.) werden über das Initscript /etc/init.d/firewall konfiguriert.
Public IP Gateway (gw.ffgraz.net)
Eine weitere virtuelle Instanz auf unserem Wirt. Dieser Router übernimmt gemeinsam mit mur.ffgraz.net das BGP Announcment unseres Public IP Bereichs. Details zu dem Public IP Setup gibt es auf der Seite PublicIP. Dort ist auch eine Beschreibung der Gateway spezifischen Konfiguration zu finden PublicIPGateway.
Neben Quagga und olsrd laufen noch folgende Dienste:
lighttpd (/etc/lighttpd/lighttpd.conf, /var/www) - Serviert eine minimale Webseite hauptsächlich für unseren Version Scan.
snmpd (/etc/snmp/snmpd.conf) - dient zum Auslesen der Interfacestatistik über MRTG
munin-node (etc/munin/*) - Datensammelnode für Munin
Statistics (stats.ffgraz.net)
Auf diesem ebenfalls virtualisierten Server laufen diverse Scripte die statistische Informationen über das Funkfeuer Netzwerk sammeln. Weiters läuft lighttpd der die gesammelten Daten in Form ein Webseite präsentiert. Alle Datenbanken und Archive sowie der Documentroot des Webservers befinden sich im Verzeichnis /srv.
Topologie
Für die Topolgie Daten läuft eine eigene olsrd Instanz von der mittels eines Perl Scriptes die Daten geholt werden. Danach versucht das Script die zu den IP Addressen passenden DNS Einträge zu finden und zeichnet dann mittels neato (graphviz) den Graphen. Das Script wird von cron alle 2 Minuten ausgeführt. Weiters wird alle 10 Minuten ebenfalls von cron ein Script aufgerufen das ein Snapshot der aktuellen .dot Datei in das Archiv kopiert. Die dazu passenden cron Einträge sind in der Datei /etc/cron.d/topo zu finden. Alle anderen Scripte befinden sich unter /srv/www/topo.
Smokeping
smokeping zeichnet zu allen laut Datenbank dazu frei geschalteten Routern im Netz eine Erreichbarkeitsstatistik. Dazu wird die eigens dafür geschriebene Export Funktion des manman Systems verwendet. Prinzipiell wird smokeping über die Konfigurationsdateien im Verzeichnis /etc/smokeping gesteuert. 4x täglich (3:45, 9:45, 15:45, 21:45) wird mittels cron die Liste der zu testenden Router aus der Datenbank upgedatet. Der dazu passende cron Eintrag ist in der Datei /etc/cron.d/smokeping zu finden. Alle anderen Daten und Scripte liegen in /srv/www/smokeping bzw in /srv/var-lib-smokeping. Auf letzeres Verzeichnis zeigt der Link /var/lib/smokeping.
Firmware Version
Die derzeit im Netzwerk verwendeten Firmware Versionen werden 4 mal am Tag (4, 10, 16 und 22 Uhr) von einem Ruby Script ermittelt und dann in einem txt Format gespeichert. Ein weiteres Script kopiert die erstellte Statistik in ein Archiv und erstellt eine Ausgabe in HTML und eine Grafik. Alle dazu gehörenden Scripte und Daten befinden sich in oder unter dem Verzeichnis /srv/www/version/. Der Script selbst wird von cron zu den angegebenen Zeitpunkten gestartet. Der dazu passende cron Eintrag ist in /etc/cron.d/version zu finden. Das Ruby Script liest das Webinterface aller derzeit im Netz aktiven Knoten (Topologie) aus und versucht dann daraus die Firmware Version zu ermitteln. Zurzeit wird die Freifunkfirmware sowohl im Freifunk als auch im Funkfeuer und im FFGraz Branding automatisch erkannt. Alle anderen Router sollten im Html Head ihrer index.html folgenden Meta Tag enthalten:
<META CONTENT="debian_olsr-0.5.6" NAME="fffversion">
Wobei der String CONTENT natürlich die derzeit aktive OLSR Version wiederspiegeln sollte. Genau dieser String wird dann in der Tabelle bzw Grafik verwendet.
Aufgrund der Konfiguration der Ubiquity AirOS, die keine Seite (auch nicht index.html) ohne gültigen Usernamen und Passwort anzeigt, wird nach einem 403 (Permission Denied) Error versucht vom gleichen Host auf Port 81 eine Seite zu laden. In unserer AirOS Version ist dafür ein minimaler HTTP Server installiert der auf diesem Port eine kleine Datei mit dem entsprechenden META Tag serviert.
Auf unseren Debian basierten Routern wird folgende Datei als index.cgi im Webserver Documentroot verwendet damit bei einem update von OLSR keine falsche Versionsnummer verwendet wird:
#!/bin/sh echo Content-type: text/html echo OLSR_VER=`dpkg -l olsrd | grep olsrd | awk '{ print $3 }' | sed s/-[^-]*$//` cat<<EOF <HTML> <HEAD> <TITLE></TITLE> <META CONTENT="debian_olsr-$OLSR_VER" NAME="fffversion"> .... </HEAD> <BODY> .... </BODY> </HTML> EOF
MRTG
Derzeit gibt es 2 mrtg Statistiken. Eine liest die Daten aus unserem Housing Switch aus und der zweite bietet eine Übersicht über alle Uplinks und die Aufteilung des Traffic's auf die verschiedenen Teilebereiche des Netzes. Während die Uplink Statisitik statisch konfiguriert ist wird die Switch Statistik 4x täglich (3:45, 9:45, 15:45, 21:45) upgedatet um neu hinzugekommene Ports mitbeobachten zu können. Der dazu passende und alle anderen cron Einträge sind in der Datei /etc/cron.d/mrtg zu finden. Die restliche Konfiguration (incl. Scripte) findet sich im Verzeichnis /etc/mrtg/. Die eigentlichen Daten, Bilder und Html Dateien liegen in /srv/www/mrtg/switch bzw /srv/www/mrtg/uplink.
Munin
Für Langzeitstatistiken der wichtigsten Systemparameter der einzelenen Server wird munin eingesetzt. Hierzu läuft auf jedem zu überwachnden System eine munin-node. Der Statistik Server sammelt diese Informationen und stellt diese graphisch dar.
Webserver (www.ffgraz.net)
Der Webserver ist ebenfalls eine virtuelle Maschine auf unserem Wirt. Darauf läuft unsere Homepage, dieses Wiki die Google-Map sowie das Manman System samt der kompletten Datenbank und dem Webinterface zur Vergabe von IP Adressen. Genaueres ist unter ServerKonfigurationWeb zu finden.
Tunnel (tunnel.ffgraz.net)
Ein LinksysWRT mit Freifunkfirmware der uns als OpenVPN Server dient. Auf diesem Router enden alle über OpenVPN realisierten Tunnelverbindungen. Näheres dazu ist auf der Seite FunkInsel zu finden. Die Konfiguration des Routers kann auf FunkInselServer zu finden.
mur.at-Rack Leitnergasse
mur (mur.ffgraz.net)
Ein leistungsfähiger Router im Rack von mur.at in der Leitnergasse. Er hängt in dem VLAN das uns von mur.at durchgeschalten wurde und erledigt derzeit das Routing zwischen mur.at und Funkfeuer. Ausserdem ist er ein Knoten des Anycast DNS Netzes. Dieser Rechner übernimmt weiters gemeinsam mit gw.ffgraz.net das BGP Announcement unseres Public IP Bereichs. Details zu dem Public IP Setup gibt es auf der Seite PublicIP. Dort ist auch eine Beschreibung der Gateway spezifischen Konfiguration zu finden PublicIPGateway.
Die derzeitige Hardwareausstattung:
Intel Core2Duo E7200, 2x 2.53 GHz
- Intel DG45ID Multimedia Board, 1x GBit Ethernet onboard
- 2x 2GB Kingston HyperX DDR2-800
- 1x Intel Pro-1000 Server Adapter, low profile
1x S-ATA zu Compact Flash Adapter + 2 GB SanDisk Extreme II
- 2x Western Digital WD5002ABYS-0 500 GB Raid Edition
Neben Quagga und olsrd laufen noch folgende Dienste:
apache2 (/etc/apache2/*, /var/www) - Serviert eine minimale Webseite hauptsächlich für unseren Version Scan.
snmpd (/etc/snmp/snmpd.conf) - dient zum Auslesen der Interfacestatistik über MRTG
named (/etc/bind/*) - als Slave für die diversen Funkfeuer DNS-Zonen konfiguriert. Er verwendet 2 DNS Server von mur.at als Forwarder.
munin-node (etc/munin/*) - Datensammelnode für Munin
Das Root Filesystem des Routers ist Readonly gemounted und befindet sich auf der ersten Partition der Compact Flash Karte. Die beiden 500 GB Platten sind per LVM (VolumeGroup data, Logical Volume storage) gebündelt und unter /srv gemountet. Die wichtigsten Konfigurationsdateien (zb. /etc/bind) befinden sich auf einer zweiten Partition auf der Flash Karte welche unter /flash gemounted ist. Dieser Teil ist schreibbar weil sich die darauf befindlichen Dateien nur selten ändern. Ausserdem existiert ein tmpfs unter /var/log/tmp in dem trotz Readonly Root Filesystem die wichtigsten Logfile vorhanden sind. Es kann also ein Großteil der Konfiguration ohne besondere Vorkehrungen geändert werden. Sollte trotzdem eine Änderung des Readonly Teils nötig sein (zb. bei einem Systemupdate) muss zunächst durch aufrufen von
# writeable
die Partiton schreibbar gemacht werden. Nach der Änderung sollte unbedingt mit
# nowriteable
wieder alles auf den Ursprungszustand gestellt werden um nicht durch unnötiges häufiges Schreiben den Flashchip zu beschädigen.
Um Änderungen am LVM vorzunehmen muss das Root File System schreibbar gemounted sein!