Archiv

Posts Tagged ‘Bittorrent’

BitTorrent-Mirrors einfach erstellen

2009-07-04 4 Kommentare

Heute wieder mal etwas Technisches: Manchmal steht man vor dem Problem, dass man eine oder mehrere große Dateien anbieten möchte, die dann von vielen Leuten heruntergeladen werden. Ein normaler Webserver macht das unter Umständen nicht mit oder wird zumindest langsam, weil er überlastet wird, zudem entstehen große Mengen an Traffic und damit verbundene Kosten.

Eine Alternative ist die Verbreitung der Dateien über ein Peer-to-Peer-System wie BitTorrent, bei welchem die Downloader die Daten selbst an andere Downloader weiterverteilen. Das Problem dabei ist jedoch, dass nur Nutzer mit einem BitTorrent-Client an die Dateien kommen, und es auch für den Anbieter zunächst aufwendig zu sein scheint, schließlich braucht man Tracker und Seeds – denken viele. Zudem haben torrent-Downloads den Ruf, oft langsamer als gute HTTP-Downloads zu sein, weswegen auch mit entsprechender Software ausgestattete Nutzer oft den Bittorrent-Download zugunsten des HTTP-Downloads verschmähen. Hier versuche ich zu zeigen, dass das nicht (mehr) stimmt und wie man in wenigen Minuten ohne großen Aufwand einen BitTorrent-Download zusätzlich anbieten kann.

Jeders halbwegs moderne BitTorrent-Programm („client“) unterstützt inzwischen sogenannte Webseeds, und es gibt zahlreiche offene Tracker – diese weitgehend unbeachteten Punkte lassen die oben genannten Nachteile wegfallen. Sobald man einen HTTP-Download anbietet, kann dieser auch gleichzeitig als Seed benutzt werden. Ein Nutzer, der BitTorrent nutzt, wird also nicht gegenüber Nutzern benachteiligt, die nur über HTTP herunterladen, weil ihm HTTP zusätzlich zum BitTorrent-Download gleichzeitig zur Verfügung steht. Das erhöht die Motivation der Nutzer, auf den bequemen HTTP-Download zu verzichten und den schnelleren, aber Serverressourcen schonenden BitTorrent-Download zu nutzen. Ein gesonderter Seed muss nicht angeboten werden, serverseitig wird also keine spezielle Software benötigt!

Auch einen eigenen Tracker benötigt man nicht: Es gibt zahlreiche öffentliche Tracker, welche man einfach in die .torrent-Kontrolldatei, die man erstellt, eintragen kann. Man muss die Datei nicht einmal bei den Trackern anmelden! Man kann auch mehrere Tracker eintragen, sodass ein Ausfall eines Trackers nicht weiter stört. Selbst bei einem Ausfall aller Tracker können die meisten Clients mit ihren DHT-Systemen weiter funktionieren.

Sinn macht so etwas natürlich nur bei größeren Dateien und wenn man davon ausgehen kann dass zumindest ein nennenswerter Anteil der Nutzer BitTorrent nutzen wird. Viele Internetnutzer haben schon BitTorrent-Clients installiert, um sich illegal aber kostenlos mit aktuellen Kinofilmen zu versorgen, sodass die Akzeptanz guter BitTorrent-Downloads auf Seiten mit internetaffinem Publikum überraschend gut sein dürfte. Auf jeden Fall sollte man auf den Webseed hinweisen und darauf dass BitTorrent schneller ist, also z. B. indem man zwei Download-Links anbietet „Direkt herunterladen (HTTP, langsam)“ und „Über BitTorrent herunterladen (mit WebSeed, schnell, BitTorrent-Client erforderlich)“. Insbesondere für Videoaufzeichnungen von Veranstaltungen mit netznahen Zielgruppen bietet sich so etwas an.

Nun also zur Kernfrage: Wie bietet man einen BitTorrent-Download an? Man muss eine sogenannte .torrent-Kontrolldatei („das Torrent“) erstellen und zum Download anbieten. Diese Datei wird mit einem speziellen Programm erzeugt (siehe unten), ist wenige KB groß und wird ganz normal statt bzw. neben der eigentlichen Datei zum Download angeboten. Ein Nutzer der die Datei (z. B. ein Video) herunterladen möchte, lädt nun stattdessen diese kleine .torrent-Datei. Dadurch öffnet sich sein BitTorrent-Client, welcher dann die eigentliche Datei herunterlädt.

Um Webseeds nutzen zu können, muss man die Torrent-Datei richtig erstellen. Die meisten Tools zum Erstellen von Torrents unterstützen Webseeds nicht oder nicht richtig, weswegen man etwas wählerisch sein muss. Ich stelle hier exemplarisch zwei Tools vor. Das graphische Tool ist für unerfahrene Windows-Nutzer, die nur wenige Torrents erstellen wollen vielleicht einfacher, doch wer (womöglch automatisch) viele Torrents erstellen will, ist mit dem Konsolentool besser dran – es scheint komplizierter, ist aber viel schneller. Nun denn:

Option 1: Vuze (ehemals Azureus)
Man installiere sich die kostenlos verfügbare Software „Vuze„. Dabei handelt es sich um einen sehr mächtigen, aber ressourcenfressenden BitTorrent-Client mit vielen Zusatzfunktionen. Im Hauptfenter kann man nun über „Datei->Torrent ersetellen“ den Assistenten starten. Im ersten Dialog wählt man: „Benutze einen externen Tracker“, „Füge Informationen für mehrere Tracker hinzu“ (sofern man mehrere Tracker wünscht), „Füge HTTP-Quellen hinzu“ aus und je nachdem, ob man ein Verzeichnis oder eine einzelne Datei anbieten möchte, wählt man das entsprechende Feld (in der Regel also „Datei“). Den ersten Tracker (siehe unten) trägt man bereits mit seiner Ankündigungs-URL ein.

Auf der nächsten Seite erstellt man ein neues Trackerset, gibt ihm einen Namen und trägt alle gewünschten Tracker ein. Beim nächsten Mal kann man das Set dann wiederverwenden. Auf der nächsten Seite muss man die HTTP-Adresse eintragen, wo die Datei heruntergeladen werden kann, und zwar unter „getright“, nicht „webseed“ (!). Also eine neue HTTP-Quellenkonfiguration erstellen, Namen geben, per Rechtsklick auf getright die Quelle(n) einfügen (nicht verwirren lassen wenn „Tracker“ da steht). Mehrere Adressen können eingegeben werden, wenn exakt die gleiche Datei auf mehreren Servern verfügbar ist.

Auf der nächsten Seite wählt man die Datei aus, die man zum Download anbieten möchte. Diese muss lokal gespeichert sein, wird aber nur für die Erstellung des Torrent gebraucht, danach kann man sie löschen. Auf der folgenden Seite gibt man an, wo die fertige Torrent-Datei hin soll, „Größe der Teile“ lässt man besser auf „Auto“, und stellt „Öffne den Torrent“ aus, „Privater Torrent“ aus, „Erlaube dezentralisiertes Tracken“ ein, und klickt auf fertig. Je nach Dateigröße muss man dann etwas warten und erhält die fertige Torrent-Datei. Diese lädt man nun wie eine ganz normale Datei auf den Server, verlinkt sie (siehe oben) und ist fertig! Ich weiß, dass es kompliziert klingt, aber wenn man es einmal gemacht hat geht es schneller zu machen als diesen Text zu lesen.

Option 2: mktorrent
Mit dem Konsolen-Tool „mktorrent“ kann man mit einer einzigen Befehlszeile ein Torrent erstellen. Das Problem ist, dass mktorrent leider nur als Quellcode angeboten wird, und man es somit selbst kompilieren muss (siehe unten).

Wenn mktorrent lauffähig installiert ist, wechselt man in das Verzeichnis, in dem die Datei liegt, die man anbieten möchte. Dann gibt man folgenden Befehl ein (eine Zeile), wobei man [URL] durch die HTTP-URL wo man die Datei herunterladen kann und [DATEINAMEN] durch den Namen der anzubietenden Datei ersetzt:

mktorrent -a http://open.tracker.thepiratebay.org/announce,http://www.torrent-downloads.to:2710/announce,http://denis.stalker.h3q.com:6969/announce,udp://denis.stalker.h3q.com:6969/announce,http://www.sumotracker.com/announce,http://tracker.publicbt.com:80/announce,udp://tracker.publicbt.com:80/announce,http://tracker.openbittorrent.com:80/announce,udp://tracker.openbittorrent.com:80/announce -w [URL] [DATEINAME]

Der Parameter -a gibt eine Liste der zu verwendenden Tracker an (announce-URLs, getrennt durch Kommata). Man kann mit mehreren -w Parametern auch mehrere URLs (Webseeds) angeben, von denen die Datei heruntergeladen werden kann. Für weiterführende Optionen (festlegen der Chunkgröße etc.) sei auf die Hilfe des Programms (mktorrent -h) verwiesen. Die Torrent-Datei wird direkt erstellt und kann wie oben beschrieben hochgeladen werden. Fertig! (Jeder darf raten welche Variante ich bevorzuge, ewiges Klicken durch Menüs oder eine Zeile anpassen und ausführen…)

Die Schwierigkeit bei der Verwendung von mktorrent ist, dass man es selbst kompilieren muss. Es ist zwar vergleichsweise einfach und sogar ich habe es geschafft unter Linux eine Windowsversion zu kompilieren, aber wem „kompilieren“ nichts sagt, kann ich davon nur abraten. Für die anderen tut es ein Blick in die README, ggf. muss man Funktionen deaktivieren (Threads, Benutzung einer externen OpenSSL-Libraray). Auf Anfrage kann ich notfalls meine Linux- und Windows-Binaries zur Verfügung stellen.

Welche Tracker?
Welche Tracker sollte man eintragen? Ich habe irgendwo folgende Tracker empfohlen bekommen und nutze die, wer bessere kennt, darf sie gerne nennen:

http://open.tracker.thepiratebay.org/announce
http://www.torrent-downloads.to:2710/announce
http://denis.stalker.h3q.com:6969/announce
udp://denis.stalker.h3q.com:6969/announce
http://www.sumotracker.com/announce
http://tracker.openbittorrent.com:80/announce
udp://tracker.openbittorrent.com:80/announce
http://tracker.publicbt.com:80/announce
udp://tracker.publicbt.com:80/announce

Vorteile dieser Lösung
Warum sollte man sich die Mühe machen, was hat man davon? Nun, durch BitTorrent werden die Downloads beschleunigt und der Server wird entlastet. Dadurch spart man auch oft teuren Traffic. Das Beste jedoch: Wenn der Server (z. B. wegen Überlastung) abstürzen sollte, können angefangene Downloads erfolgreich zu Ende geführt werden, sofern einer der über BitTorrent herunterladenden Nutzer die Datei komplett hat und seinen Client laufen lässt.

Falls es niemandem aufgefallen ist: Man kann auch für Dateien auf einem fremden (überlasteten) Server ein .torrent erstellen, allerdings sollte man beachten, dass wenn jeder ein eigenes Torrent erstellt, der Nutzen gering ist – nur die Clients die das selbe Torrent nutzen helfen sich gegenseitig beim Download. Wenn man es dennoch tun will, lädt man einfach die fragliche Datei herunter (ohne geht es nicht!) und verfährt wie oben angegeben. Das fertige Torrent kann man dann feierlich dem Administrator der Seite überreichen oder selbst irgendwo anbieten. (Bitte selbst informieren wie es rechtlich aussieht, wenn man das bei Seiten macht wo der Admin nicht einverstanden ist.)

Die fertigen Torrent-Dateien kann man natürlich auch bei diversen Portalen hochladen, wenn die Inhalte auch ohne die Originalwebsite auffindbar sein sollen.

Ein weiterer positiver Nebeneffekt ist, dass die Torrent-Datei einen Fingerabdruck der herunterzuladenden Datei enthält. Wenn man also die Torrent-Datei auf sicherem Weg (https, mit Signatur, …) anbietet, kann ein herunterladender Nutzer sicher sein, die richtige Datei zu erhalten, selbst wenn der Download von nicht vertrauenswürdigen Mirrors erfolgt.

Nicht ohne Grund wird übrigens quasi genau dieses BitTorrent-Verteilsystem beim Online-Rollenspiel World of Warcraft seit Jahren erfolgreich dafür eingesetzt, die oft sehr großen Updates zu verteilen.

Feedback und Erfahrungsberichte sind willkommen!