Synology Remote Backup mit Raspberry Pi und Wireguard
Sind Ihnen schon einmal Daten verlorengegangen, weil Sie kein Backup hatten? Oder hatten Sie zwar ein Backup, konnten dies aber nicht wiederherstellen? Beides sind Situationen, die man im Ernstfall nicht gebrauchen kann. Wir zeigen in diesem Beitrag, wie Sie ein räumlich getrenntes Remote Backup mit Raspberry Pi und einem Wireguard VPN für Ihr Synology NAS einrichten.
Der Artikel ist zwar sehr lang, behandelt dabei aber auch mögliche Fallstricke und deren Lösung.
Ausgangslage und Zielszenario des Remote Backups
Die folgende Ausgangslage soll um ein Remote Backup ergänzt werden:
- In einem Netz (Heimnetzwerk) werden Daten zentral auf einem Synology NAS gesichert
- Auf den Clients erfolgt dies für ausgewählte Ordner per Synology Drive automatisch
- Manuell auf Netzwerkfreigaben, die das Synology NAS den Nutzern zur Verfügung stellt
- Kritische Daten werden zusätzlich vom Synology NAS täglich auf eine angeschlossene, externe Festplatte gesichert
Im Zielszenario sollen diese kritischen Daten zusätzlich einmal täglich nachts an einem entfernten Standort gesichert werden.
Dabei gelten folgende Anforderungen:
- Umsetzung einer preisgünstigen Lösung (Raspberry Pi)
- Nutzung einer externen Festplatte, die im Bedarfsfall schnell in das Heimnetzwerk geholt werden kann
- Verwendung einer permanenten und sicheren VPN-Verbindung in das Heimnetzwerk (Wireguard)
- Fire & Forget Lösung, die am entfernten Standort nur an das Internet und Strom angeschlossen wird, beim Start des Raspberry Pi verbindet sich dieser von selbst, es sind keine weiteren Maßnahmen notwendig.
- SSH-Zugriff auf dem entfernten Rechner zur Administration
Dieses Szenario setzen wir mit dem Synology Remote Backup Raspberry Ansatz in diesem Artikel um.
Voraussetzungen
Um das Szenario abbilden zu können, sind folgende Voraussetzungen in Ihrem Netzwerk notwendig:
- Vorhandene Backup-Lösung, in diesem Fall ein Synology NAS (DSM)
- Ein Wireguard-VPN Server in Ihrem Netzwerk (siehe Wireguard unter Proxmox installieren)
- Ein Raspberry Pi (min. Version 2)
- Eine USB-Festplatte, auf dem das Remote Backup gehalten wird und die am Raspberry Pi angeschlossen wird
- Ein Remote-Standort mit Internetzugriff, an dem der Raspberry Pi angeschlossen ist
- Ein dynamischer DNS Anbieter, sofern keine feste IP-Adresse im Netzwerk existiert
Da das Backup mittels rsync realisiert wird, kann theoretisch jede Backup-Lösung verwendet werden, die mit rsync umgehen kann.
Einrichtung des Raspberry Pi
Nehmen Sie einen Raspberry Pi und setzen Sie diesen am besten neu auf. Laden Sie sich dazu die aktuelle Version des Raspberry Pi OS herunter, verwenden Sie dazu den Raspberry Pi Imager. Wählen Sie die minimale Installation ohne grafische Oberfläche aus.
Wenn Sie das Image auf eine SD Karte geschrieben haben, erstellen Sie in der „boot“-Partition noch eine leere Datei ssh
, damit der Raspberry ohne Maus, Keyboard und Monitor per SSH konfiguriert werden kann.
Wenn der Raspberry Pi gebootet ist, können Sie sich per
ssh pi@IP-ADRESSE
mit dem Pi verbinden, das Passwort lautet raspberry
.
Starten Sie anschließend das grafische Setup, um die Grundkonfiguration des Raspberry Pi durchzuführen:
sudo raspi-config
Die Grundkonfiguration des Raspberry Pi wird an dieser Stelle nicht weiter beschrieben, da es hierfür unzählige Quellen im Netz gibt (raspi-config Dokumentation).
Root User konfigurieren
An dieser Stelle sollten noch das Passwort für den Root User geändert und die SSH-Konfiguration angepasst werden, damit auch mit root per SSH zugegriffen werden kann.
sudo passwd
Anschließend noch folgende Änderung in der /etc/ssh/sshd_config
durchführen
sudo nano /etc/ssh/sshd_config
PermitRootLogin yes
und den Dienst neu starten
sudo systemctl restart ssh
Sie sollten jetzt in der Lage sein, sich per SSH sowohl mit dem User pi
als auch mit dem User root
anmelden zu können.
Externe Festplatte konfigurieren
Die Festplatte wird mit NTFS formatiert, um größtmögliche Kompatibilität zwischen verschiedenen Betriebssystemen (Windows, Mac OS, Linux) zu gewährleisten. Dafür wird der benötigte Treiber nachinstalliert:
sudo apt install ntfs-3g
Da der Remote Pi möglichst stromsparend arbeiten soll, wird die Festplatte auch schlafen gelegt, wenn diese nicht benötigt wird. Dazu verwenden wir autofs
.
sudo apt install autofs
Dann wird ein Mountpoint eingerichtet, unter dem die USB-Festplatte eingehängt wird. Der Mountpoint kann frei gewählt werden, wir verwenden /srv/backuphdd
.
mkdir /srv/backuphdd
Damit die USB-Festplatte automatisch beim Start gemounted und nach einer Minute Inaktivität wieder unmounted wird (um Strom zu sparen), wird die Datei /etc/auto.master
ergänzt.
nano /etc/auto.master
fügen Sie am Ende der Datei folgende Zeile hinzu
/srv /etc/auto.usb-hdd --timeout=60 --ghost
Da die USB-Festplatte anhand der UUID identifiziert werden muss, lassen wir uns über blkid diese ausgeben
root@remotebackuppi:/# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="5DE4-665C" TYPE="vfat" PARTUUID="4e36d88d-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="7295bbc3-bbc2-4267-9fa0-099e10ef5bf0" TYPE="ext4" PARTUUID="4e36d88d-02"
/dev/mmcblk0: PTUUID="4e36d88d" PTTYPE="dos"
/dev/sda1: LABEL="Daten" UUID="44848E91848E84E0" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="0d6bd992-4ecc-43e1-a6bb-d219799caf4d"
Legen Sie eine neue Datei /etc/auto.usb-hdd an
nano /etc/auto.usb-hdd
und fügen dieser folgenden Eintrag hinzu (wobei die UUID entsprechend der Ausgabe oben ersetzt werden muss)
backuphdd -fstype=ntfs-3g :/dev/disk/by-uuid/44848E91848E84E0
Starten Sie anschließend den Dienst neu
systemctl restart autofs
Die Festplatte wird jetzt bei Bedarf gemounted und nach einer Minuten Inaktivität wieder unmounted.
rsync konfigurieren
Wir nutzen in diesem Artikel rsync für ein Remote Backup mit Raspberry Pi. Rsync ist standardmäßig im Pi OS enthalten. Wir müssen es nur noch aktivieren und für unsere Zwecke konfigurieren. Dazu wird die Datei /etc/default/rsync
editiert und folgende Werte gesetzt:
RSYNC_ENABLE=true
RSYNC_NICE='10'
Für rsync existiert eine Beispielkonfiguration, die wir kopieren und anschließend bearbeiten:
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/
Anschließend wird die Datei /etc/rsyncd.conf
um folgende Einträge erweitert:
[Backup]
comment = Synology Remote Backup
path = /srv/backuphdd
lock file = /var/lock/rsyncd
read only = no
list = yes
uid = root
gid = root
strict modes = yes
hosts allow = 192.168.178.145 (Synology NAS IP)
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
Anschließend muss der Dienst neu gestartet werden:
systemctl restart rsync
Wireguard Client einrichten
In der aktuellen Version des Raspberry Pi OS ist das Wireguard-Paket bereits enthalten und kann einfach nachinstalliert werden:
apt install wireguard
Auf dem Wireguard Server ist eine Konfiguration für den Raspberry Pi zu erstellen. Der Inhalt (Beispiel)
[Interface]
Address = 10.7.0.6/24, fddd:2c4:2c4:2c4::6/64
DNS = 8.8.8.8, 8.8.4.4
PrivateKey = xxxxxxxxxx
[Peer]
PublicKey = xxxxxxxxxx
PresharedKey = xxxxxxxxxx
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = IP DES WIREGUARD-SERVERS bzw. URL DES DYNDNS-DIENSTS:51820
PersistentKeepalive = 25
wird dann per
nano /etc/wireguard/wg0.conf
in die Wireguard Verbindungskonfiguration auf dem Raspberry Pi kopiert.
Ob sich vom Raspberry Pi aus eine Verbindung zum Wireguard-Server herstellen lässt, kann mit folgenden Kommandos geprüft werden.
Verbindung herstellen:
wg-quick up wg0
Verbindung beenden:
wg-quick down wg0
Wenn die Verbindung manuell erfolgreich hergestellt werden konnte, richten wir diese anschließend so ein, dass diese automatisch beim Starten des Raspberry PI hergestellt wird:
systemctl enable wg-quick@wg0
Der Raspberry Pi kann sich jetzt per Wireguard zu unserem Heimnetz verbinden – allerdings können wir aus dem Heimnetz noch nicht auf den Remote Pi zugreifen. Dazu muss im Heimnetz eine statische Route eingerichtet werden.
Verwendung von DynDNS und Zwangstrennung beim Provider
Wenn Sie eine feste IP-Adresse für das Heimnetzwerk und keine Zwangstrennung bei Ihrem Provider haben, dann können Sie diesen Abschnitt überspringen und beim Abschnitt „Statische Route einrichten“ weitermachen.
DynDNS zum Zugriff auf das Heimnetz einrichten
Es existieren verschiedene DynDNS-Anbieter und je nach Router im Heimnetzwerk unterscheidet sich die Einrichtung, weshalb wir an dieser Stelle auf die grundsätzliche Einrichtung des DynDNS-Services nicht eingehen.
Stellen Sie aber sicher, dass Sie eine Portfreigabe im Router auf den Wireguardserver mit dem Port 51820
einrichten.
Zwangstrennung beim Provider berücksichtigen
In diesem Szenario baut der Raspberry Pi eine permanente Wireguard VPN Verbindung zum Heimnetzwerk auf. Wenn Sie bei Ihrem Provider einer Zwangstrennung unterliegen, dann ist bei Wireguard folgendes zu berücksichtigen:
Nachdem Wireguard sich einmal die Zieladresse per DNS aufgelöst hat, wird diese nie wieder geprüft. Das, und die Verwendung von UDP, führt dazu, dass Wireguard bei einer Zwangstrennung (und damit einer neuen IP) im Heimnetzwerk munter weiter an die einmalig aufgelöste IP Adresse sendet. Durch die Verwendung von UDP wird in diesem Fall auch kein Fehler ausgelöst. Aus dem Heinnetzwerk kann der Pi hingegen nicht mehr erreicht werden, da der VPN-Tunnel nicht mehr gültig ist. Um dieses Problem zu lösen existieren zwei Möglichkeiten:
- Ein Skript von Wireguard aus den wireguard-tools
- Die Nutzung eines Cron-Jobs
Die Lösung aus 1. konnten wir umsetzen, sie ist mit den einzurichtenden Services auch sauber installierbar gewesen – allerdings hat diese im Endeffekt nicht das gewünscht Ergebnis gelierfert, es gab immer noch ein Problem mit der DNS-Auflösung.
Wir haben daher die Umsetzung der Variante 2. gewählt, da diese kinderleicht umzusetzen ist und sauber funktioniert.
Führen Sie als root auf dem Raspberry pi folgenden Befehl aus, um einen Cron-Job zu hinterlegen
crontab -e
Fügen Sie dort folgende Zeile ein
0 * * * * systemctl restart wg-quick@wg0 >/dev/null 2>&1
Damit wird zu jeder vollen Stunde die Wireguard VPN Verbindung vom Client aus neu aufgebaut und damit auch die aktuelle DynDNS-Adresse korrekt aufgelöst.
Hinweis: Ggf. müssen Sie mit der Ausführungszeit etwas experimentieren. In Ihrem Router können Sie das Ereignis der Zwangstrennung sehen, normalerweise findet diese immer im selben Zeitraum statt. Legen Sie die Zeit im Cron-Job so fest, dass sich diese ca. 15 Minuten nach der üblichen Zwangstrennung befindet und richten Sie die Zeit Ihres Backup-Jobs im Synology NAS ebenfalls entsprechend danach ein.
Beispiel: Zwangstrennung erfolgt nachts um xx:45, Cron-Job dann auf xx:00 und Backup-Job im NAS auf xx:15 setzen.
Statische Route einrichten
Da sich der Raspberry Pi durch die Wireguard VPN Verbindung in einem anderen Subnetz befindet als das Heimnetz, müssen wir die beiden Netze verbinden. Um die Kommunikation zwischen den Netzen zu ermöglichen, muss eine statische Route im Router bzw. der Firewall im Heimnetzwerk eingerichtet werden.
Bei einer Fritz!Box werden statische Routen über
Heimnetz > Netzwerk > Netzwerkeinstellungen > Statische Routingtabelle
eingerichtet.
Das Wireguard VPN befindet sich im Netz 10.7.0.0, als Gateway wird der Wireguard-Server im Heimnetz eingetragen.
Nach Einrichtung der statischen Route sollte ein Ping aus dem Heimnetzwerk 192.168.178.x
auf den per Wireguard angebunden Raspberry Pi, zum Beispiel 10.7.0.6
, möglich sein.
PS C:\Users\kaymo> ping 10.7.0.6
Ping wird ausgeführt für 10.7.0.6 mit 32 Bytes Daten:
Antwort von 10.7.0.6: Bytes=32 Zeit=1ms TTL=64
Antwort von 10.7.0.6: Bytes=32 Zeit=1ms TTL=64
Antwort von 10.7.0.6: Bytes=32 Zeit=1ms TTL=64
Antwort von 10.7.0.6: Bytes=32 Zeit=1ms TTL=64
Ping-Statistik für 10.7.0.6:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 1ms, Maximum = 1ms, Mittelwert = 1ms
PS C:\Users\kaymo>
Einrichtung von Synology Hyper Backup
Wir verwenden ein Synology NAS (DSM), von der wir ein Remote Backup mit dem Raspberry Pi durchführen. Das passende Backuptool Hyper Backup wird von Synology gleich mitgeliefert. Im Vergleich zu den bisherigen Konfigurationen ist die Einrichtung von Hyper Backup auf dem Synology NAS aber kinderleicht.
Starten Sie Hyper Backup und erstellen Sie über das „+“ Zeichen eine neue Datensicherungsaufgabe.
Wählen Sie „rsync“ und klicken Sie auf Weiter.
Bei der IP-Adresse tragen Sie die IP-Adresse des Raspberry Pi aus dem Wireguard VPN Netz ein. Hier kommt ein Vorteil von Wireguard zum Tragen, dass nämlich jeder Client seine eigene, feste IP-Adresse im Netz bekommt. Der Benutzername und das Passwort sind die Zugangsdaten des root Nutzers auf dem Raspberry Pi.
Klicken Sie auf Weiter und wählen Sie die zu sichernden Verzeichnisse auf dem Synology NAS aus.
Klicken Sie auf Weiter und wählen Sie aus, ob Sie zusätzlich Anwendungseinstellungen des NAS sichern möchten.
Klicken Sie auf Weiter und legen Sie die Sicherungseinstellungen entsprechend Ihren Erfordernissen fest.
Klicken Sie auf Weiter, um die Sicherungsrotation zu aktivieren. Wir empfehlen einen Rotationszyklus von 30 Tagen, damit fangen Sie alle Änderungen der letzten 30 Tage ab und können diese bei Bedarf Wiederherstellen.
Klicken Sie auf Fertig, um die Einstellungen zur Datensicherungsaufgabe abzuschließen.
Hardware-Empfehlungen
Fazit
Der hier gezeigte Synology Remote Backup Raspberry Pi Ansatz für eine Synology NAS funktioniert stabil und ist preiswert umzusetzen. Neben den im Artikel behandelten Fallstricken ist die ganze Lösung vom blanken Raspberry Pi bis hin zum laufenden System gut in 20 Minuten umzusetzen. Diese Zeit sollten Ihnen Ihre Daten wert sein.
Feedback, Anregungen und Verbesserungen sind immer gerne gesehen, also nicht zögern, einfach in die Kommentare schreiben oder über das Kontaktformular in Kontakt treten.
Update 30.11.2021: SSH Freeze
Die hier vorgestellte Remote-Backup Lösung funktioniert seit Wochen problemlos, die Backups werden zuverlässig erstellt.
Allerdings habe ich ein Problem mit SSH-Verbindungen über die VPN Verbindung zum Remote-Backup Server bemerkt (zum Beispiel für remote Updates). Man kann sich ganz normal per SSH verbinden und landet im Terminal. Ein ls -la
zum Beispiel ist meist noch problemlos möglich, weitere Befehle hängen dann aber, die SSH-Verbindung scheint eingefroren und lässt sich auch nicht abbrechen.
Das Problem ist behoben, Ursache war eine fehlerhafte Wireguard-Konfiguration.
Die Installation von Wireguard wird in einem separaten Artikel gezeigt.
Letzte Aktualisierung am 4.10.2024 / Affiliate Links / Bilder von der Amazon Product Advertising API
Pingback: Wireguard unter Proxmox installieren - kayomo GmbH
Die dargstellte Lösung könnte mein Remote Syno-NAS ersetzen.
Jedoch wünsche ich mir in Zeiten von Ransomware, das das Ziel-NAS (Raspi) selbständig und nur lesend auf mein Haupt-NAS zugreifen kann, damit falls das Haupt-NAS kompromitiert wurde, ein Virus die Backups auf dem Ziel-NAS (Raspi) löschen kann.
Gibt es dafür eine Lösung?
Dann würde ich mir die Mühe machen und alles umbauen.
Vielen Dank für Ihren Input und die hier dargestellte Lösung
Hallo Ralph,
vielen Dank für Ihre Antwort!
Das von Ihnen aufgezeigte Szenario kann bei der vorgestellten Konfiguration nur unter der Voraussetzung auftreten, dass der Angreifer die SSH-Zugangsdaten zum Remote-Pi kennt – dann hätten Sie aber ein ganz anderes Problem 😉
Es besteht zwar eine permanente Wireguard-Verbindung zwischen den beiden Geräten (bzw. in Ihrem Wireguard-Netzwerk), Ihre lokalen Geräte haben aber keinen pauschalen Zugriff auf den Remote-Pi. In dem Moment, wo Ihr Haupt-NAS ein Backup wegsichern will (push), loggt sich Ihr Haupt-NAS per rsync und SSH auf dem Remote-Pi ein, übermittelt die Daten und loggt sich anschließend wieder aus.
Viele Grüße
Kay Molkenthin
Hallo Kay,
erst einmal herzlichen Dank für die detaillierte Anleitung. Da ist es selbst für mich als Netzwerklegastheniker möglich, das Konstrukt aufzusetzen.
Eine Rückfrage hätte ich jedoch, da ich nach langem Hin und Her einfach zu keiner Lösung gekommen bin und im WWW leider auch nichts dazu finden konnte. Ich bin schon nahezu am Ende deiner Anleitung, nachdem ich genügend Zeit in die Konfiguration gesteckt habe 🙂
Und zwar heißt es am Punkt „Statische Route einrichten“ wie folgt:
„Das Wireguard VPN befindet sich im Netz 10.7.0.0, als Gateway wird der Wireguard-Server im Heimnetz eingetragen.“
1. Wireguard-VPN (pi) habe ich im eigenen Netz aufgesetzt, daher hat es noch eine interne ip (192.168.x.x). Wenn ich nun den Wireguard-VPN (pi) in ein anderes Netz trage (in meinem Fall, bei den Swchiegereltern), welche Zieladresse muss ich dann in MEINEM Netzwerk angeben, bei dem du die 10.7.0.0 hinterlegt hast?
2. Gateway = Wireguard-Server ist selbsterklärend.
Ich hoffe doch sehr auf eine Antwort, da deine Lösung meiner Meinung nach von der Security aus gesehen, am besten ist.
Viele Grüße,
Denis
Hallo Denis,
vielen Dank für das Lob!
Evtl. verstehe ich Deine Frage nicht ganz, denn zu 1. musst Du doch gar nichts ändern, da Du ja Deine statische IP-Adresse Deines Heimnetzes hinterlegst (und wenn Du keine statische IP hast, dann über zum Beispiel DynDns):
Eine IP-Adresse am anderen Standort holt der Pi sich per DHCP und Deine kennt er ja.
Viele Grüße und schöne Weihnachten!
Guten Tag,
im Update vom 30. November 2021, das den ‚SSH Freeze‘ thematisiert, wurde erläutert, dass das Problem durch eine inkorrekte Installation von WireGuard verursacht wurde. Könnten Sie bitte nähere Details dazu geben? Aktuell stehe ich vor einem ähnlichen Problem, bei dem ich mit meinem Handy problemlos auf ein externes Gateway, mein Laptop und das Synology NAS zugreifen kann, während der Zugriff vom PC aus auf Freigaben und das Webinterface nicht möglich ist. SSH-Verbindungen frieren ebenfalls ein. Die Verbindung und Nutzung vom Handy aus funktionieren hingegen einwandfrei.
Gruß
Christian
Guten Abend Christian,
siehe bitte den Artikel Wireguard unter Proxmox installieren:
Bei mir waren es die im Abschnitt „Wireguard im LXC installieren“ letzten beiden Zeilen (PostUp und PostDown), die ich aus irgendeinem Grund damals vergessen hatte 😉
Viele Grüße!
Danke für deine schnelle Antwort, die Befehle hatte ich beide bereits in der Konfiguration hinterlegt, dann muss ich wohl weiter auf die Suche gehen.
Gruß
Christian