Torrent v2

master
Quentin Duchemin 2024-03-29 00:03:12 +01:00
parent ad41cc2420
commit 06ea9e242e
1 changed files with 26 additions and 22 deletions

View File

@ -10,7 +10,7 @@ imgExplanation: En image d'illustration, un extrait de la délicieuse [pub anti-
# Prérequis # Prérequis
On va utiliser [Tranmission](https://wiki.archlinux.org/title/Transmission), un client [BitTorrent](https://fr.wikipedia.org/wiki/BitTorrent) libre très utilisé, qui a l'avantage de proposer une CLI simple d'utilisation et de pouvoir gérer la création de torrents. On va utiliser [Transmission](https://wiki.archlinux.org/title/Transmission), un client [BitTorrent](https://fr.wikipedia.org/wiki/BitTorrent) libre très utilisé, qui a l'avantage de proposer une CLI simple d'utilisation et de pouvoir gérer la création de torrents.
Pour ce faire, on installe deux paquets : Pour ce faire, on installe deux paquets :
@ -31,13 +31,13 @@ sudo ss --tcp -pn
ESTAB [...] 54.38.93.217:51413 [...] users:(("transmission-da",pid=3840919,fd=24)) ESTAB [...] 54.38.93.217:51413 [...] users:(("transmission-da",pid=3840919,fd=24))
``` ```
Le port `51413` est le port TCP par défaut de Transmission. Il existe plusieurs mécanismes pour échanger des fichiers via BitTorrent, et ici on utilisera le plus simple : Transmission annoncera qu'on peut contacter notre serveur sur ce port pour le récupérer. Le port `51413` est le port TCP par défaut de Transmission. Il existe plusieurs mécanismes pour échanger des fichiers via BitTorrent, et ici on utilisera le plus simple : Transmission annoncera qu'on peut contacter notre serveur sur ce port.
{{<warn>}}Si vous avez un pare-feu type tout sauf whitelist, c'est le moment d'ouvrir le port !{{</warn>}} {{<warn>}}Si vous avez un pare-feu restrictif, c'est le moment d'ouvrir le port `51413`.{{</warn>}}
# Configurer Transmission # Configurer Transmission
Transmission a la fâcheuse habitude de ré-écrire sa configuration au redémarrage s'il n'est pas arrêté lors de la modification. Transmission a la fâcheuse habitude d'écraser sa configuration au redémarrage s'il n'est pas arrêté lors de la modification.
On commence donc par stopper le daemon : On commence donc par stopper le daemon :
@ -45,15 +45,15 @@ On commence donc par stopper le daemon :
sudo systemctl stop transmission-daemon sudo systemctl stop transmission-daemon
``` ```
On aura besoin de changer un paramètre dans le fichier de configuration : Pour nous faciliter la vie, on va changer un paramètre dans le fichier de configuration :
```bash ```bash
sudo vim /etc/transmission-daemon/settings.json sudo vim /etc/transmission-daemon/settings.json
``` ```
On passe `rpc-authentication-required` à `false`. Ça facilitera l'usage de la CLI en désactivant l'authentification. On passe `rpc-authentication-required` à `false`. L'authentification RPC est souvent utilisée pour contrôler Transmission à distance. Ici, on se facilite les commandes.
{{<info>}}Pas d'inquiétude, une whitelist par défaut limite l'authentification à `localhost`, donc si vous avez l'entière maîtrise sur votre serveur, je n'y vois pas d'inconvénient majeur. Après, je ne suis pas le plus strict niveau sécurité 😇.{{</info>}} {{<info>}}Pas d'inquiétude, une whitelist par défaut limite l'authentification à `localhost`, donc si vous avez l'entière maîtrise sur votre serveur, je n'y vois pas d'inconvénient majeur. Après, je ne suis pas læ plus strict·e niveau sécurité 😇.{{</info>}}
On redémarre le daemon : On redémarre le daemon :
@ -67,52 +67,56 @@ Pour créer un torrent avec Transmission, on a besoin de deux choses :
- Un répertoire ou un fichier à seeder ; - Un répertoire ou un fichier à seeder ;
- Une liste de [**trackers**](https://fr.wikipedia.org/wiki/Tracker_BitTorrent). - Une liste de [**trackers**](https://fr.wikipedia.org/wiki/Tracker_BitTorrent).
Les trackers sont de loin la méthode la plus utilisée pour trouver des pairs possédant une copie des fichiers d'un torrent. Les clients BitTorrent communiquent aux trackers quelles parties des fichiers ils peuvent seeder et comment les contacter, puis switchent sur le pair-à-pair. Les « trackers » sont des genre d'annuaires où s'enregistrent les pairs possédant tout ou partie des fichiers d'un torrent. Les pairs souhaitant leecher interrogent le tracker et récupèrent la liste. Une fois cette liste récupérée, la transmission se fait en pair-à-pair.
{{<info>}}Pour les plus curieux·se d'entre vous, il existe aussi une méthode entièrement décentralisée qui repose sur les [tables de hachage distribuée](https://igm.univ-mlv.fr/~dr/XPOSE2013/bittorrent/ext.html).{{</info>}} {{<info>}}Pour les plus curieux·se d'entre vous, il existe aussi une méthode entièrement décentralisée qui repose sur les [tables de hachage distribuée](https://igm.univ-mlv.fr/~dr/XPOSE2013/bittorrent/ext.html).{{</info>}}
Il existe des trackers publics et privés. Les trackers publics sont maintenus parfois par des associations, parfois par des individus, mais ils sont loin d'être stables. L'idéal est donc d'associer plusieurs trackers public à un torrent pour être sûr·e qu'au moins un des trackers soit accessible lors du leech. Il existe des trackers publics et privés. Les trackers publics sont maintenus parfois par des associations, parfois par des individus, mais ils sont loin d'être stables ; ils peuvent être suspendus ou surchargés. L'idéal est donc d'associer plusieurs trackers public à un torrent pour être sûr·e qu'au moins un des trackers soit accessible lors du leech, et pour éviter le côté « centralisation », par vraiment dans la philosophie des torrents.
{{<info>}}Sur [ce dépôt](https://github.com/ngosang/trackerslist), tu trouveras une liste très active des trackers publics fonctionnels.{{</info>}} {{<info>}}Sur [ce dépôt](https://github.com/ngosang/trackerslist), tu trouveras une liste très active des trackers publics fonctionnels.{{</info>}}
On a tout ce qu'il nous faut ! Imaginons maintenant que tu aies un dossier `perfectly_legal` que tu souhaites seeder. Voici comment créer le fichier torrent : Allez, c'est parti ! Imaginons maintenant que tu aies un dossier `perfectly-legal` que tu souhaites seeder. Voici comment créer le fichier torrent :
```bash ```bash
# Rajouter plusieurs trackers en répétant l'option -t ; j'en mets 4 ou 5. # Rajouter plusieurs trackers en répétant l'option -t ; j'en mets 4 ou 5.
transmission-create perfectly_legal -t <tracker_1> [-t <tracker_2> ...] -o perfectly_legal.torrent transmission-create perfectly-legal -t <tracker_1> [-t <tracker_2> ...] -o perfectly-legal.torrent
``` ```
{{<warn>}}Plus le dossier est gros, plus la création du torrent est longue ; plusieurs minutes pour 100Go.{{</warn>}} {{<warn>}}Plus le dossier est gros, plus la création du torrent est longue ; plusieurs minutes pour 100Go.{{</warn>}}
Le torrent ne contient finalement pas grand chose : le nom du dossier, la liste des trackers et le hash du torrent, indispensable pour l'identifier sur les trackers. Ce hash dépend bien sûr du dossier et de son contenu. Le torrent ne contient finalement pas grand chose : entre autres, le nom du dossier, la liste des trackers et le hash du torrent, indispensable pour l'identifier sur les trackers. Ce hash dépend bien sûr du dossier et de son contenu.
{{<info>}}Utilise la commande `transmission-show perfectly-legal.torrent` pour l'inspecter.{{</info>}}
# Seeder le torrent # Seeder le torrent
Avant de se mettre à seeder, il faut copier notre dossier `perfectly_legal` dans le dossier de téléchargement de Transmission, sinon le daemon ne se rendra pas compte qu'il a déjà une copie du fichier ! Avant de se mettre à seeder, il faut copier notre dossier `perfectly-legal` dans le dossier de téléchargement de Transmission, sinon le daemon ne se rendra pas compte qu'il peut seeder !
```bash ```bash
rsync -av perfectly_legal /var/lib/transmission-daemon/downloads/ rsync -av perfectly-legal /var/lib/transmission-daemon/downloads/
``` ```
{{<info>}}Tu peux modifier le chemin dans le fichier de conf, clé `download-dir`. N'oubliez pas d'arrêter le daemon avant la modification, cf partie configuration 😉.{{</info>}} {{<info>}}Tu peux modifier le chemin dans le fichier de conf, clé `download-dir` 😉.{{</info>}}
Puis on lance le seed (mais qui pourrait être un leech, c'est le même client !): Puis tu peux lancer le seed :
```bash ```bash
transmission-remote -a perfectly_legal.torrent transmission-remote -a perfectly-legal.torrent
``` ```
Transmission commence par se rendre compte qu'il possède le fichier et en vérifie l'intégrité. Tu peux suivre cette évolution comme ceci : En réalité, cette commande pourrait aussi lancer un leech, si le fichier était hébergé quelque part. C'est le principe même des torrents : tu peux être à la fois seeder et leecher.
Ici, Transmission commence par se rendre compte qu'il possède le fichier et en vérifie l'intégrité. Tu peux suivre cette évolution comme ceci :
```bash ```bash
watch -n .1 transmission-remote -l watch -n .1 transmission-remote -l
ID Done Have ETA Up Down Ratio Status Name ID Done Have ETA Up Down Ratio Status Name
1 100% 502.4 MB Done 0.0 0.0 0.0 Idle perfectly_legal 1 100% 502.4 MB Done 0.0 0.0 0.0 Idle perfectly-legal
``` ```
Dès que tu es à 100%, c'est bon. Transmission annonce aux différents trackers qu'il peut seeder le dossier que tu veux partager. Dès que tu es à 100%, c'est bon. Transmission annonce alors aux différents trackers qu'il a le dossier et peut le seeder.
J'utilise [qBitTorrent](https://www.qbittorrent.org/) pour gérer les torrent que je télécharge. Quand j'ouvre `perfectly_legal.torrent` et que je commence le téléchargement, chaque tracker m'indique un pair. Logique, c'est le serveur depuis lequel je seed. Quand je regarde ses informations, je vois : Côté client, j'utilise [qBitTorrent](https://www.qbittorrent.org/) pour gérer les torrents que je télécharge. Quand j'ouvre `perfectly-legal.torrent` et que je commence le téléchargement, chaque tracker m'indique un pair. Logique, c'est le serveur depuis lequel le dossier est seedé. Quand je regarde ses informations, je vois :
{{<figure src="qbittorrent.png">}} {{<figure src="qbittorrent.png">}}
@ -123,7 +127,7 @@ Pas de surprise, c'est le port sur lequel écoute Transmission, comme on l'a vu
```bash ```bash
transmission-remote -l transmission-remote -l
ID Done Have ETA Up Down Ratio Status Name ID Done Have ETA Up Down Ratio Status Name
1 100% 502.4 MB Done 0.0 0.0 1.0 Idle perfectly_legal 1 100% 502.4 MB Done 0.0 0.0 1.0 Idle perfectly-legal
``` ```
Tu vois maintenant que le ratio est à `1.0`, c'est-à-dire que tu as seedé l'intégralité du dossier ! 🥳 Tu vois maintenant que le ratio est à `1.0`, c'est-à-dire que tu as seedé l'intégralité du dossier ! 🥳