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

FreeNAS: SMB/CIFS Auflistung beschleunigen

Wer mit FreeNAS eine Windows-Freigabe eingerichtet hat, kann die Zeit, die das Auflisten der Dateien in einem Ordner benötigt, deutlich verkürzen. Dafür müssen einige Parameter an Samba übergeben werden.

Dies lässt sich einfach über die Oberfläche realisieren, indem „Auxiliary Parameter“ für den SMB-Service hinterlegt werden.

ea support = no
store dos attributes = no
map archive = no
map hidden = no
use sendfile= no
aio read size = 1
aio write size = 1
map readonly = no
map system = no

Das Auflisten von Verzeichnissen und Dateien ist nach den Änderungen sehr viel schneller – bisher habe ich es auf die Verbindung mittels WLAN zwischen Client und Server geschoben. Diese funktioniert jedoch reibungslos mit ca. 55 Megabyte pro Sekunde netto Datenrate.

FreeNAS 11.2: neues Webinterface & neue Funktionen

Nachdem FreeNAS 10 „Corral“ ein erster – schnell scheiternder – Versuch war, eine neue Benutzeroberfläche einzuführen, gibt es jetzt mit FreeNAS 11.2 ein neues, AngularJS basiertes UI. Dieses ist auch mobil optimiert.

FreeNAS 11.2 Dashboard auf einem HP Microserver Gen8

Abgesehen vom Webinterface, gibt es für FreeNAS 11.2 eine Reihe von Neuerungen, die die bisherige Entwicklung logisch fortführen und erweitern. Die wichtigsten Änderungen:

  • FreeBSD boot-loader anstatt von GRUB
  • Plugins und Jails werden statt von „warden“ von „iocage“ verwaltet, das bisherige System „warden“ wird nicht mehr gepflegt. 
  • Man kann mit verschiedenen Cloud-Diensten synchronisieren, darunter Amazon Cloud Drive, Box, Dropbox, FTP, Google Drive, HTTP, Hubic, Mega, Microsoft OneDrive, pCloud, SFTP, WebDAV, und Yandex. Verschlüsselt werden auch die Daten inklusive Dateinamen vor der Übertragung lokal, sodass kein Risiko für die Daten in der Cloud besteht.
  • Self-Encrypting Drives (SEDs) werden unterstützt, die entsprechenden Daten werden über die Oberfläche gepflegt.
  • ZFS ist auf dem aktuellen Stand – einmal durchgeführt, führt ein Upgrade eines Pools dazu, dass nur aktuelle FreeNAS bzw. FreeBSD-Versionen damit arbeiten können, ein Downgrade ist dann nicht mehr möglich

Das Update ist für bestehende Installation einfach über die Oberfläche möglich, in dem man den Update-„Train“ auf 11.2-stable stellt und nach Updates sucht. Für Neuinstallationen kann man die aktuelle Version auf der FreeNAS-Webseite herunterladen.

Freenas 11.1: integrierten OpenVPN-Client nutzen

Seit einiger Zeit benutze ich zwei FreeNAS-Boxen an zwei Standorten, um meine Daten mittels ZFS-Snapshots und Replication zu sichern. Diese Verbindung soll zusätzlich mittels OpenVPN abgesichert werden.

Die Idee: an beiden Standorten jeweils ein Raspberry Pi, die miteinander über OpenVPN verbunden sind, dazu entsprechenden statische Routen, damit sich die beiden FreeNAS-Boxen erreichen können. Grundlage dafür ist der Ansatz, ein OpenVPN-Gateway aufzubauen. 

Aber: es geht auch einfacher. FreeNAS 11.1 verfügt über OpenVPN 2.4.3 und kann damit selbst Verbindungen zu OpenVPN-Servern aufbauen. Der Vorteil:  man benötigt kein komplexes Gateway-Setup, welches mit einem zweiten Raspberry Pi eine weitere Fehlerquelle mit sich bringt.

Die Einrichtung ist einfach: sobald man einen funktionierenden VPN-Server hat, kann man mittels der gängigen Befehle eine Verbindung aufbauen:

/usr/sbin/local/openvpn --config config.ovpn --daemon

Danach erreicht man den Server „am anderen Ende“ unter seiner gewohnten IP-Adresse, z.B. 192.168.178.45. Damit kann man die Replication-Tasks in FreeNAS konfigurieren, als wäre das Ziel im eigenen Netzwerk. Weiterer Vorteil: man benötigt beim Ziel nur einen offenen Port für das VPN und keinen weiteren für SSH. 

OpenVPN auf FreeNAS 11.1

Die Einrichtung des VPN-Servers auf dem Raspberry-Pi kann einfach mittels PiVPN erfolgen. Ich verwende die Raspi im Zielnetzwerk auch dafür, um den FreeNAS-Server zeitgesteuert einzuschalten – das spart Strom in der Zeit, in der eh keine Änderungen an Dateien vorgenommen werden. 

FreeNAS 11.1 erschienen

Das auf FreeBSD basierende NAS-System FreeNAS ist in der neuen Version 11.1 erschienen, die etliche Neuerungen mit sich bringt.

Die Änderungen im Changelog betreffen OpenZFS, welches vor allem beim verarbeiten von Snapshots und großen Dateien schneller geworden sein soll. Außerdem wurde der Hardware-Support verbessert sowie Funktionen zum Cloud-Sync mit Amazon S3, Microsoft Azure Blob Storage, Backblaze B2 und Google Cloud Storage hinzugefügt. Dateien können ohne weiteres mit den genannten Diensten abgeglichen werden, was für Offsite-Backups sinnvoll ist. Viele Änderungen betreffen auch die Möglichkeiten für virtuelle Maschinen, angefangen bei Support für Nicht-US-Tastatur-Layouts bis hin zu RancherOS Docker-Instanzen.

Nach dem Corral-Experiment scheint FreeNAS noch einmal die Kurve gekriegt zu haben und ist wie gewohnt leicht zu installieren gewesen. Natürlich sollte beim bei OS-Updates auf einem NAS immer ein Backup zur Verfügung haben, in meinem Fall habe ich das zweite FreeNAS, welches die Daten spiegelt, noch nicht aktualisiert. FreeNAS 11.1 gibt es auf der Projekt-Seite zum Download, es werden 8 Gigabyte RAM empfohlen und ein 64-Bit-Prozessor ist pflicht.


FreeNAS: Pi-Hole & PiVPN in Ubuntu-VM

Wer FreeNAS 11 als NAS- bzw. Homeserver-Software verwendet, kann pi-hole sowie pi-vpn verwenden und sowohl auf das eigene Netzwerk zugreifen als auch Werbung zuverlässig blockieren.

PiVPN (http://www.pivpn.io/) ist ein Installations- und Verwaltungsscript für OpenVPN. Eigentlich gedacht für die Verwendung auf einem Raspberry Pi, funktioniert die Installation auch ohne Probleme auf einem Ubuntu 17.04, welches in einer bhyve-VM läuft. Der Ablauf ist der selbe wie beim „Bastelrechner“:

curl -L https://install.pivpn.io | bash

Das Installationsscript beschwert sich zwar, dass die verwendete Linux-Version gegebenenfalls nicht kompatibel ist und verweigert das automatische konfigurieren von einigen Dingen, am Ende läuft aber alles soweit problemlos durch. Wichtig: damit das deutleiten der VPN-Verbindung klappt, muss unter Ubuntu die Firewall „ufw“ (uncomplicated firewall – ein Commandozeilen-Tool für das einfache Einstellen von iptables-Regeln) installiert sein und der entsprechende Port freigegeben sein.

FreeNAS: 9p Volume/Dataset in VM mounten

Wer FreeNAS mit virtuellen Maschinen nutzt (ich habe z.B. die Entwicklungsumgebung für das Blog-Theme in einer Ubuntu-VM) wird früher oder später Daten des NAS nutzen wollen. FreeNAS bietet hier VT9P als Möglichkeit an.

Das Plan9-Filesystem benötigt ein paar mount-Optionen, die nicht dem Standard entsprechen. Zwar lässt es sich in der Console ohne weiteres mounten, sobald man es in die fstab einträgt, verlangt es einen etwas ausführlicheren Eintrag. Bei meinem Setup funktioniert:

data /mnt/data 9p rw,sync,dirsync,relatime,trans=virtio,version=9p2000.L 0 0

Damit wird das Volume „data“, welches in FreeNAS konfiguriert ist, am Mount „/mnt/data“ beim booten bereitgestellt.

FreeNAS: .AppleDouble / .DS_Store löschen

Wenn man eine FreeNAS-Freigabe mit macOS benutzt, legt dieses verschiedene Finder-Metadaten-Verzeichnisse für jedes reguläre Verzeichnis an. Um ein Backup auf ein externes Medium möglichst schlank zu halten, können diese Daten gelöscht werden, was am leichtesten mittels eines Kommandos auf der Linux-Eingabeaufforderung geht:

find . -name ".Apple*" -type d -prune -exec rm -r {} +

Damit werden alle Verzeichnisse gelöscht, die mit „.Apple“ beginnen. Bei „.DS_Store“ handelt es sich um Dateien, sodass wir den obigen Befehl etwas abwandeln müssen:

find . -name ".DS_Store" -type f -prune -exec rm -r {} +

Auf gar keinen Fall mit Daten vor dem Backup ausprobieren.

Mein Setup ist so aufgebaut, dass die Daten erst mittel rsync auf ein Synology-NAS kopiert werden und von dort aus auf ein Amazon Drive. Auf dem Synology wird dann auch diese Bereinigung durchgeführt, um möglichst wenig Dateien übertragen zu müssen.

FreeNAS 10: „Corral“ erschienen

Nach mehrjähriger Entwicklung ist nun die Version 10 von FreeNAS erschienen, Name: „Corral“.

iXsystems hat mit FreeNAS 10 „Corral“ eine neue Version des beliebten Betriebssystem für Selbstbau-NAS-Systeme veröffentlicht. Die Oberfläche wurde komplett überarbeitet und kommt jetzt deutlich moderner daher, der Unterbau ist ebenfalls modernisiert worden.

Linux Mint als virtuelle Maschine in FreeNAS Corral
Linux Mint als virtuelle Maschine in FreeNAS Corral
Statt wie bisher auf Erweiterungen durch Plugins zu setzen, gibt es nun Support für virtuelle Maschinen (worüber auch Windows als Gast ausgeführt werden kann) und Docker-Container, womit die Auswahl an Software-Erweiterungen deutlich vergrößert wurde. Damit sind auch die Systemanforderungen etwas gestiegen, wobei gegenüber FreeNAS 9.10.x der Sprung nicht so groß ist. Wer z.B. auf einen HP Microserver Gen8 setzt, sollte zumindest mit dem Maximalausbau von 16 GB RAM und einer schnelleren CPU (der CPU-Tausch ist sehr einfach) arbeiten.

HP Microserver Gen8: CPU-Tausch

Wer einen HP Microserver Gen8 kauft, setzt meist auf das Einstiegsmodell mit Celeron G1610T-Prozessor. Da die CPU gesockelt ist, kann sie einfach ausgetauscht werden.

HP Microserver Gen8: Celeron G1610T
Der Celeron G1610T ist eine Dualcore-CPU mit 2,3 GHz Takt und einer TDP von 35 Watt – daher lässt sie sich ohne Problem passiv kühlen. Wichtig ist es, eine passende CPU zum Tausch zu finden.

Nach etwas Recherche, unter anderem im sehr guten Sammelthread des Hardwareluxx-Forum fiel meine Wahl auf einen Core i5 3470T: 2 Kerne, 2,9 GHz Basistakt und Hyperthreading-Support (4 Threads). Die TDP liegt ebenfalls bei 35 Watt, sodass das selbe Kühlsystem zum Einsatz kommen kann.