Warum brauche ich ein Backup?

Ein Hardwaredefekt, eine tote Festplatte oder der Befall einer Verschlüsselungssoftware können dafür sorgen, dass die wichtigen, über Jahre gesammelten Daten nicht mehr verfügbar sind. Oft hofft man, dass dieser Fall nicht eintritt und bereitet sich deshalb nicht darauf vor. Der Schrecken ist dann jedoch groß, wenn wichtige Dokumente, Urlaubsfotos und Spielstände für immer verloren sind.

Vorsicht ist besser als Nachsicht. Deshalb sollte man auf jedem technischen Gerät, auf dem man Daten speichert ein regelmäßiges Backup erzeugen. Das betrifft nicht nur Laptops sondern auch Smartphones und Tablets.

Auch für mich gilt dieses Prinzip, da ich auf meinem Cloud-Server neben dieser Seite noch andere Dienste betreibe, auf die ich angewiesen bin.

Backup ja, aber wohin?

Zunächst sollte man sich überlegen, wohin man das Backup seiner Daten speichern möchte. Hier gibt es mittlerweile neben lokalen Lösungen auch Cloud-Speicher der gängigen Hyperscaler (Amazon Web Services, Google Cloud, Microsoft Azure) oder anderer Unternehmen wie Strato oder Backblaze. Ein Vorteil ist hier, dass diese Firmen meist Daten global replizieren können und somit eine sehr hohe Ausfallsicherheit gewährleisten können. Nachteil ist allerdings, dass die Backups vom Betreiber theoretisch einsehbar sind, wenn die Nutzdaten nicht selbst verschlüsselt werden. Auch können solche Daten durch fehlerhafte Sicherheitskonfigurationen des Anbieters abfließen. Zusätzlich kann das Speichern der Daten je nach Umfang hohe Kosten verursachen.

Typische lokale Methoden sind die gute, alte externe Festplatte oder ein Netzwerkspeicher. Sie kann zwar kaputtgehen, wenigstens weiß man aber so genau, wo die eigenen Daten liegen. Die verfügbarkeit der Backups kann man erhöhen, indem man die Festplatten in regelmäßigen Abständen austauscht oder Backups auf einen zusätzlichen Datenträger kopiert.

Mein Aufbau

Da die Quelle ein bereits vorhandener Cloud-Server ist und ich anderen Hyperscalern sowie deren Abrechnungsmodalitäten nicht vertraue, möchte ich meine Daten lokal speichern. Wie gelange ich aber von meinem Server zu meinem lokalen Zielspeicher?

Hierfür verwende ich eine VPN-Verbindung, die ich zwischen meinem Cloud-Server und meinem Heimnetzwerk aufbaue. Da ich eine FritzBox verwende, ist das mit Linux-Bordmitteln relativ einfach möglich. Um Backups zu erzeugen, verwende ich die kostenfreie Variante des Veeam Backup Agent for Linux, der das Erstellen von inkrementellen Backups meines Cloud-Servers unterstützt. So werden in regelmäßigen Abständen veränderte Daten von meinem Cloud-Server auf einen lokalen Speicher gespielt. Den lokalen Speicher binde ich nach dem Aufbau der VPN mittels NFS ein.

Software

Quellsystem (Cloud-Speicher)

Zum Erstellen der Backups verwende ich den Veeam Backup Agent for Linux. Dieser kann nach der Registrierung beim Hersteller heruntergeladen werden und bedarf keiner Lizenz, sofern der kostenfreie Rahmen nicht überschritten wird. Die heruntergeladene Datei kann dann per SFTP auf den Cloud-Speicher übertragen werden.

Hinweis: Ich verwende als Quellsystem einen Ubuntu-Server in der Version 20.04. Der Agent ist allerdings auch für andere Distributionen erhältlich. Das Installationskommando muss dafür eventuell angepasst werden.

Auf dem Quellserver muss das Paket dann per dpkg installiert werden.

sudo dpkg -i veeam-release-deb_1.0.8_amd64.deb

Da hier aber lediglich das Repository von Veeam installiert wird, muss anschließend noch der Client installiert werden.

sudo apt update
sudo apt install veeam

Je nach Quellsystem ist auch noch das Installieren des NFS-Clients notwendig, der verwendet wird, um den Zielspeicher anzubinden.

sudo apt install nfs-common

Um die VPN-Verbindung aufzubauen, wird der Client vpnc verwendet. Dieser ist mit der FritzBox als Zielsystem kompatibel.

sudo apt install vpnc

Alle Voraussetzungen auf dem Quellsystem sind damit getroffen.

Zielsystem (lokaler Speicher im eigenen Netzwerk)

Auf dem Zielsystem wird ein NFS-Dienst installiert, der einen Speicherbereich im Netzwerk bereitstellt.

sudo apt install nfs-kernel-server

Der Dienst muss zunächst konfiguriert werden. Hierfür muss die Konfigurationsdatei /etc/exports angepasst werden. Diese Datei enthält alle per NFS freigegebenen Ordner. Hier wird nun eine neue Zeile hinzugefügt.

/<Zielpfad>	<VPN IP des Cloudservers>(no_root_squash,rw,async)

Hier müssen nun die Werte <Zielpfad> und <VPN IP des Cloudservers> ersetzt werden.

  • Zielpfad: Pfad zum gewünschten Ordner, in dem die Backup-Dateien abgelegt werden sollen.
  • <VPN IP des Cloudservers>: Diese muss aus der Verwaltungsoberfläche der FritzBox abgelesen werden, sobald das Quellsystem per VPN mit dem internen Netzwerk verbunden wurde.

Das Einsetzen der VPN-IP des Cloudservers ist theoretisch nicht notwendig, verhindert aber, dass andere nicht vertrauenswürdige Geräte in eurem Netzwerk den Backup-Speicher anbinden können.

Anschließend wird der Dienst zum automatischen Start konfiguriert und aktiviert.

sudo systemctl enable nfs-server
sudo systemctl restart nfs-server

Der Dienst sollte nun laufen. Sein Status kann überprüft werden mit dem Befehl sudo systemctl status nfs-server.

Netzwerkkonfiguration

Die Vorbereitung auf Seiten der FritzBox kann entsprechend der Herstellerdokumentation vorgenommen werden. Im wesentlichen muss hier der Fernzugriff aktiviert und ein Nutzer für den Zugriff angelegt werden.

Diese Daten können nun in der Konfiguration des vpnc-Clients hinterlegt werden. Die Konfigurationsdatei befindet sich unter /etc/vpnc/default.conf und wird mit dem folgenden Inhalt befüllt.

IPSec gateway <MyFritz Hostname>
IPSec ID <IPSec-ID / Gruppenname in FritzBox>
IPSec secret <IPSec-Schlüssel / Shared Secret in FritzBox>
IKE Authmode psk
Xauth username <Nutzername / Account in FritzBox>
Xauth password <Nutzerpasswort>

Die VPN-Verbindung kann anschließend über die Angabe der Konfigurationsdatei gestartet werden.

sudo vpnc default.conf

Anschließend sollte die VPN-Verbindung aufgebaut sein.

sudo ip address show dev tun0
775: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1412 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none
    inet 192.168.77.201/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::1125:46cd:f392:7722/64 scope link stable-privacy
       valid_lft forever preferred_lft forever

Die hier angezeigte IP-Adresse hinter inet ist übrigens die zu verwendende IP-Adresse in der Konfiguration des NFS-Servers.

Um die VPN-Verbindung später einfacher starten und stoppen zu können, lege ich im Root-Verzeichnis zwei Dateien mit folgendem Inhalt an:

  • start_vpn.sh
#!/bin/bash

vpnc default.conf
  • stop_vpn.sh
#!/bin/bash

vpnc-disconnect

Die Skripte werden anschließend noch als ausführbar markiert:

sudo chmod 700 /root/start_vpn.sh
sudo chmod 700 /root/stop_vpn.sh

Diese werden später auch im Veeam-Client verwendet.

Backup vorbereiten und starten

Zur Einrichtung muss nun die VPN gestartet werden.

sudo /root/start_vpn.sh

Nun kann der Veeam-Client zur Ersteinrichtung gestartet werden. Zunächst müssen die Lizenzbedingungen akzeptiert und die Konfiguration des Recovery-ISOs quittiert werden.

  • Akzeptieren der AGB

Schritt 1: AGB

  • Erstellen des Wiederherstellungs-ISO

Schritt 2: Recovery-ISO

Anschließend wird eine Lizenz für den Client abgefragt. Da wird die kostenlose Variante verwenden, können wir diesen Punkt überspringen.

Schritt 3: Lizenz

Nun wird das Hauptmenü angezeigt und die Konfiguration kann mit der Tastatur und der Taste C gestartet werden.

Schritt 4: Start der Konfiguration

Zunächst muss die Konfiguration benannt werden. Dieser Name kann später verwendet werden, um den Job manuell zu starten.

Schritt 5: Name der Konfiguration

Als Backup-Modus verwenden wir das Backup des gesamten Systems (“Entire machine (recommended)”).

Schritt 6: Backup-Modus

Nun wird das Ziel des Backups gewählt. Da ich meinen Zielspeicher per NFS anbinden möchte, wähle ich hier den Punkt “Shared Folder”.

Schritt 7: Backup-Ziel

Genauer wird nun der Zielpfad des Backups spezifiziert. Hier muss die IP des Zielsystems im heimischen Netzwerk und das exportierte Verzeichnis gewählt werden.

Schritt 8: NFS-Ziel

Mit einem Klick auf “[Next]” wird der Zugriff auf den Zielspeicher geprüft.

Hinweis: Sollte es hier zu Problemen kommen, sollten IP und Pfad überprüft werden. Zusätzlich kann die Firewall des Zielsystems oder eine fehlende VPN-Verbindung den Zugriff verhindern.

Damit diese Verbindung immer automatisch auf- und abgebaut wird, werden die vorher angelegten Skripte hinzugefügt.

Schritt 9: Skripte

Schritt 10: Skripte auswählen

Schritt 11: Skripte

Zuletzt wird nun noch ein Zeitplan definiert, in dem das Backup durchgeführt wird. Da ich die Last auf meinem Cloud-Server und meinem Heimanschluss nicht unnötig erhöhen möchte und mir wöchentliche Backup-Punkte ausreichen, wähle ich hier nur den Samstag aus.

Schritt 12: Zeitplan

Anschließend wird nun noch eine Zusammenfassung der Optionen angezeigt und das Backup kann gestartet werden. Das Ergebnis des Backups sollte mittels sudo veeam überprüft werden.

Nächste Schritte

In der Zukunft möchte ich noch eine Benachrichtigung per Mail einrichten. Hierfür könnte das Skript stop_vpn.sh verwendet werden. Zusätzlich würde ich gerne statt einer IPSEC-Verbindung WireGuard verwenden. Dieses neuere Protokoll erhöht den Durchsatz und sollte in einer der nächsten Versionen meiner FritzBox unterstützt werden.

TLDR

Ich habe ein Backup von meinem Cloud-Server auf ein Ziel in meinem lokalen Netzwerk eingerichtet. Hierfür verwende ich die Backup-Software Veeam sowie eine VPN und einen NFS-Server.