mSDsBvPIs (Teil 7 – offsite Backup)

Da während der diversen Reisen und auch so im täglichen Leben eine Menge digitale Bilder entstehen, füllten sich hier bei mir nicht mehr klassische Schuhkartons (obwohl davon auch noch einige herumstehen…) sondern diverse Festplatten. Da dies nicht mehr „zeitgemäß“ ist, habe ich mir vor einigen Jahren ein NAS zugelegt und speichere die Bilder nun dort.

Was aber tun, wenn es auf einmal doch zu Hause brennt und die Erinnerungen damit unwiederbringlich verloren sind? Meine Lösung hierzu war bisher, regelmäßig eine Festplatte zu synchronisieren und an einem anderen Ort zu platzieren. Da das ganze aber auf Dauer meiner fehlenden Disziplin zum Opfer gefallen ist, passiert das in mit fortschreiten der Zeit immer seltener. Also kam mir die Idee, einfach einen kleinen PI an einem anderen Ort (mit Netzzugang) zu platzieren, dort eine Festplatte abzuschließen und die entsprechenden Order meines NAS‘ automatisiert dorthin zu synchronisieren. Wie ich das ganze schrittweise realisiert habe, möchte ich hier beschreiben.

VPN

Zu aller erst, muss der kleine PI mal lernen „nach Hause zu telefonieren“. Da das Netzwerk in dem der PI steht nicht geöffnet werden soll, wählt sich der PI dazu einfach zu Hause per VPN ein. Dieser relativ einfache Teil ist schnell erledigt und passiert dabei im Wesentlichen auf einer Vorlage (Man muss ja das Rad nicht neu erfinden :-)). Allerdings habe ich das angeführte Script zur VPN Überwachung ein wenig angepasst:

#!/bin/bash
# hier wird die Logfile-Datei definiert
LOGFILE=/mnt/data/log_vpnc/fritzbox.log

# hier wird die IP-Adresse eines lokalen Hosts definiert. wenn die VPN Verbindung steht, dann sollte ping funktionieren.
myHost="192.168.178.1"
myHostName="fritz.box"

# Wert -> wie oft soll gepingt werden
wert=4

# Ausgabe Wert f?r "count" soll bei erfolgreichen ping 4 sein, bei erfolglosen ping 0.
count=$(ping -c $wert $myHost | grep "received" | awk '{print $4}')
if [ $count == 4 ]
then
        # die kommenden echos sind die Info-Ausgaben in Logfile
        echo "$(date +%Y-%m-%d:%T) :$myHostName mit der IP $myHost  ist erreichbar und VPN Verbindung steht" | tee -a $LOGFILE
else
        echo "" | tee -a $LOGFILE
        echo "$(date +%Y-%m-%d:%T) :$myHostName mit der IP $myHost ist nicht erreichbar" |tee -a $LOGFILE
        pushover "$myHostName mit der IP $myHost ist nicht erreichbar"
        echo "$(date +%Y-%m-%d:%T) :VPN-Verbindung trennen" |tee -a $LOGFILE

        #hier wird das VPNC-Demon gestoppt, damit es nicht meherer im Hintergrund laufen
        vpnc-disconnect

        # oft ist die Wlan Verbindungen gebrochen. hier werden alle Netzwerkverbindungen neugestartet.
        echo "$(date +%Y-%m-%d:%T) :Netzwerkverbindungen neu starten" | tee -a $LOGFILE
        /etc/init.d/networking restart

        # 10 Sekunden warten
        sleep 10

        # auslesen von der eigenen IP-Adresse
        ipself=$(ifconfig eth0 | grep "inet addr" | cut -b 21-35)
        echo "$(date +%Y-%m-%d:%T) :Netzwerkverbindungen wurde neugestart. IP-Adresse: $ipself " | tee -a $LOGFILE
        echo "$(date +%Y-%m-%d:%T) :VPN Verbindung neu aufbauen, der Skript vpnc_fritzbox starten" | tee -a $LOGFILE

        # starten von VPNC-Demon. PID und VPN-IP Adresse auslesen
        vpnc fritzbox.conf
        pid=$(pidof vpnc)
        ipvpn=$(ifconfig tun0 | grep "inet addr" | cut -b 21-35)
        echo "$(date +%Y-%m-%d:%T) :Die VPN-Verbindung wurde erfolgreich aufgebaut. die VPN IP-Adresse ist: $ipvpn. VPNC-Demon ist aktiv unter id: $(pidof vpnc)" | tee -a $LOGFILE
        echo "" | tee -a $LOGFILE
        pushover "Die VPN-Verbindung wurde erfolgreich aufgebaut. die VPN IP-Adresse ist: $ipvpn."
fi

Dabei wollte ich im Wesentlichen den „myHost“ Teil optional flexibler gestalten (auch den Namen) und zum anderen eine Benachrichtigung per Pushover haben. Alle meine PIs melden sich bei besonderen Ereignissen per Pushover bei mir und da sollte der remote arbeitende PI mir erst Recht mitteilen, wenn der VPN Tunnel aufgebaut ist.

 

Festplattenverschlüsselung

Da der PI und die daran hängende Festplatte auch am Remote Ort bei einem möglichen Einbruch geklaut werden könnten, wollte ich die Daten nicht „plain“ dort speichern sondern verschlüsselt ablegen. Da der Speicherort primär eh „nur“ für das Desaster recovery ist, kommt es hierbei auch nicht auf große Performance an aber dann wäre ja ein kleiner PI mit „nur“ 100 Mbit über zwei asynchrone Internetzugänge eh fehl am Platz.

Hier gibt es auch bereits eine Lösung, derer ich mich einfach mal bedient habe.  

Ein einfaches apt-get install cryptsetup und ein wenig Konfiguration und die Platte ist fertig. Einziger Wermutstropfen: nach einem Reboot des PIs muss ich mich auf ihm einloggen und die Passphrase eingeben. 

RSYNCd

Final blieb noch der RSYNCHd zu installieren (apt-get install rsync) und zu konfigurieren. Das erfolgt eigentlich recht simpel und standardisiert. Einzig die Shares, die per RSYNCHd verfügbar sein sollen müssen definiert werden. Dazu editiert man /etc/rsyncd.conf wie folgt:

uid = root
gid = root
read only = false
use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
hosts allow = EIGENES_NETZWERK_ANGEBEN/24

[main]
path = /mnt/rsync
comment = Rsync main directory
auth users = EIGENER_USER_NAME
secrets file = /etc/rsyncd.secrets

In der /etc/rsyncd.secrets hinterlegt man dann noch das Passwort für den o.g. User und schon kann es, nachdem der entsprechende Job auf dem NAS eingerichtet wurde, mit dem remote rsync-en losgehen :-).

Das könnte dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert