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 :-).