VPN zwischen zwei Synology NAS mit Zerotier

In meinem Setup laufen zwei NAS von Synology. Jedes System macht auf das jeweilige andere ein Offsite-Backup. Damit sich die beiden Systeme untereinander erreichen können, war bisher eine Verbindung über OpenVPN aktiv. Ganz klassisch mit DynDNS und Port-Forwarding im Router.

In der letzten Zeit kam dann regelmäßig die E-Mail, dass die Offsite-Backups nicht ausgeführt wurden. Auf dem NAS, das als Client mit dem OpenVPN-Server verbunden ist, wurde keine aktive VPN-Verbindung angezeigt. Die hinterlegte Verbindung ließ sich auch nicht mehr aktivieren. Auch das Löschen und wieder Hinzufügen der OpenVPN-Konfiguration hat nicht mehr geholfen. Vielleicht hängt es mit dem DSM 7 Upgrade auf beiden Systemen zusammen.

Die Backup-Strategie war aufgrund der fehlenden VPN-Verbindung nicht mehr gegeben. Und wir alle kennen die Aussage: “Kein Backup, kein Mitleid”. Somit musste schnell eine Alternative her, damit das Offsite-Backup wieder stabil läuft und ich wieder beruhigt schlafen kann.

Man könnte nun beide NAS direkt im Internet verfügbar machen, jedoch fehlt dann eine zusätzliche Sicherheitsschicht und die Gefahr steigt, dass Angriffe aus dem Internet stattfinden. Da das NAS in meinem Setup eine zentrale Rolle spielt, soll es auch entsprechend geschützt sein und nur im lokalen Netzwerk bzw. über VPN erreichbar sein.

Um von unterwegs die beiden Netzwerke, in denen die NAS betrieben werden, zu erreichen, nutze ich Wireguard, das als Addon in Home Assistant läuft. Jedoch stellt das Home Assistant Addon immer nur einen Wireguard-Server zur Verfügung. Somit war der Weg über ein Side-to-Side VPN mit Wireguard auch keine Option. Einen einfachen Weg, um Wireguard auf einem Synology NAS zu installieren, habe ich bisher nicht gefunden. Falls man ein paar Hürden nicht scheut, kann man sich Wireguard selber kompilieren oder ein bestehendes Package laden. Weitere Informationen zu diesem Projekt findest du auf GitHub. Diesen Weg wollte ich nicht gehen, da es doch etwas mehr an Bastelarbeit benötigt.

Mesh-VPN mit Zerotier

Ein Mesh-VPN, bei dem man kein Port-Forwarding, DynDNS oder zentralen Server benötigt, wäre doch eine sehr charmante Lösung. Des Weiteren würde dieser Weg direkt noch etwas die Sicherheit erhöhen, da kein Port im Router mehr geöffnet werden muss.

Das ganze Konzept von Zerotier klang im ersten Moment fast zu gut und als ich dann auch noch eine Anleitung gefunden habe, um den VPN-Client auf einem Synology NAS zu installieren, hat die Software meine volle Aufmerksamkeit bekommen.

Kurze Erklärung wie Zerotier funktioniert: Auf dem System wird ein Client installiert, der anschließend dem zuvor angelegten Netzwerk in Zerotier zugewiesen wird. Über die Website von Zerotier bestätigt man den Client und dieser bekommt eine IP-Adresse innerhalb des Zerotier-Netzwerks zugewiesen. Die Server von Zerotier kennen somit alle Clients im Netzwerk. Jetzt kommen wir aber zu dem spannenden Teil. Möchten zwei Systeme miteinander kommunizieren, vermittelt Zerotier zwischen diesen und es wird eine direkte und verschlüsselte Verbindung aufgebaut.

In HyperBackup von Synology gibt man dann die von Zerotier zugewiesene IP-Adresse an und anschließend kann das NAS über die VPN-Verbindung auf das entfernte NAS ein Offsite-Backup erstellen.

Fühlt sich alles nach Magie an und wie bereits erwähnt muss kein DynDNS oder Port-Forwarding eingerichtet werden. Möchte man hinter die Magie schauen, erklärt Zerotier die Funktionweise und die Software ist Open Source. Des Weiteren gibt es auch ein Security-Audit zu Zerotier.

In der Weboberfäche von Zerotier gibt es einiges an Einstellungen. Unter anderem kann man auswählen wie die IP-Adressen vergeben werden sollen.

Installation von Zerotier auf dem Synology NAS

Kommen wir zu dem praktischen Teil des Artikels und zur Installation des Zerotier-Clients auf dem Synology NAS. An der Stelle der Hinweis: Für die Installation und Einrichtung solltest du etwas Linux- und Docker-Kenntnisse haben. Des Weiteren solltest du wissen wie du dich via SSH mit deinem NAS verbindest. Eine Konfiguration über die Docker-Oberfläche von Synology ist nicht möglich, da einige Docker-Funktionen benötigt werden, die über die Oberfläche nicht genutzt werden können.

Mit dem Upgrade auf DSM 7 hat sich auch die Installation von Zerotier geändert. Der Client wird über Docker installiert. Der Client, der in dem Docker-Container läuft, stellt jedoch dem Host-System ein Netzwerk-Interface zur Verfügung, über das die Kommunikation läuft. Im Wesentlichen habe ich mich an die Anleitung zur Installation unter DMS 7 gehalten.

Bevor du das Skript aus dem Abschnitt “Create a persistent TUN” erstellst, prüfe am besten, ob es in deinem Fall überhaupt notwendig ist. Bekommst du mit ls /dev/net/tun eine Ausgabe, kannst du den Schritt erstmal überspringen. Auf meinem System waren die Voraussetzungen schon gegeben und ich konnte den Abschnitt überspringen.

Die verlinkte Anleitung beschreibt das direkte Ausführen des Docker-Befehls. Dies hat jedoch den Nachteil, dass der Befehl in der Zukunft eventuell schwieriger zu rekonstruieren ist. Der bessere Weg ist über Docker-Compose. Docker-Compose liest eine Konfigurationsdatei ein und ermöglicht somit den definierten Zustand immer wieder herzustellen oder den Docker-Container auch einfach zu aktualisieren. Hast du das Docker-Package von Synology installiert, ist Docker-Compose auch auf deinem System installiert.

Die Datei kannst du z.B. in dem freigegebenen Ordner docker abspeichern. Wenn du über SSH eingeloggt bist, kann das z.B. dieser Pfad sein: /volume1/docker/zerotier/docker-compose.yml

version: '3.3'
services:
  zerotier:
    image: 'zerotier/zerotier-synology:latest'
    container_name: zt
    restart: unless-stopped
    devices:
      - /dev/net/tun
    network_mode: host
    cap_add:
      - NET_ADMIN
      - SYS_ADMIN
    volumes:
      - ./config:/var/lib/zerotier-one

Nach dem Speichern der docker-compose.yml Datei legst du im gleichen Ordner noch den Ordner config an (Beispiel: /volume1/docker/zerotier/config). Anschließend startest du den Container mit sudo docker-compose up.

Dein NAS muss jetzt nur noch dem Zerotier Netzwerk hinzugefügt werden: docker exec -it zt zerotier-cli join <NETWORK_ID>. Ist der Befehl erfolgreich ausgeführt, siehst du dein NAS in der Weboberfläche von Zerotier und du kannst es über die Spalte Auth? bestätigen. In der gleichen Zeile siehst du dann auch die IP-Adresse.

Weitere nützliche Befehle findest du in der Anleitung von Zerotier.

Um den Container und somit auch Zerotier zu aktualisieren, lädst du dir das aktuelle Image mit sudo docker-compose pull und startest abschließend den Container neu sudo docker-compose up -d. Falls du den Container stoppen willst, kannst du das mit sudo docker-compose down tun.

Fazit

Hast du ein wenig Erfahrung mit Linux und Docker, ist der Aufwand für die Einrichtung überschaubar. Anschließend hast du eine stabile VPN-Verbindung zwischen deinen Synology NAS. Natürlich ist das VPN-Mesh nicht auf zwei Geräte limitiert. Werden weitere Geräte hinzugefügt, vermittelt Zerotier und es wird zu jedem Gerät, wenn möglich, eine direkte Verbindung aufgebaut. Zerotier kann natürlich auch auf deinem Rechner installiert werden und du kannst dann direkt auf die Geräte in dem Netzwerk zugreifen.

Zerotier hat für mich das Problem gelöst eine sichere Verbindung zwischen zwei örtlich getrennten Synology NAS aufzubauen. Das Setup läuft bei mir jetzt schon einige Wochen stabil und das Offsite-Backup kann wieder stabil durchgeführt werden.

Im kostenlosen Plan von Zeroteier kannst du bis zu 50 Geräte hinzufügen.

Photo by Jordan Harrison on Unsplash