Experiment: Distributie grote bestanden binnen LAN met BitTorrent

Uitdaging

Iedere schoolperiode start met een vervelend werkje. Een ISO, vmdx of ander groot bestand dient op de een of andere manier gedistribueerd te worden onder 20 tot soms wel 100 deelnemers tegelijk. Voor een fileserver (ftp, samba, nfs, http) is dit een fikse opgave. De discipline, nodig om dit met multicast oplossingen voor elkaar te krijgen (ghost, altiris), is lang vervlogen. Studenten komen te laat of zijn die ene les niet aanwezig.

Een oplossing

De studenten weten intussen zelf al lang hoe ze films en andere dvd's onderling kunnen uitwisselen vanuit een schijnbare anarchie. E-mule, µTorrent en vergelijkbare peer to peer uitwisselingsprogramma's kennen al een lange historie en zijn intussen stabiele oplossingen.

Wat zou er nu nodig zijn om deze technologie voor serieuze toepassingen, zoals het distribueren van lesmateriaal, te kunnen inzetten. Laten we een plaatje bekijken van de werking van torrents.

Volg deze instructies als je een tracker wilt bouwen op je lokale netwerk, zodat je bestanden lokaal kunt verspreiden zonder bittorrent vanaf internet toe te hoeven staan en zonder complexe PAT-tabellen om de verschillende werkstations op je LAN te voorzien van een eigen torrent poort.

Het plaatje

Er zijn maar liefst 2 servers "nodig" voor een peer to peer netwerk :-). Ergens wil je natuurlijk een index bijhouden met torrents. In ons geval een index van torrents van lesmateriaal. Torrents zijn kleine bestandjes waarin een paar gegevens staan.

- De bestandsnamen en omvang van de bestanden die het betreft.
- Een hashcode die de torrent uniek identificeert.
  (Tevens kun je met de hash code controleren of de bestanden correct zijn.)
- Het adres van 1 of meerdere trackers. (zie verderop)

Deze bestanden moeten door de clients gedownload kunnen worden. Daarbij is een server wel erg gemakkelijk. Denk aan een FTP server, een fileserver of een webserver. De client leest de trackers en meldt zich aan. In eerste instantie als klant (leecher) nadat de client data heeft ontvangen meldt hij zich bij deze trackers aan als aanbieder (seeder).

De Tracker

Opentracker is beerware. Gebruik de software en code naar eigen believen. Laat de koptekst staan. Als je de auteur in de toekomst tegen komt mag je hem een biertje geven. Op de site:  http://erdgeist.org/arts/software/opentracker/ staat prima uitgelegd hoe je aan de source kan komen en hoe je die kan compileren. Het programma is erg simpel en het functioneert goed.

Volg je mijn weg, dan richt je een Ubuntu server in zonder extra's. Compileer de broncode op een Ubuntu werkstation met C-ontwikkeltools geïnstalleerd. Daarop kopieer je het opentracker.debug programma naar de server. In de map waarin je opentracker.debug plaatst, maak je het configuratiebestand opentracker.conf.

# opentracker config file
#
listen.tcp_udp 0.0.0.0:80
tracker.user <ger>

Vul bij listen.tcp_udp het ip-adres in waarop je antwoord wilt geven. Als het je niet uitmaakt en je wilt overal op antwoorden vul dan 0.0.0.0 in. Poort 80 is de standaard http poort. Door deze te gebruiken vereenvoudig je de announce-url van je tracker. Je kunt nu geen webserver naast je tracker server draaien op dezelfde ethernet device.

Het voorbeeld configuratiebestand op de site van opentracker beschrijft duidelijk alle opties en nadat je deze hebt aangepast start je het programma opentracker:
sudo opentracker.debug -f opentracker.conf

Deze tracker kun je vervolgens gaan gebruiken bij het maken van een torrent.

Transmission

Ik gebruik transmission als bittorrent client. Er zijn veel bittorrent programma's zoals e-mule, µTorrent en ktorrent / kget. Alle clients kunnen ongeveer het zelfde. Het zou eenvoudig moeten zijn om aan de hand van deze instructies met andere programma's aan de slag te kunnen.

Het resultaat van de menu-optie "file", "new". Een torrent, zoals gezegd, is gewoon een klein bestandje. Dat bestandje moet ergens worden opgeslagen. In dit geval op mijn bureaublad. Een torrent verspreiden gaat op dezelfde manier als alle andere bestanden die je wilt verspreiden. Het grote verschil is de omvang. De bestanden die ik wil delen zijn samen 1,5 GB. De torrent is slechts 32 Kb.

Een torrent kun je maken op basis van een map / folder of een bestand. Kies liefst voor een map met de bestanden zoals je ze wilt laten gebruiken en pak ze niet in met zip, tar, arj of rar. Het torrent protocol zorgt zelf al voor compressie en de overlevingskansen van je torrent zijn groter als je gebruikers de bestanden direct kunnen gebruiken. Een zip bestand wordt immers meestal uitgepakt en daarna wordt het weggegooid waardoor de leecher geen seeder wordt of de seeder "sterft".

Als tracker vul ik het adres van mijn tracker-server in die ik net heb gemaakt. De server heet in mijn geval tracker. De poort is de standaard http poort 80. dus mijn adres is:
http://tracker/announce

Heet je server 192.168.0.12 en draait je tracker op de standaard poort van opentracker 9696 dan is de tracker url:
http://192.168.0.12:9696/announce

Vul een beschrijving in en je torrent is klaar. Zodra je op "New" klikt zal transmission proberen om de torrent aan te kondigen bij de tracker(s). Lukt dit niet dan mag je de url aanpassen en het nogmaals proberen. Lukt dit wel dan volgt een volgend scherm.



Transmission berekent de hash van de torrent.

Druk op "Add" zodra hij klaar is om de torrent zelf te laden en de bestanden te seeden.














Transmission controleert de lokale bestanden met de hash van de torrent. Als dit klopt, start hij met seeden. Iedereen die dezelfde torrent opent in een bittorrent client op het zelfde lokale netwerk als de tracker, zal deelnemen aan de pool van peers en de bestanden binnenhalen.




Comments