FreeNAS: ZFS-Replication über Wireguard

Bisher habe ich für den Abgleich meiner zwei FreeNAS-Boxen OpenVPN verwendet. Wireguard ist eine schnelle Alternative, dafür aber etwas komplizierter vom Setup.

Die ZFS-Replication ist ein praktisches Hilfsmittel, um Daten zwischen zwei FreeNAS-Installation synchron zu halten. Sinn des Ganzen ist die Schaffung eines Offsite-Backups, bei dem die Daten auch einen Wohnungsbrand oder Einbruch überstehen würde, ohne auf externe Cloud-Services zurückzugreifen (was zum einen aus Datenschutz-Aspekten schwierig ist und zum anderen auch ein Kostenfaktor wird, sobald es sich um mehrere Terabyte an Daten handelt).

Anders als OpenVPN ist Wireguard noch nicht Bestandteil von FreeNAS. Man muss es also anderweitig installieren. Um das FreeBSD möglichst unangetastet zu lassen, habe ich mich für eine Debian VM entschieden. Der Grundlegende Datenfluss sieht dann folgendermaßen aus.

  1. Ein ZFS-Snapshot wird erstellt
  2. Die Daten werden über eine statische Route an die Wireguard-Verbindung geleitet
  3. Das 2. FreeNAS-System im Zielnetzwerk verarbeitet die Daten

Dank der statischen Route sieht es für das sendende FreeNAS aus, als würde sich das empfangende im selben Netzwerk befinden. Wireguard liefert anders als OpenVPN eine deutlich bessere Auslastung der Schnittstelle (in meinem Fall VDSL mit 250/40 Mbit/s für FreeNAS-Box 1 und VDSL 50/10 Mbit/s für FreeNAS-Box 2. In Senderichtung liegt das Limit also bei 40 Mbit/s – für den Fall, dass ich das Backup benötige und wieder einspielen muss wäre vermutlich ein Datenträger-Versand schneller. Insgesamt sieht der Aufbau aus wie in dieser Darstellung:

Wireguard als Verbindung zwischen zwei Netzwerken

Wie man sieht, habe ich im Ziel-Netzwerk keine virtuelle Maschine auf der FreeNAS-Box verwendet. Es handelt sich hier um einen mittlerweile recht betagten HP Proliant N36L, der über 8 GB RAM verfügt. Stattdessen nimmt ein Odroid C2 Einplatinen-Computer die Daten in Empfang (der nebenher auch noch das FreeNAS zeitgesteuert starten kann).

Die grundlegende Wireguard-Konfiguration will ich hier nicht ausführen, das erledigt die offizielle Seite besser. Ebenfalls hilfreich: die Debian-Dokumentation zu Wireguard.

Wenn die Wireguard-Verbindung steht, fehlt es noch an der passenden Route. In der virtuellen Debian-Maschine wird folgendes eingetragen in der Datei „/etc/rc.local“ (ggf. an die jeweiligen Gegebenheiten anpassen):

iptables -t nat -A POSTROUTING -o wg0-client -s 192.168.0.0/24 -j MASQUERADE

exit 0

Sollte die rc.local-Datei fehlen oder nicht ausgeführt werden, müssen die Schritte die in diesem Beitrag auf ITechLounge.net beschrieben sind ausgeführt werden.

Ist die Einstellung auf der Debian-VM erledigt, muss nur noch eine Route in FreeNAS hinterlegt werden:

Statische Route in FreeNAS

Jetzt sollte ein Ping von FreeNAS-Box 1 zu FreeNAS-Box 2 funktionieren, sodass die Replikation ohne weiteres direkt mit der IP-Adresse der Ziel-Box konfiguriert werden kann.

Bei einem Setup wie diesem, bei dem beide FreeNAS-Boxen an privaten DSL-Anschlüssen hängen deren IP-Adressen sich spätestens alle 24 Stunden ändern, fällt früher oder später ein Nachteil von Wireguard auf: die Auflösung der Hostnamen der Peers zu ihren IP-Adressen findet nur einmalig beim Start der Wireguard-Schnittstelle statt. Dadurch schlägt die Verbindung irgendwann fehl, wenn sich die IP-Adresse geändert hat.

Die Lösung: ein kleines Script, welches ich in einem anderen Beitrag vorgestellt habe: Wireguard: Peer-IP-Check. Dieses wird in diesem Setup auf der virtuellen Debian-Maschine ausgeführt.

Ich hoffe, dieser Beitrag inspiriert den ein oder anderen Leser, sich mit der Verbindung von zwei FreeNAS-Boxen zwecks Replikation auseinander zu setzen. Sicherlich gibt es noch andere Möglichkeiten, zwei Netzwerke miteinander zu verbinden, ist ein VPN-Server bei der Backup-Location vorhanden kann man sich aber auch direkt ohne einen Abgleich der kompletten Daten bei den gespiegelten Daten „bedienen“.