Autorenarchiv: d.weller

Netzwerksetup für Homeserver NXT

Die ID88 bringt wie bereits geschildert zwei Netzwerkschnittstellen mit, die dann an die virtuellen Maschinen durchgereicht werden müssen. Damit dies reibungslos funktioniert und auch die Zusammenarbeit mit dem Router (hier: Fritzbox) klappt, kann man wie folgt vorgehen, um sich eine virtualisierte Firewall zu installieren:

In der Fritzbox wird der DHCP abgeschaltet. Die IP für den Host / den Homeserver wird auf dessen nach Außen / zum Router zeigendem / rotem Interface händisch vergeben. In meinem Fall wäre das eth1 auf dem Host.

  • Der Router hat die IP 192.168.2.1 und nutzt eine Netzmaske 255.255.255.0
  • Das vom Host zum Router zeigende Interface erhält im folgenden Beispiel die IP 192.168.2.200

Auf dem nach Innen / zum Heimnetz zeigenden / grünen Interface des Hosts / Homeservers (in meinem Fall eth0) benötigt man eine Bridge, damit alle virtuellen Maschinen im internen Netz mit ihren eigenen MACs (und damit später auch ihren eigenen IP-Adressen) auftauchen können. Hier ist die IP der Bridge auf dem Host nicht mehr als die IP eines Switches – die IP Adresse des Gastes wird im Gast selbst festgelegt.

  • Nach Innen erhält der Host die IP 10.16.1.100 (eingestellt auf dessen Bridge br0 und nicht auf eth0. Eth0 auf dem Host bleibt komplett unkonfiguriert)
  • Das Heimnetz selbst ist ein 10.16er Netz mit Netzmaske 255.255.0.0 oder  10.16.0.0/16 (damit bekomme ich genug Freiraum für die nächsten Jahre und kann außerdem dafür sorgen, dass Geräte, die ich zwischen Schule und zu Hause hin und her trage immer die gleiche IP haben)

Sollte Ubuntu als Host-Betriebssystem zum Einsatz kommen, dann greift man zur Server-Ausgabe. Diese bringt keinen network-manager mit, der einem beim Setup dazwischen schießen würde. Setzt man eine Desktop-Version ein, dann muss der network-manager zuerst entfernt werden. Das Setup funktioniert nur, wenn man die Interfaces selbst konfigurieren kann.

Zusammengefasst: Auf dem Host steht in /etc/network/interfaces:

# Das Interface in Richtung Router
auto eth1
iface eth1 inet static
address 192.168.2.200
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 192.168.2.1
dns-nameservers 213.73.91.35 192.168.2.1 85.214.20.141

# Das Interface in Richtung Heimnetz
auto br0
iface br0 inet static
address 10.16.1.100
netmask 255.255.0.0
bridge_ports eth0
bridge_fd 5
bridge_stp no

Eth0 auf dem Host bleibt – wie oben schon geschildert – unkonfiguriert. Der Host ist dann aus dem Heimnetz unter der IP der Bridge direkt zu erreichen und lässt sich so leicht warten.

Eth1 auf dem Host habe ich nicht nur mit dem Nameserver auf dem Router, sondern zusätzlich noch mit den DNS des CCC und Foebud versorgt. Man weiß ja nie.

Nun legt man sich die erste Virtuelle Maschine (hier unter VirtualBox, das unter einem normalen Benutzeraccount läuft) mit zwei Netzwerkkarten an.

vbox_eth_nat

Das „zum Router“ zeigende Interface der VM wird als NAT angelegt.

Damit ich die Netzwerkkarten später in der VM wieder finde, schreibe ich deren MAC Adressen immer so um, dass „rot“ eine 1 (für eth1 des Hosts) am Ende hat – und „grün“ eine 0 (für eth0 des Hosts).

vbox_eth_bridged

Das „nach Innen“ ins Heimnetz zeigende Interface der VM wird an die Bridge br0 des Hosts angeschlossen.

Ist der erste Host (hier IPFire als Firewall) gestartet, richtet man dessen Interfaces ebenfalls händisch her. Das nach Außen zeigende, rote Interface erhält vom DHCP auf dem NAT der VirtualBox irgendeine 10er Adresse. Welche, ist relativ egal. Später eingerichtete Portweiterleitungen übernimmt VirtualBox. Wichtig sind die Angaben für das interne, grüne Interface (also das, das an der Bridge des Hosts hängt). Hier muss die /etc/network/interfaces des Gastes angepasst werden (im Falle von IPFire über dessen Weboberfläche).

# Das rote Interface zeigt in Richtung Router und haengt am VBox NAT
auto eth0
iface eth0 inet dhcp

# Das gruene Interface zeigt in Richtung Heimnetz und haengt an der Bridge des Hosts
auto eth1
iface eth1 inet static
address 10.16.1.1
netmask 255.255.0.0

Die erste VM ist aus dem Heimnetz dann unter 10.16.1.1 zu erreichen.

So lange auf dem IPFire noch kein DHCP Server auf grün läuft, muss man sich auf einem Client eine 10.16.er Adresse händisch selbst zuweisen, damit man an die Weboberfläche kommt.

Die Installation weiterer VMs hängt direkt vom Sicherheitsbedürfnis ab. Zwei Wege sind möglich: einer führt über virtuelle Netzwerkkarten an der Firewall-VM (blau und orange), der andere richtet VMs „neben“ der Firewall ein.

vbox_internalnetwork

Wählt man die sicherere Variante (weitere Netzwerkkarten in der Firewall-VM), richtet man diese NICs in VirtualBox als „Internes Netzwerk“ ein. Die VMs hängen dann mit ihrem roten Interface direkt an der Firewall und ebenfalls im VM-internen-Netzwerk. Das wäre z.B. ein Weg, um ein orangenes Netz einzurichten (siehe Bild oben für die Netzwerkkarte eines Webservers im orangen Netz von IPFire).

Aside: Ein blaues Netz ist nicht so einfach zu haben, weil WLAN Karten auf dem Host nicht als solche in VMs hinein gereicht werden können. Man kann sich hier aber mit USB-WLAN-Sticks helfen, die an die VM gebunden und aus dieser heraus konfiguriert werden.

Wählt man die unsicherere Variante, richtet man weitere VMs „neben“ der Firewall ein. Das Setup entspricht hierbei jeweils der Einrichtung der ersten VM: Eth1 des Gastes mit VBox-NAT zeigt nach Außen. Die nach Innen zeigende Schnittstelle des Gastes (eth0) wird im Gast händisch mit einer IP versorgt und klebt an der Bridge br0 auf dem Host.

Fällt ein derartiger Gast in fremde Hände, steht dem Angreifer das komplette interne Netz offen. Die Firewall ist hier reduziert auf ihre Webfilter-/DHCP-Funktionen für das interne Netz. Schutz von Außen bietet sie so nur bedingt. Man sollte aber wegen einer derartigen Konstruktion nicht gleich in Panik ausbrechen. Ge-nat-ete VMs dürften von Außen schwer zu knacken sein. Bei Portweilterleitungen vom Router auf eine solche VM macht man jedoch ein Türchen für Angriffe auf und muss eine derartige VM (eine Brücke zwischen Internet und Heimnetz) dann noch einmal gesondert absichern (iptables, fail2ban, tripwire etc. pp.). Oder man spart sich das interne Interface gleich komplett.

Hier vermehren sich die VMs fast täglich: Die Firewall war zuerst da, dann kam ein Fileserver, dann ein Nameserver, ein Webserver, ein Gameserver … 10er Netze und viel RAM auf dem Host lassen viel Raum für Spinnereien 🙂

Latitude E6410 Keyboardchaos

IMG_20131128_175238

Janis bekommt zu Weihnachten einen seiner dickeren Wünsche erfüllt und erhält unter Selbstbeteiligung plus Beteiligung der Großeltern sowie unter Verzicht auf Geburtstagsgeschenke einen „neuen“ Laptop. Das bei Lapstore bestellte Gerät hat Vattern mit 8GB RAM und einer SSD konfiguriert, damit die nächsten paar Jahre Ruhe im Karton ist. Flott ist die Büchse – Hut ab.

Allerdings erhielt ich eine Konfiguration, bei der die linke Hälfte der Tastatur (QWERTZ) deutsch und die rechte Hälfte US war. So lange man weiß, wo Umlaute zu finden sind fällt einem das nicht weiter auf. Ich installierte fröhlich vor mich hin und erst als ich zum ersten Mal eine Umleitung und eine Pipe brauchte blickte ich auf die Tasten …

Größer-/Kleinertasten sowie Pipe gibt es nicht, wenn man ein US Keyboard auf deutsch betreibt, da darf man umschalten. Nicht weiter schlimm, aber nervig, wenn man das Umschalten des Layouts beim Wechsel auf eine Shell verschnarcht und dann erst wieder verstehen muss, was eigentlich los ist.

Also hab ich die Jungs von Laptstore angeschrieben und umgehend eine andere Tastatur zugeschickt bekommen. Mit Hilfe von Youtube war dann klar: Der Tastaturenwechsel ist kein Problem.

https://www.youtube.com/watch?v=m25N1eZj1FQ

Früher gab es Handbücher.

Zentyal bare metal

Im Kontext des Projektes Homeserver NXT verfolgte ich zuerst eine monolithische (in Nachhinein: blöde) Denke. Firewall, Fileserver und Nameserver integriert Zentyal. Zentyal basiert auf Ubuntu – also wäre da auch der Gameserver integrierbar gewesen. Dazu: eine hübsche, moderne Weboberfläche zur Administration vom Sofa aus. Das wollte ich mir zumindest mal ansehen.

Der erste Versuch, Zentyal direkt auf die Zotac ID88 zu bekommen, klemmte schon am Kernel des Installers, der nicht erkennen wollte, dass ich von USB installierte und nicht von CD. Die Meldung war, wenn ich mich richtig erinnere

Your installation CD-couldn’t be mounted. This probably means that the CD-ROM was not in the drive. If so you can insert it and try again.

Retry mounting the CD-ROM?

Dieser Fehlermeldung kann man abhelfen, wenn man die zentyal.iso mit auf den Stick kopiert, von dem aus man installieren will.

Taucht dann die Fehlermeldung auf, wechselt man mit Alt F2 auf eine Shell, aktiviert diese mit Enter und erstellt sich zuerst ein Verzeichnis, in das man den USB Stick mounten kann:

mkdir /media/stick

mount -t vfat /dev/sdb /media/stick

Dann erstellt man sich ein Loop Device und wirft über dieses dem Ubuntu/Zentyal Installer die gewünschte CD-Rom zum Fraß vor:

mount -t iso9660 -o loop /media/stick/zentyal.iso /cdrom

Mit Alt F1 kommt man zurück zum Installer und kann diesem nun vergaukeln, alles wäre OK.

Zentyal kommt so zwar auf die ID88 – aber das hilft nicht viel, weil die Chips des NICs zu neu sind.

Welcher Idiot kauft auch Hardware mit Realtek Chips?

Sofern man unbedingt die alte Ubuntu 12.04 LTS / Zentyal Distri auf der ID88 haben muss, dann darf man ab hier die Realtek NICs umschiffen, bis ein neuerer Kernel und Treiber an Bord sind. Der einfachste Weg ist, sich die WLAN Karte der ID88 (Intel) zu konfigurieren und über diese dann weiter zu arbeiten. Wie das geht wird hier beschrieben (man kann sich bei den nötigen Schritten auch mit einem lokalen Repo auf USB Stick helfen) – aber ich hatte da schon eingesehen, dass die Idee, Zentyal direkt auf das Metall zu werfen, zu unflexibel ist.

Also kam ein aktueller Ubuntu 13.10 Server (der sich reibungslos vom USB Stick installieren lässt) an Bord, VirtualBox dazu und Zentyal in eine VM. Aber das ist wiederum im nächsten Post beschrieben …

Homeserver NXT

Bin grad kaum zum Bloggen gekommen, weil mein Kopf voll war mit Heimnetzkram. Da ist aber nun der Knoten geplatzt und in den nächsten Posts schildere ich dann Schritt für Schritt, wie ich dieses aufgesetzt habe.

Angefangen hatte alles damit, dass meine Smoothwall auf ihrem P III langsam zu lahm wurde. Je älter die Kinder desto mehr Geräte im Haus und desto heftiger die Belastung auch für die Firewall. Außerdem wollte ich ausmisten. In den letzten Jahren hatte sich eine solch große Zahl an Computern bei mir im Arbeitszimmer versammelt, dass auf dem Fußboden schon kein Platz mehr war.

Altehardwarestapel im Kellerflur

Jedes Stück Hardware hatte einen Platz im Hinterkopf, irgendein Projekt, das ich unbedingt mal machen wollte … aber die Zeit war nie da. Am Ende standen da 8 ungenutzte Rechner der Pentium IV Klasse rum, dazu Tastaturen, Mäuse, Bildschirme, weitere Netzwerk- und Grafikkarten … Nerdbastelkram eben. Nichts, was man heute noch wirklich haben will und auch nichts, was ich als Firewall nutzen wollte, weil selbst der Sparsamste von diesen Kisten (ein FSC mit Siemens-Mainboard) noch 90 Watt die Stunde beim Nixtun verbriet.

Energiesparend und vor allem auch möglichst klein sollte die neue Lösung sein.

Zuerst dachte ich an einen Nachbau des in der c’t beschriebenen 11-Watt-Servers, konnte aber das Netzteil nicht auftreiben. Auf der Suche nach einem Standort für diesen Rechner in meinem Arbeitszimmer fiel mir auf, dass diese Kiste schon wieder in Midi-Tower-Größe anrücken würde. Möglichst klein wäre das auch nicht.

Ein Raspberry Pi dann also? Dem traute ich nicht zu, als Firewall ausreichend zügig zu arbeiten. Außerdem trieb mich die Idee um, doch noch andere Dienste zu betreiben. Die Projekteideen – einst für die P4 Hardware vorgesehen – ploppten immer wieder aus dem Hinterkopf wieder ins Bewusstsein und verhinderte eine schnelle Entscheidung zwischen Mini und Midi …

Ein permanent laufenden Fileserver als Backup-Rechner und Tauschordner, ein eigener Nameserver als Ergänzung zur Firewall für eine noch bessere Kontrolle der Webzugriffe und noch weniger Schnüffelei von Außen … und für uns Jungs und Freunde noch ein dezidierter Gameserver für Minecraft, OpenArena und World of Padman.

Am Ende und nach viel Hin und Her wurde es nun ein Zotac ID 88 mit Core i3-3220T CPU mit 16 GB Ram und einer WD NAS Festplatte mit 1 TB. Der schluckt Idle 18 Watt und unter Last bisher nicht mehr als 23 Watt, was ein wenig unter dem Verbrauch der alten Firewall liegt. Dem Basteltrieb ist damit eine physikalische Grenze gesetzt: Erweiterungen sind unmöglich, das Kästchen ist voll.

Installiert sind inzwischen IPFire als Firewall, ein Fileserver unter Samba und ein Nameserver mit Bind. Der Gameserver muss bis zu den Ferien warten.

Unter dem Tag homeserver nxt geht es dann bald weiter mit Hinweisen zur Einrichtung und meinen Erfahrungen …

WDR4900 WAF=0

wdr4900_leds

Oha. Der WAF beim TPLink WDR4900 ist sehr, sehr niedrig. Das liegt vor allem an den grell blauen LEDs des Geräts und dessen Unsitte auf dem Uplink dauernd zu blinken.

Zwar bietet OpenWrt theoretisch die Möglichkeit, die LEDs zu steuern – aber eben nur die, die vom System auch erkannt werden.

An vier von den blauen Dingern komm ich ran (und dann wären da noch zwei grüne für USB Aktivitäten) – aber eben nicht an die LEDs des Switches.

Jetzt hilft nur noch schwarzes Isolierband 🙁

wdr4900_leds [ODT] [180 kb]

wdr4900_leds [PDF] [180 kb]

OpenWRT auf TL-WDR4900 N900

Im Prinzip läuft bei der Installation von OpenWRT auf dem TPLink WDR4900 alles wie gewohnt: einfach rund.

Leider fällt bei diesem Router aber beim OpenWRT Release Barrier Breaker der Aufruf des Web-Interfaces Luci auf die Nase und meldet:

/usr/lib/lua/luci/dispatcher.lua:284: No valid theme found

Bei mir lag das daran, dass das Default Theme nicht installiert war, weil ich mir gleich das Paket luci-theme-bootstrap gezogen hatte.

Ein

opkg install luci-theme-openwrt

schafft Abhilfe.

Das Theme Bootstrap (svn-r9934-1) lässt sich aber bei mir auch im Anschluss hieran nicht aktivieren. In Luci wird es nicht einmal als Auswahlmöglichkeit angezeigt.

WOL

Im BIOS zuerst die entsprechende Funktion aktivieren. Dann das ethtool installieren

sudo apt-get install ethtool

und auf die Netzwerkkarte (hier ETH0) loslassen:

sudo ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: g
        Wake-on: g
        Current message level: 0x000000ff (255)
                               drv probe link timer ifdown ifup rx_err tx_err
        Link detected: yes

Der momentane Zustand bei meiner Karte für ETH0 ist der Zeile Support Wake-on: g zu entnehmen. Das kleine g steht für Wake on MagicPacket ™ – siehe man page zum ethtool.

Das setzt man einmal händisch mit

sudo ethtool -s eth0 wol g

und trägt diese Zeile ohne sudo auch in die /etc/rc.local vor dem exit 0 ein.

In die /etc/init.d/halt kommt noch ein

NETDOWN=no

statt des vorhandenen yes, damit die Karte nicht abgeschaltet wird, wenn der Rechner runter fährt.

Man notiert sich nun die MAC Adresse der ETH0 (ifconfig eth0) und ein shutdown -h knippst den Rechner aus … Jetzt kann man testen, ob man dieses Gerät auch wieder über’s Netz wach bekommt. Hierzu benötigt man das Paket etherwake

sudo apt-get install etherwake

Ein WOL Paket auf die MAC 00:30:05:83:0d:74 wird gesendet mit

sudo etherwake 00:30:05:83:0d:74

… und dann kann man mit Hoffen beginnen. Oder mit debuggen. Je nach Netzwerkkarte.

Wenn es funktioniert, dann kann man sich einen Alias in der .bashrc oder .bash_aliases hierzu anlegen, der einem das Memory zur MAC Adresse abnimmt

alias fscon=’sudo etherwake 00:30:05:83:0d:74′

Wer über einen WLAN AP oder das Internet WOL Pakete versenden will, kann Pech haben – diese können nicht über jedes Gerät geroutet werden. Router, die directed broadcasts unterstützen, können aber entsprechend konfiguriert werden.

Ein Script fährt nun unseren Backup-/Spiele-/Tauschordner-Server am späten Abend runter – und ein Befehl holt diesen wieder her, wenn er gebraucht wird. Ist schon vor dem späten Abend klar, dass er ausgeschaltet werden kann, dann hilft eine alias Definition in der .bashrc weiter:

alias fscoff=’ssh -t benutzer@192.168.0.112 „sudo shutdown -h now“‚

Man wird dann zwei mal nach dem Passwort gefragt – einmal für SSH und dann noch für das sudo. Das können nun auch die Kinder, mit diesen beiden Aliasen umgehen: fscon schaltet die Kiste ein – fscoff schaltet sie wieder ab. Und vom gesparten Strom gehen wir essen.

Thunderbird Kalender Rettung

Ralfs Thunderbird Kalender hatte von einem Tag auf den anderen alle Termine vergessen und egal was wir hier versuchten – ich konnte diese nicht mehr herstellen. Dazu kam, dass Thunderbird obendrein auch alle Spracheinstellungen ignorierte. Also kopierten wir zuerst das Profil weg

mv .thunderbird .thunderbird_bak

und starteten Thunderbird neu. Plötzlich sprach er wieder Deutsch und auch der Kalender funktionierte. Der Fehler schien demnach irgendwo im Profilverzeichnis versteckt zu sein …. leider war aber nicht heraus zu finden, wo genau.

Mir erschien es an diesem Punkt einfacher zu sein, Thunderbird neu einzurichten statt viel Zeit in Reparaturversuche zu stecken. Wir beendeten also TB und aktivierten das alte Profil wieder

rm -r .thunderbird

mv .thunderbird_bak .thunderbird

und installierten einen lokalen Mailserver

sudo apt-get install dovecot-postfix

Der lokale Mailserver wurde in TB als neues E-Mail Konto eingerichtet (benutzername@localhost) und In diesen lokalen Mailserver schoben wir dann auch alle Mails aus TB. Die Mails waren damit vor unseren weiteren Spielchen mit TB sicher.

Die gesammelten Adressen hätten wir an dieser Stelle ebenfalls exportieren sollen … was aber leider vergessen wurde. Ralf hat das – denke ich – inzwischen auch schon gemerkt 🙁

TB wurde beendet und sein Profilverzeichnis wieder nach .thunderbird_bak geschoben.

Im nächsten Schritt wurde TB dann erneut neu gestartet. Im Kalender wurde ein einzelner Termin eingetragen, um diesen zu initialisieren. Dann wurde TB wieder beendet.

Aus dem alten Profilverzeichnis

~/.thunderbird_bak/xyz-und-so.default/calendar-data/

wurde dann die local.sqlite in den neuen Profilordner unter

~/.thunderbird/xyz-und-so.default/calendar-data/

kopiert. Die durch die Termineintragung (s.o.) im neuen Profilordner vorzufindende local.sqlite muss hierbei überschrieben werden.

Leider waren wir jetzt nicht am Ende angelangt – denn: Die local.sqlite enthält zwar die eigentlichen Kalenderdaten, aber leider nur in Bezug auf eine bestimmte Kalender-ID. In unserem Fall auf die Kalender-ID aus dem alten Profilordner, so dass diese ID im nächsten Schritt noch geändert werden musste. Das geht mit dem Programm sqlitebrowser recht einfach, den man sich wie folgt an Bord holt:

sudo apt-get install sqlitebrowser

Die für den nächsten Schritt benötigte ID des neuen Kalenders besorgt man sich aus der Datei prefs.js im aktuellen .thunderbird Profilpfad. Diese sieht ungefähr so aus:

calid

Mit dem sqlitebrowser wurde die ~/.thunderbird/xyz-und-so.default/calendar-data/local.sqlite geöffnet und die folgenden SQL Befehle im Tab „Execute SQL“ ersetzten dann die ID des Kalenders in der local.sqlite

update cal_attendees set cal_id=’ID des Kalenders‘;

update cal_events set cal_id=’ID des Kalenders‘;

update cal_properties set cal_id=’ID des Kalenders‘;

update cal_recurrence set cal_id=’ID des Kalenders‘;

Thunderbird wurde dann wieder gestartet … und siehe da: Zwar waren die Zuordnungen zu bestimmten lokalen Kalendern verschwunden, aber wenigstens die Termine selbst waren alle wieder da.

VirtualBox, rdesktop und ssh Tunnel

sshtunnel_rdesktop

Folgendes Setup: In der Schule steht ein VMHost auf dem einige VMs mit Hilfe von VirtualBox virtualisiert wurden. Der VMHost ist von Außen nur über SSH und dort nur über Port 2233 zu erreichen.

Säße man direkt am VMHost würde man die rdesktop-Sitzung mit dem folgenden Befehl aufrufen:

rdesktop localhost:3389

Diese Sitzung will man nun auf dem Laptop zu Hause haben. Also braucht man einen SSH Tunnel in die Schule, über den man sich die rdesktop Sitzung nach Hause holt.

Ein derartiger Aufbau des SSH Tunnels erfolgt wie hier angegeben, wenn man auch lokal die rdesktop Session auf Port 3389 sehen will:

ssh -p 2233 benutzer@vmhost.schule.tld -L 3389:localhost:3389

Lokal macht man dann (in einem zweiten Terminal) die rdesktop Session auf, wie wenn man direkt am VMHost sitzen würde: rdesktop localhost:3389

pydio

pydio

AjaXplorer nennt sich – wie im Blog der Entwickler schon seit Ende September angekündigt – seit dem letzten Update pydio … und liefert neben der gleichen guten Bedienbarkeit und Konfigurierbarkeit als Web-Aufsatz für WebDAV-Server auch professionellen Support.

Für  kleinere Installationen braucht pydio noch immer kein Datenbank-Backend, auch wenn ein solches die Performanz deutlich hebt.

Apps für iOS und Android stehen zur Verfügung, kosten aber etwas Kleingeld wenn ich mich richtig erinnere (mein ajaXplorer/pydio-Serverchen läuft schon seit einer der ersten Versionen und ich sag diese Ausgabe immer als Dankeschön für die Entwickler).

tl;dr: EIn Blick auf pydio sollte werfen, wer die vielen Funktionalitäten von ownCloud (Kalender, Adressbuch etc.) nicht braucht.