QNAP TS-419P II: Hetzner Storage Box als Backupziel

QNAP TS-419P II: Hetzner Storage Box als Backupziel

Ein NAS kann viele Jahre zuverlässig seinen Dienst verrichten. Mein QNAP TS-419P II gehört inzwischen zwar zur älteren Generation, erfüllt seine Aufgaben als zentraler Datenspeicher aber nach wie vor. Solange die Hardware funktioniert und die Anforderungen erfüllt, sehe ich keinen Grund, allein aus Altersgründen in ein neues Gerät zu investieren.

Allerdings gilt auch bei einem NAS mit RAID-Konfiguration: RAID ersetzt kein Backup. Es bietet je nach Konfiguration Schutz beim Ausfall einzelner Festplatten, nicht jedoch vor versehentlichem Löschen, Schadsoftware, Diebstahl oder einem Defekt des gesamten Geräts. Deshalb gehört für mich eine externe Datensicherung zu einem vernünftigen Speicherkonzept.

Bisher habe ich dafür Microsoft Azure Storage verwendet. Technisch funktionierte das, auf Dauer waren mir die laufenden Kosten von rund 11 Euro monatlich jedoch zu hoch. Mit der Hetzner Storage Box habe ich eine deutlich günstigere Alternative gefunden, die sich für meine Anforderungen ebenso als externes Backupziel eignet.

Der Umzug war allerdings nicht ganz so einfach wie erhofft. Die betagte Backupsoftware meines QNAP hatte Schwierigkeiten mit der SSL-Zertifikatsprüfung und der Verzeichniserstellung über WebDAV. Nach einiger Fehlersuche ließen sich beide Probleme mit überschaubaren Anpassungen lösen.

In diesem Artikel dokumentiere ich die notwendigen Änderungen, damit auch andere Besitzer älterer QNAP-Geräte ihre vorhandene Hardware möglicherweise weiterverwenden und kostengünstig extern sichern können – ohne gleich in ein neues NAS investieren zu müssen.

Wichtiger Warnhinweis

Die hier beschriebene Lösung ist ein inoffizieller Workaround für veraltete QNAP-Software. Die Umsetzung erfolgt auf eigenes Risiko.

Die Anpassungen greifen direkt in die Python-Umgebung von Cloud Backup Sync ein und werden weder von QNAP noch von Hetzner offiziell unterstützt. Fehler bei der Umsetzung können dazu führen, dass Sicherungsaufträge fehlschlagen oder Daten unvollständig gesichert werden.

Die Lösung wurde ausschließlich mit der nachfolgend beschriebenen Hard- und Softwarekonfiguration getestet. Eine Übertragbarkeit auf andere Versionen ist nicht gewährleistet.

Vor Änderungen sollten die Originaldateien gesichert werden. Anschließend ist ein vollständiger Wiederherstellungstest erforderlich.

Die verwendete QNAP-Software und Python 2.7 sind veraltet und können bekannte Sicherheitslücken enthalten. Dieser Workaround behebt lediglich die beschriebenen Verbindungs- und WebDAV-Probleme, nicht die Sicherheitsrisiken der Plattform. Insbesondere sollte ein solches NAS nicht direkt aus dem Internet erreichbar sein.

Verwendete Hard- und Software

KomponenteVersion
NASQNAP TS-419P II
BetriebssystemQTS 4.3.3.2784
BackupsoftwareHybrid Backup Sync 2.1.190909
Cloud-AnbindungCloud Backup Sync (WebDAV)
Python2.7.8
BackupzielHetzner Storage Box
VerbindungWebDAV über HTTPS (Port 443)

In der Hetzner-Verwaltung müssen WebDAV und der externe Zugriff aktiviert werden. Anschließend lässt sich die Storage Box in Cloud Backup Sync als WebDAV-Ziel konfigurieren.

Dabei sollte HTTPS mit aktivierter SSL-Zertifikatsprüfung verwendet werden.

SSL-Zertifikatsfehler beheben

Beim Verbindungsaufbau meldete HBS zunächst:

SSLVerifyFailedError -2404

Die Ursache lag in der veralteten CA-Zertifikatssammlung der mitgelieferten Python-Bibliothek requests. Obwohl die HTTPS-Verbindung über das QNAP-Betriebssystem funktionierte, schlug die Zertifikatsprüfung innerhalb von HBS fehl.

Abhilfe schaffte der Austausch der Zertifikatsdatei gegen die auf dem NAS vorhandene System-CA-Datei.

Zunächst die Originaldatei sichern:

cd /share/MD0_DATA/.qpkg/CloudBackupSync/backup/python-lib/requests/

cp cacert.pem cacert.pem.original

Anschließend die Systemzertifikate übernehmen:

cp /etc/ssl/certs/rootca.pem cacert.pem

Danach funktionierte die Verbindung zur Hetzner Storage Box mit aktivierter SSL-Zertifikatsprüfung.

Die verwendete System-CA-Datei sollte zuvor auf Aktualität und Vertrauenswürdigkeit geprüft werden. Der Austausch ersetzt kein Update der veralteten TLS-Bibliotheken.

WebDAV-Fehler bei der Verzeichniserstellung

Das zweite Problem zeigte sich bei Backupaufträgen mit Unterverzeichnissen.

HBS konnte zwar einzelne Dateien übertragen, scheiterte jedoch beim automatischen Anlegen von Ordnern. Im Debug-Protokoll erschienen unter anderem:

WebDAVConnectorCreateFolderError -2201
NoFileBackupSuccess -4009

Ursache war ein Zusammenspiel der alten Python-Bibliotheken easywebdav und requests mit HTTP-Weiterleitungen.

Beim WebDAV-Befehl MKCOL führte ein bereits vorhandener Ordnerpfad ohne abschließenden Schrägstrich zu einer Weiterleitung:

MKCOL /Backup
→ HTTP 301
→ GET /Backup/
→ HTTP 200

Weil requests die Weiterleitung automatisch verfolgte und dabei den Aufruf in GET umwandelte, erhielt easywebdav den unerwarteten Statuscode 200. HBS interpretierte dies als Fehler bei der Ordnererstellung.

Die Lösung: Verzeichnispfade bei MKCOL grundsätzlich mit einem abschließenden / versehen.

Python-Patch für easywebdav

Die Korrektur lässt sich über die Python-Datei sitecustomize.py einbinden. Diese wird beim Start der verwendeten Python-Umgebung automatisch geladen, sofern sie im entsprechenden Suchpfad liegt.

Die Datei wird unter folgendem Pfad erstellt:

/share/MD0_DATA/.qpkg/CloudBackupSync/backup/python-lib/sitecustomize.py

Sie erhält diesen Inhalt:

# QNAP HBS WebDAV MKCOL workaround

try:
    import easywebdav.client

    original_mkdir = easywebdav.client.Client.mkdir

    def patched_mkdir(self, path, safe=False):
        if path and not path.endswith('/'):
            path += '/'
        return original_mkdir(self, path, safe)

    easywebdav.client.Client.mkdir = patched_mkdir

except Exception:
    import traceback
    traceback.print_exc()

Der Patch ergänzt bei Aufrufen der mkdir()-Methode von easywebdav einen fehlenden abschließenden Schrägstrich. Die ursprüngliche Methode bleibt ansonsten erhalten.

Die Änderung betrifft die Python-Umgebung, die diese sitecustomize.py lädt, und kann daher auch Auswirkungen auf weitere Komponenten derselben Umgebung haben.

Da der Patch beim Start eines Python-Prozesses geladen wird, muss Cloud Backup Sync anschließend neu gestartet werden. Zuvor sollten sämtliche laufenden Backup- und Synchronisationsaufträge beendet sein.

/etc/init.d/CloudBackupSync.sh restart

Funktionstest nach der Anpassung

Nach dem Neustart der Backupdienste funktionierte die automatische Erstellung verschachtelter Verzeichnisse.

Folgende Szenarien wurden erfolgreich getestet:

  • Erstsicherung mit mehreren Unterverzeichnissen und Dateien
  • Inkrementelles Backup mit neu angelegten Unterverzeichnissen
  • Vollständiger Neustart des NAS mit anschließend erfolgreicher Verzeichniserstellung und Dateiübertragung

Auch die clientseitige Verschlüsselung wurde getestet. Eine verschlüsselt übertragene Datei ließ sich nach dem Download mit dem offiziellen QNAP QENC Decrypter unter Windows wiederherstellen.

Hinweise für den Dauerbetrieb

Die Anpassungen wurden mit der oben genannten QNAP-Konfiguration erfolgreich getestet. Sie sind jedoch kein allgemeiner Patch für sämtliche HBS-Versionen.

Bei einem Update oder einer Neuinstallation von Cloud Backup Sync können die Änderungen überschrieben werden.

Zum Deaktivieren des WebDAV-Patches kann sitecustomize.py umbenannt werden. Dabei muss auch eine gegebenenfalls vorhandene sitecustomize.pyc berücksichtigt werden. Anschließend ist ein Neustart des Dienstes erforderlich.

Für einen zuverlässigen Backupbetrieb sollten Sicherungsergebnisse regelmäßig kontrolliert und Wiederherstellungen getestet werden. Außerdem empfiehlt sich ein eingeschränkt berechtigtes Backupkonto sowie eine zusätzliche, unabhängige Sicherungskopie.

Die alte Python-2.7-Umgebung bleibt unabhängig von den Anpassungen ein Sicherheitsrisiko. Zudem ist die Übertragungsgeschwindigkeit des TS-419P II insbesondere bei verschlüsselten Backups begrenzt.

Fazit

Mit zwei kleinen Anpassungen konnte ich mein QNAP TS-419P II erfolgreich mit einer Hetzner Storage Box verbinden.

Die Aktualisierung der CA-Zertifikatsdatei beseitigte den SSL-Fehler. Ein kurzer Python-Patch korrigierte die fehlerhafte Behandlung von WebDAV-Verzeichnisoperationen.

Erstmalige und inkrementelle Backups funktionieren seitdem auch mit verschachtelten Verzeichnisstrukturen. Die Lösung überstand außerdem einen vollständigen NAS-Neustart.

Damit lässt sich die vorhandene QNAP-Hardware weiterhin für eine externe Datensicherung nutzen, ohne die SSL-Zertifikatsprüfung deaktivieren zu müssen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

WordPress Cookie Plugin von Real Cookie Banner