Ein Blog über Code, Hardware und Co

Storj, Server und Betriebssysteme

Den Speicherplatz auf dem NAS vermieten

Einen Storagenode auf einem Synology-NAS installieren und mit freiem Speicher Geld verdienen.

Der Gedanke liegt Nahe: Auf dieser Welt wird viel Geld für Onlinespeicher, sog. Cloudspeicher ausgegeben. Riesige Rechenzentren werden einzig und allein betrieben, um immense Speichermengen bereitzuhalten.
Auf der anderen Seite werden

Ein Storj-Node auf einem Synology-NAS

In diesem Tutorial zeige ich Dir, wie Du auf Deinem Synology NAS einen sog. Storagenode des Storj-Projekts installieren kannst.

Voraussetzungen und Grundanforderungen

Storj gibt ein paar Anforderungen vor, die zwingend zum Betrieb eines Storagenodes auf einem Synology NAS erfüllt sein müssen:

  • Aktivierter SSH-Zugang auf dem NAS
  • Dockerfähiges Synology NAS (afaik alle NAS mit Intel Prozessor) und installiertes Docker-Paket.
  • Ein Ethereum-Wallet (mit Unterstützung für ERC20 Token).

Wieso benötige ich ein Ethereum Wallet?

Ethereum ist eine sog. Kryptowährung, die auf einer Blockchain basiert. Neben Ethereum können Smart-Contracts sowie ERC20 Token als Payload gespeichert werden.
Storj errechnet die Vergütung in US-Dollar, zahlt diese Vergütung aber in einer eigenen Kryptowährung, den sog. „Storj-Token“ (ein ERC20 Token) aus. Auf dem Wallet müssen sich für Storj-Auszwhalugnekeine Ethereum-Coins befinden.

Schritt 1: Der Authorization Token

Um einen Node zu erstellen und diesen im Netzwerk anzumelden, musst Du Dir einen Authorization Token zuschicken lassen. Das geht über direkt über folgende URL: https://storj.io/sign-up-node-operator/

Hier müssen nun kurz die oben bereits genannten Anforderungen angehakt werden und eine gültige E-Mail-Adresse angegeben werden. Im Anschluss erhält man (sofern aktuell neue Nodes zugelassen werden, sonst landet man auf einer Warteliste) per E-Mail einen Authorization Token.

Abbildung 1: Die Anforderungen, die Dein System zum Aufsetzen eines Storagenodes erfüllen muss. Um auf einer Synology Diskstation einen problemlosen Betrieb zu ermöglichen ist zusätzlich das Paket „Docker“ notwendig.

Wieso braucht man einen Authorization Token?
Das Storj-Projekt gibt es schon länger (die aktuelle Version ist die v3) und das Team hat aus den Erfahrungen des Vorgängers (v2) gelernt. So kann Storj über die Vergabe der Authorization-Tokens steuern, wie viele (neue) Nodes es im Netzwerk gibt und damit in etwa, wie viel Speicher im Angebot ist. Es kann so ein stabiles Netzwerk aufgebaut werden, wo Angebot und Nachfrage zumindest nicht diametral auseinander gehen.

Schritt 2: Identität erstellen

Um als Storagenode im Netzwerk dabei zu sein, muss eine individuelle Identität erstellt werden. Diese wird mit Hilfe des Authorization Token errechnet.

Zunächst muss nun das Identity-Binary heruntergeladen werden:

curl -L https://github.com/storj/storj/releases/latest/download/identity_linux_amd64.zip -o identity_linux_amd64.zip

Tipp: Ich erstelle immer direkt ein Verzeichnis für jeden Storagenode, hier lade ich auch das Identity-Binary herein.

Danach muss das heruntergeladene zip-File entpackt werden. Die Doku von Storj greift hier auf „unzip“ auf der Konsole zurück. Das funktioniert auf dem NAS mit DSM 6.x nicht. Wir können das zip-Archiv aber einfach über die DSM-Oberfläche entpacken.

Abbildung 2: Entpacken des Identity-Zip-Files auf einer Synology Diskstation.

Jetzt müssen wir das entpackte Binary noch ausführbar machen. Dafür geben wir dem File über die Konsole mittels „chmod“ das entsprechende Flag:

chmod +x identity

Anschließen verschieben wir das Binary in das bin-Verzeichnis des Systems, damit es simple über die Konsole aufgerufen werden kann und dem NAS bekannt ist:

sudo mv identity /usr/local/bin/identity

Erstellen der Identität

Dieser letzte Schritt ist der entscheidende – und er ist sehr rechenlastig und benötigt daher je nach Leistung des NAS eine gewisse Weile (teilweise sehr viele Stunden!). Ich lasse den Prozess immer über Nacht laufen.

identity create my_storagenode_name
Abbildung 3: Als kleine Anekdote, hier die Auslastung des Synology NAS in der Zeit, wo die Identity erstellt wird. Man sieht, dass der Prozess sehr CPU-lastig ist.

Wenn der Prozess abgeschlossen ist, sieht das so aus:

Abbildung 4: Die Identität ist erstellt.

Schritt 3: Identität authorisieren/anmelden

Mit diesem Schritt wird Dein Node im Storj-Netzwerk angemeldet.
Achtung: Ab hier läuft der Zähler für die Downtime des Nodes.

identity authorize my_storagenode_name <email:characterstring>

Tipp: Es ist durchaus sinnvoll, die generierte Identität an einem Ort der eigenen Wahl zu sichern. So ist es möglich, im falle eines Falles einen Node später mal umzuziehen.
Ich habe mir dazu auf einem anderen Raid-Volumen der Synology ein Verzeichnis erstellt, wo ich gesammelt die Identitäten meiner Storagenodes speichere.

Schritt 4: Datenverzeichnis erstellen

Während ich die Konfiguration meiner Storagenodes zentral auf einem Volumen in einem Verzeichnis mit einem Unterverzeichnis für jeden Node verwalte (bei mir nach dem Schema docker/storj/node1 usw.) muss das Datenverzeichnis für den Node logischerweise immer auf der Festplatte bzw. auf dem Volume liegen, wo letztlich auch die Daten gespeichert werden sollen.

Dafür erstellt man über das DSM, also die Weboberfläche des Synology NAS, zunächst ein neues Volume auf der für den Node vorgesehenen Festplatte und erstellt dort dann einen gemeinsamen Ordner und darin dann ein Datenverzeichnis. Ich nenne benenne das gemeinsame Verzeichnis schlicht immer „StoragenodeX“ (X steht für die Nummer des Nodes ; 1,2,3 usw.). Das Datenverzeichnis selbst nenne ich immer „data“.

Schritt 5: Portfreigabe

Damit Daten aus dem Netzwerk auf dem Node gespeichert werden können und Daten abgerufen werden können, muss der Node aus dem Internet erreichbar sein. Dafür müssen wir auf deinem Router einen Port freigeben und an das NAS weiterleiten.
Es handelt sich dabei in der Standardkonfiguration um Port 28967 über das TCP-Protokoll.

Abbildung 5: Portfreigabe für einen Storagenode am Beispiel einer Fritzbox.

Schritt 6: Aktuelles Docker-Image für Storagenode laden

Um einen Docker-Container mit einem Storj-Storagenode auf einem Synology-NAS laufen zu lassen brauchen wir natürlich noch das Docker-Image für den entsprechenden Node. Dieses können wir uns über die DSM-Oberfläche vom Docker-Hub laden, oder altenativ aus Bequemlichkeit die Konsole nutzen:

docker pull storjlabs/storagenode:latest

Achtung: Seit kurzem ist das Storj-Netzwerk im Produktivbetrieb, es ist daher notwendig den „latest“ Tag beim Docker-Image zu verwenden.

Schritt 7: Storagenode starten!

Das Starten des Nodes ist über einen Befehl auf der Konsole möglich:

docker run -d --restart unless-stopped --stop-timeout 300 \
    -p 28967:28967 \
    -p 127.0.0.1:14002:14002 \
    -e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
    -e EMAIL="user@example.com" \
    -e ADDRESS="domain.ddns.net:28967" \
    -e STORAGE="2TB" \
    --mount type=bind,source="<identity-dir>",destination=/app/identity \
    --mount type=bind,source="<storage-dir>",destination=/app/config \
    --name storagenode storjlabs/storagenode:latest

Die folgenden Parameter müssen entsprechend Deiner Konfiguration angepasst werden:

Parameter Bedeutung
-pDie Ports, über die der Storagenode kommuniziert. Der erste Port gibt den Port außerhalb des Containers an, also den Port, der freigegeben werden muss. Der zweite Port ist dabei der interne Port im Container, auf den gemapped wird.
-pDer zweite -p Parameter gibt an unter welcher IP und welchem Port das Storga-Node-Dashboard aufrufbar ist. Diesen Port würde ich nicht nach außen freigeben.
-e Hier muss die Adresse Deiner Ethereum-Wallet angegeben werden.
-eDer zweite -e Parameter (EMAIL) enthält Deine E-Mail-Adresse unter der Du z.B. erreichbar bist, wenn es Probleme mit Deinem Node gibt.
-eDer dritte -e Parameter (ADDRESS) muss die öffentlich erreichbare Adresse Deines Noodes enthalten. Das kann eine (feste!) IP, eine Domain oder eine dyndns-Adresse sein.
-eDer vierte -e Parameter (STORAGE) enthält die Angabe, wie viel Speicher auf Deinem Node zur Verfügung stehen.
Achtung: Diese Angabe muss wahrheitsgemäß sein, gibst Du mehr Speicher an, als zur Verfügung steht, gehen Schreibvorgänge „ins Leere“, was in Datenverlust auf Deinem Node und der Disqualifizierung Deines Node resultiert.
Tipp: Es sollten unbedingt 10% des eigentlich verfügbaren Speichers als „Reserve“ für temporäre- und Metadaten vorgehalten werden. Bei 3TB Speicher solltest Du hier also maximal 2,7TB angeben.
identity-dirHier muss der Verzeichnispfad angegeben werden, in dem sich die zu Anfang erzeugte Identity befindet.
storage-dirHier muss der Verzeichnispfad zum Datenverzeichnis (siehe Schritt 4) angegeben werden.
Tabelle 1: Erklärung der Parameter im Docker-Startbefehl für einen Storj-Storagenode.

Ich bin aber Verfechter einer in meinen Augen einfacheren Methode: Ich nutze eine docker-compose.yml-Datei.

So sieht (m)eine docker-compose.yml für einen Storagenode aus:

# based on https://documentation.storj.io/setup/cli/storage-node
# and based on https://www.jamescoyle.net/how-to/docker-compose-files/3219-storj-storage-node-docker-compose-file
# check the yml-code here: http://yaml-online-parser.appspot.com/
version: "3.2"

services:
  storagenode:
   container_name: storagenode1
   image: storjlabs/storagenode:latest
   restart: unless-stopped
   ports:
     - "28967:28967"
     - "14002:14002"
   volumes:
     - type: bind
       source: /volume1/docker/storj/node2/identity
       target: /app/identity
     - type: bind
       source: /volume2/storj/data
       target: /app/config
   environment:
     - WALLET=0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     - EMAIL=user@example.com
     - ADDRESS=meinedomain.de:28967
     - BANDWIDTH=30TB
     - STORAGE=1.6TB
     - STORJ_LOG_LEVEL=info

Die Inhalte bzw. Parameter decken sich in erster Linie mit denen aus dem direkten Kommando.

Starten kann man den Node dann entsprechend mit dem Kommando

docker-compose up -d

im jeweiligen Verzeichnis, in dem die docker-compose.yml liegt.

Was kann ich mit Storagenodes verdienen?

Die Einnahmen

Eine wichtige Frage und darauf zunächst die klare Antwort: Mit Storagenodes wird man nicht reich. Es geht in erster Linie um den Gedanken eines verteilten Storagenetzwerkes, den man unterstützen möchte. Natürlich ist es schön, wenn dabei nach Abzug von Stromkosten und Co. noch ein wenig übrig bleibt 😉

Ohnehin gilt – auch offiziell – die Maßgabe, dass überschüssiger Speicher auf ohnehin 24/7 laufenden Geräten genutzt werden sollte. Wie es eben auf einem NAS oft der Fall ist 😉

Es gibt einen Rechner, der den möglichen Verdienst mit einem Storagenode je nach Auslastung skizzieren soll. Achtung. Meiner Erfahrung nach ist dieser Rechner mehr als optimistisch und entspricht in keiner Weise den (aktuellen) Usage-Pattern im Storj-Netzwerk. Die dortigen Werte sind mMn nicht zu erreichen 😉

Ich habe euch mal meine aktuellen Werte aufgelistet (in Klammern steht der zurückbehaltene Betrag, der sog. Heldback):

MonatNode 1Node2Node 3Auszahlung Storj
Januar 202036,07$ (27,05$ Heldback)66 Storj
Februar 202027,01$ (20,26$ Heldback)54 Storj
März 202017,46$ (11,93$ Heldback)59 Storj
April 20205,11$ (3,22$ Heldback)17 Storj
Mai 20203,66$ (1,83$ Heldback)2,12$ (1,58$ Heldback)16 Storj
Ab hier summierte Auszahlungen*
Juni 20204,02$ (1,82$ Heldback)4,13$ (3,10$ Heldback)0.17$ (0,13$ Heldback)20 Storj

Update Juni 2020: Ab Juni 2020 werden die Auszahlungen gesammelt für alle Nodes ausgeführt. Trotzdem ist – trotz sinkender Heldbacks und der vollen Auslastung meines „Hauptnodes“ eine rapide Verschlechterung des Verdienstes sichtbar.
Das liegt primär daran, dass im Testbetrieb einige Monate die Auszahlungen ver-x-facht worden sind, um die Storagenodebetreiber zu halten. Diese Vervielfachungen des Verdienstes sind seit dem Produktivbetrieb nicht mehr vorhanden.

Update Juli 2020: Es scheint ein Problem mit meinem größten Node (Node1) zu geben, das die rapide gesunkenen Einnahmen erklären könnte. Seit März 2020 wird mir dort der ausgehende Traffic nicht mehr vergütet.
Ich habe das Problem im Storj-Forum gemeldet.
Das erklärt auch, wieso bereits mein viel jüngerer 2. Node im Juni mehr Einnahmen gebracht hat, als mein „alter“ Node, der zudem noch mehr Speicher hat und ein Vielfaches an Egress (ausgehendem Traffic).

Die Kosten

Für das Einrichten und den Betrieb eines Storagenodes fallen natürlich kosten an.
Schauen wir uns diese mal im Detail an.

Die Betriebskosten

Die Betriebskosten sind in erster Linie Stromkosten und kosten für einen entsprechenden Breitbandanschluss ans Internet. Wer es ganz genau nimmt, der bezieht vermutlich noch den Verschleiß bzw. den Ausfall von Festplatten und Co mit in die Rechnung.
Ich beschränke mich zunächst rein auf die Stromkosten.
Meine Nodes laufen auf einer Synology Diskstation DS3018xs. Das Gerät ist ausreichend leistungsfähig und verfügt bei mir über 24GB RAM.

Da NAS verbraucht im laufenden Betrieb in meiner Konfiguration gut 70 Watt.
Das entspricht einem Stromverbrauch von ca. 50 kW/h im Monat.
Beim aktuellen Strompreis von durchschnittlich 30 Cent je kW/h sind das immerhin 15€ im Monat.

Betriebskosten Stromverbrauch NAS im Monat:

Verbrauch kW/hPreis kW/hStromkosten / Monat
50 kW/h0,30€15€

Der Betrieb eines Storagenodes ist auf vielen – auch kleineren NAS von Synology möglich. Unabdingbar ist aktuell die Docker-Unterstützung.

Wenn wir jetzt ganz kleinlich sind, rechne ich noch die notwendige Breitband-Internetverbindung mit ein. Diese kostet mich für 20MBit Upload-Bandbreite (Kabel) 40€ monatlich.

Gesamtkosten / Monat StromGesamtkosten im Monat Strom und Internet
15€55€
Die Anschaffungskosten

Wenn man nun überlegt, ein NAS extra für den Betrieb von Storagenodes anzuschaffen, dann muss man die Anschaffungskosten mit einbeziehen.

Ich stelle einmal meine Variante gegen einer LowCost-Variante gegenüber.

KategorieMeine VarianteLowCost-Variante
NAS1400€ (DS3018xs)315€ (DS218+)
HDDs300€ (2*4TB)200€ (2*4TB)
SSD-Volume für Datenbank*250€ (2 * EVO 960 SSD)
Summe:1950€515€

Unterm Strich: Spannend wenn das NAS ohnehin läuft.

Jetzt geht es ans Eingemachte – ab wann ist ein Storagenodebetrieb überhaupt lohnenswert?

Szenario 1: Das NAS läuft ohnehin

Das NAS läuft ohnehin und verbraucht Strom. Eine Internetverbindung braucht man auch sowieso. Es entstehen also keine zusätzlichen Kosten und der überschüssige Speicher auf dem NAS kann gewinnbringend vermietet werden.
Bereits ab dem ersten Cent kann man die Einnahmen als Gewinn betrachten.

In diesem Szenario lohnt sich ein Storagenode in jedem Fall und sollte in Angriff genommen werden.

Szenario 2: Das NAS läuft ohnehin, Ausbau mit Festplatten

Wenn das NAS ohnehin läuft gilt in Bezug auf Stromverbrauch und Internetanschluss selbiges wie in Szenario 1. Lediglich die Upgrades der Festplatten müssen sich amortisieren.

In diesem Fall lohnt sich ein Storagenode erst nach einiger Zeit, kann aber durchaus gewinnbringend betrieben werden.

Szenario 3: Neuanschaffung sämtlicher Bestandteile

In diesem Szenario wird es schwierig. Rein wirtschaftlich sollte man sich gut überlegen, ob man sämtliche Hardware für Storagenodes neu anschaffen möchte, der break-even dürfte wenn überhaupt erst weit in der Zukunft erreicht werden.

Allerdings gibt es da ja noch den Enthusiasmus für ein tolles Projekt 😉


Gesammelte FAQs zu Storj

Kann ich Storagenodes mit SMR-Festplatten betreiben?

Ja, das geht, sollte man aber wenn möglichst unterlassen. Festplatten mit SMR-Technik sind wesentlich langsamer als ihre Pendants beispielsweise mit PMR-Technik. Durch viele Dateizugriffe, die rein von der Betriebsweise her bei einem Storagenode entstehen, wird der Node maßgeblich ausgebremst. Dieser Effekt wird dadurch verstärkt, dass Storagenodes mit einer SQLite-Datenbank auf filebasis arbeiten – die Datenbank erzeugt dadurch zusätzliche Last auf dem Dateisystem. Das geht soweit, dass bei einer Überlastung die Datenbank des Storagenodes geblockt werden kann, was zu massiven Problemen bis hin zur Disqualification des Nodes führen kann.
Tipp: Mein erster Node läuft auf einer SMR-Festplatte und hatte genau die beschriebenen Probleme. Trotzdem möchte ich den überschüssigen Speicher gerne nutzen. Seit kurzem kann man mit einem Parameter in der docker-compose.yml die Lokation der Datenbank ändern. Ich habe diese auf ein SSD-Volume gelegt und damit massiv Last vom Filesystem genommen. Der Node läuft nun weitgehend problemfrei.

Status eines Storagenode überprüfen

Obwohl sich Storj bzw. Tardigrade bereits im Produktivbetrieb befinden, kommt es häufig noch zu Problemen beim Betrieb von Storagenodes.
Neben dem Storagenode-Dashboard sollte man sich regelmäßig die Logs des Docker-Containers anschauen.
Das geht mit folgendem Kommando auf der Konsole:
docker logs --tail 200000 containername 2>&1
Wenn man sich auf die Suche nach potentiell kritischen Problemen/Fehlern macht, sollte man die Logs nach Einträgen mit „failed“ durchsuchen:
sudo docker logs --tail 200000 containername 2>&1 | grep "failed"

Storj und Tardigrade – Was ist das?

Ganz einfach. Storj.io und Tardigrade.io sind zwei Seiten eines großen Storage-Netzwerks.
Storj.io ist dabei das Frontend/die Webseite für Storagenodebetreiber, also die Personen, die eigenen Speicher anbieten wollen.
Tardigrade.io ist das Pendant für die Personen, die Speicher mieten wollen. Der von den Storagenodes bereitgestellte Speicher wird hier als S3-Objektspeicher weitervermietet.

Wie kann ich die Logs eines Storagenodes in ein File umleiten?

Standardmäßig schreibt Dein Storagenode seine Logs in das Protokoll des jeweiligen Docker Containers. Dieses Protokoll ist in der Regel nicht persistent, das heißt, es wird bei jedem Löschen des Containers und dem anschließenden Neu-Erstellen, wie es z.B. bei einem Update des Storagenodes passiert, gelöscht.
Manchmal ist es aber sinnvoll, Logfiles aufzubewahren. Daher ist es möglich, die Logeinträge in eine Datei umzuleiten und dort persistent zu speichern.
Dafür muss man einfach den Storagenode stoppen, die config.yaml öffnen und den Eintrag log.output einkommentieren und bei der Ausgabe den Pfad (aus Sichte des Containers!) zum gewünschten Logfile eintragen. Das Logfile wird dann erstellt und gefüllt.
Die gesamte Zeile sieht dann wie folgt aus:
log.output: "/app/config/node.log"
Anschließend die Änderung speichern und den Storagenode neustarten.

Wie groß ist das Netzwerk? Wie viele Storagenodes gibt es?

Eine offizielle Angabe gibt es nicht. Es gibt aber eine Plattform (https://storjnet.info/), die einige Informationen über das Storj-Netzwerk sammelt.
Aktuell sind dort (Stand Juli 2020) über 6200 aktive Storagenodes erfasst.

Quellen und weitere Ressourcen:
https://forum.storj.io/
https://www.synology-forum.de/threads/storj-speicher-vermieten.92657/
Storj-Whitepaper

  1. Avatar

    Wolfgang

    Hi, toller Beitrag. Ich ich hatte erst SMR Platten in Betrieb. Die habe ich dann wegen der schlechten Node-Performance rausgehauen und CMR Platten verwendet. Läuft seither deutlich besser.
    Du könntest vielleicht etwas zu den Stromkosten sagen. Meine DS218+ hatte damals ca. 3,5€ Stromkosten im Monat und meine DS418play hat jetzt ca. 7€. Das ist vielleicht für jemand interessant, der die DS nicht eh schon in Verwendung hat und sie nur für den Storj anschafft.
    Ich verdiene aktuell mit meinem Knoten ca. 2,5€/TB/mnt. Eine HDD kostet aktuell 27-29€/TB. Die Investition einer Platte ist also nach etwas mehr als einem jahr wieder drin. Dann sollte man noch die NAS Kosten einrechnen und davon ausgehen, dass eine Platte in diesem Dauerbetrieb nach 3-4 Jahren hinüber ist.
    Trotzdem wird (zu recht) von einem Raid Verbund abgeraten und bei Verlust das Aufsetzen eines neuen Knotens empfohlen.

    • Jan-Dirk
      Kommentar des Beitrags-Autors

      Jan-Dirk

      Hallo Wolfgang!
      Danke für Deine Anmerkungen 🙂

      zu 1)
      Danke für den Tipp!
      Ich hatte auch größere Probleme (unter anderem mit gelockten Datenbank-Files und Co) mit einer SMR-Platte gehabt. Seit einer der letzten Versionen kann man die Datenbank-Location in der Config anpassen.
      Ich habe daraufhin die Datenbank auf ein SSD-Volume gelegt und jetzt rennt der Node wesentlich schneller (Ich werde dazu auch nochmal einen Artikel schreiben). Trotzdem ist die SMR-Platte noch immer am Anschlag. Aber naja, ich habe sie halt noch rumliegen 😉

      zu 2)
      Eine gute Idee, die Stromkosten werde ich noch mit aufschlüsseln. Wobei der Vergleich dann ein wenig hinkt, da die DS ohnehin 24/7 läuft und nicht ausschließlich für Storagenodes genutzt wird. Ich denke bis man da in den Bereich der Wirtschaftlichkeit kommen würde, würde es lange dauern.

      zu 3)
      Das ist spannend! Ich werde die Tabelle mal um die Auflistung „Verdienst pro TB“ ergänzen.
      Als Tipp: Oftmals gibt es schon HDDs für bis zu 16€/TB im Angebot. Sind zugegebenermaßen aber in der Regel SMR-Consumer-HDDs.

      zu 4)
      Hier bin ich komplett bei Dir. Das Storj-Netzwerk ist ja auf Redundanz ausgelegt. Also kann das Netzwerk den Ausfall eines Nodes verkraften. Da nutze ich lieber jede HDD einzeln und maximiere den Gewinn 😉

      Gruß
      Jan-Dirk

Schreibe eine Antwort