Backup per VPN
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
- Erstellen des Wiederherstellungs-ISO
Anschließend wird eine Lizenz für den Client abgefragt. Da wird die kostenlose Variante verwenden, können wir diesen Punkt überspringen.
Nun wird das Hauptmenü angezeigt und die Konfiguration kann mit der Tastatur und der Taste C gestartet werden.
Zunächst muss die Konfiguration benannt werden. Dieser Name kann später verwendet werden, um den Job manuell zu starten.
Als Backup-Modus verwenden wir das Backup des gesamten Systems (“Entire machine (recommended)”).
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”.
Genauer wird nun der Zielpfad des Backups spezifiziert. Hier muss die IP des Zielsystems im heimischen Netzwerk und das exportierte Verzeichnis gewählt werden.
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.
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.
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.