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

Wireguard: Peer-IP-Check

Wer Wireguard mit Peers benutzt, deren IP-Adresse sich ändert (z.B. weil sie an einem privaten DSL-Anschluss sind), muss regelmäßig die IP-Adresse überprüfen.

Wireguard selbst macht nur beim Starten der Schnittstelle eine DNS-Auflösung um die aktuelle IP-Adresse des Peers zu bekommen. Wenn sich aber z.B. die Adresse des Servers ändert, schlägt die Verbindung irgendwann fehl.

Zum Glück lässt sich dies mit einem kleinen Script, welches z.B. alle 10 Minuten ausgeführt wird, abfangen. Ein Ansatz ist das Script in der Ubuntu-Dokumentation zu Wireguard, welches aber auf meinem Debian-Client nicht ohne weiteres funktionierte (und mir auch etwas kompliziert vorkam).

#!/bin/bash
# Status von der Schnittstelle überprüfen
# wg0-client: Name der Schnittstelle, die geprüft werden soll
# meinpeer.dyndns.net: der Name des Peers, dessen IP geprüft werden soll
        
cip=$(wg show wg0-client endpoints | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}") 	
echo "$cip"
digIP=$(dig +short meinpeer.dyndns.net) # Die Adresse des Peers muss angepasst werden
   echo "$digIP"
     if [ "$digIP" != "$cip" ]
       then
          echo "Daten sind anders"
          /usr/sbin/service wg-quick@wg0-client restart
            
        else 
	  echo "Daten sind gleich"
	  #nichts zu tun
	 fi

Die wesentlichen Elemente des Scripts oben: in Zeile 6 wird mittels der wireguard-tools und grep die aktuelle IP-Adresse, die die Schnittstelle verwendet ermittelt. In Zeile 8 wird geprüft, welche IP-Adresse der Peer aktuell hat. Weichen diese beiden Werte voneinander ab, wird die Wireguard-Schnittstelle in Zeile 13 neu gestartet – dann erfolgt auch die Auflösung der IP-Adresse erneut und die Verbindung steht wieder.

Der Restart der Wireguard-Schnittstelle in Zeile 13 muss ggf. angepasst werden, abhängig davon wie die Schnittstelle in eurem Setup tatsächlich heißt.

Es gibt natürlich noch andere Ansätze, die IP-Auflösung durchzuführen, aber für mein Setup ist dies ein sehr einfacher Weg. Ein Nachteil: sollten mehrere Peers vorhanden sein, klappt dieser Ansatz nicht so einfach – dann müsste man erst einmal den richtigen Peer per Regex ermitteln, um dann dort die entsprechenden Daten auszulesen.

Nötig ist dieses Script für das Aufrechterhalten der Verbindung in meinem FreeNAS-Replications-Setup, welches jetzt mit Wireguard funktioniert.

Netflix erschwert Zugriff via VPN

Netflix war bisher eine beliebte Wahl, wenn man US-Serien möglichst früh nach erscheinen legal sehen wollte – mittels Proxy oder VPN konnte man dem Dienst vorgaukeln, dass man ein US-Nutzer sei.

Netflix: Videostreaming wie es gedacht ist
Netflix: VPN-Zugriff erschwert
Auf Druck der Filmindustrie will Netflix in Zukunft verstärkt den Zugriff über VPN-Anbieter ausschließen. Zuerst scheinen die neuen Sperren in Australien umgesetzt zu werden – zumindest gibt es einen entsprechenden Bericht des Sydney Morning Heralds, der auf einen VPN-Anbieter Bezug nimmt.

Raspberry Pi als VPN-Gateway

Nach Verwendung als Proxy und TV-Client hier nun eine weitere Verwendungsmöglichkeit für einen Raspberry Pi: als VPN-Gateway, im konkreten Fall um mehrere Geräte eine VPN-Verbindung bereitzustellen. Praktisch, wenn nicht jedes Gerät direkt VPN unterstützt.

Update vom 14.05.2015: Ich habe das Setup zum VPN-Gateway für die Verwendung des Raspberry Pi 2 noch einmal aktualisiert. Die Geschwindigkeit hängt natürlich immer noch vom verwendeten VPN-Anbieter bzw. vielen weiteren Faktoren ab.

Platine des Raspberry Pi 2: Dank Quadcore und 1 GB RAM mehr Leistung
Platine des Raspberry Pi 2: Dank Quadcore und 1 GB RAM mehr Leistung
Es gibt zwar bereits ein fertiges Image, welches einen Raspberry Pi als OpenVPN-Gateway bereitstellt, die komplette Einrichtung hat sich am Ende allerdings nicht als so kompliziert herausgestellt, dass ich es nicht auf dem bereits bestehenden Raspberry Pi zusätzlich einrichten könnte.