Installation d’une seedbox connectée en VPN

Dans ce billet, je vais détailler comment transformer un Rapsberry Pi en machine dédiée au téléchargement de torrent tout en protégeant son anonymat grâce à un VPN.

Principe

Si vous n’arrivez pas à vous satisfaire des nombreux services de Vidéo à la demande (ou VoD) actuels, peut-être avez-vous l’habitude de télécharger vos films par Torrent.

Le téléchargement des torrents se faisant en général à des vitesses réduites, les temps de téléchargement peuvent se compter en jours. Du coup c’est moyennement rentable de laisser un PC allumé pendant 5 jours si c’est pour regarder une série complète en une demi-journée de gueule de bois. Une alternative consiste à utiliser une seedbox, c’est-à-dire un ordinateur minimaliste (tel qu’un Raspberry Pi) dédié à cette tâche. Cette machine étant reliée à votre réseau domestique, il suffit alors de s’y connecter pour lancer des téléchargements ou accéder aux fichiers téléchargés.

Se pose aussi la question de la confidentialité de vos téléchargements. En effet, si vous êtes un fou-furieux du torrent, votre FAI, ainsi que l’Hadopi, ne tarderont pas de s’en rendre compte. Le fait de passer par un Réseau Privé Virtuel (ou VPN), est un moyen d’outre-passer ce risque. Je rappelle, à toute fin utile, que le téléchargement de films soumis au droit d’auteur est interdit. L’utilisation d’un VPN ne l’est pas (encore). Libre à vous de tenir compte de ce rappel.

Objectifs du jour

Pour résumer, l’objectif de ce billet est donc d’utiliser un Rapsberry Pi pour installer le Transmission, le logiciel Linux de téléchargent de torrents et de mettre en place la connexion VPN. Cette seedbox se voulant minimaliste, le Rapsberry sera dépourvu d »écran, de clavier ou de tout autre moyen de triche. Seule arme autorisée : un client SSH.

Ce type d’installation (en gros toute installation logicielle sans accès physique) est souvent appelée headless.

Matériel

Pour ce faire, nous aurons besoin :

  • d’un Raspberry Pi et de sa carte micro-SD,
  • d’un espace de stockage suffisant pour enregistrer les fichiers téléchargés.

Cet espace peut être sur la carte SD (si sa taille le permet), un disque externe branché en USB ou un emplacement réseau monté en NFS. Je détaillerai ici le cas d’un disque USB.

Afin de flasher la carte SD puis de se connecter au Raspberry en SSH, il nous faudra aussi un ordinateur pourvu d’un client SSH (un terminal sur Mac ou Linux, Putty sous Windows ou même JuiceSSH sous Android).

Installation

Installation de Raspbian

Le Rapsberry Pi n’ayant aucune vocation à recevoir un écran, inutile ici d’installer un environnement de bureau. De plus, l’installation se faisant 100 % headless, il ne sert à rien d’utiliser la distribution Noobs (qui pemet de choisir le système d’exploitation au premier boot). Il est donc préférable de partir sur une distribution unique sans bureau, telle que la version Lite de Raspbian.

Une fois l’image de l’OS téléchargée, le plus simple est d’utiliser balenaEtcher pour flasher la carte SD, c’est-à-dire formater la carte SD et y installer l’OS.

Activation du protocole SSH

Par défaut, le serveur SSH de Raspbian est désactivé. Ceci limite les risques d’installation de virus, tels que Linux.MulDrop.14. Pour activer le service SSH, il suffit de créer un fichier vide dans le répertoire root de la carte SD et d’appeler ce fichier modestement « ssh ».

Vous pouvez maintenant insérer la carte SD dans le Raspberry, brancher le dernier en ethernet et le mettre sous tension. Si vous voulez connecter le Raspberry en Wifi avec la contrainte headless, vous pouvez lire mon précédent billet à ce propos.

Première connexion SSH

Normalement, vous devriez pouvoir vous connecter en SSH au Raspberry avec les identifiants suivants  :

  • Nom d’hôte : raspberrypi
  • utilisateur : pi
  • Mot de passe : raspberry

Depuis un terminal, ça devrait ça se fait donc avec la commande suivante :

moi@monPC$ ssh pi@raspberrypi

Je vous invite fortement à au moins modifier le mot de passe par défaut. Pour ce faire, il suffit, une fois connecté, de lancer la commande suivante :

pi@raspberrypi$ passwd

Montage automatique du disque externe

J’ai fait le choix d’utiliser un disque USB pour stocker les données de téléchargement. Le montage des disques USB n’étant pas automatique sous Raspbian, il est nécessaire d’ajouter le disque au fichier fstab. Commencez par identifier le nom dudit disque :

pi@raspberrypi$ ls /dev/sd*

La commande précédente me retourne :

/dev/sda  /dev/sda1

Le premier est le nom du disque, le deuxième le nom de la partition. Commencez par créer une point montage où vous souhaitez qu’apparaisse le contenu de ladite partition à monter, par exemple DDexterne dans mon cas :

pi@raspberrypi$ sudo mkdir /mnt/DDexterne

Maintenant, modifiez le fichier /etc/fstab, par exemple avec l’éditeur nano :

pi@raspberrypi$ sudo nano /etc/fstab

pour y ajouter la ligne suivante :

/dev/sda1       /mnt/DDexterne  auto    defaults        0       0

Une fois le fichier enregistré (après un Ctrl+X), actualisez les points de montage donnés dans fstab :

pi@raspberrypi$ sudo mount -a

Vous devriez maintenant avoir accès au contenu du disque externe au point de montage indiqué :

pi@raspberrypi$ cd /mnt/DDexterne

Tant qu’on y est, on va créer un dossier Torrents et deux sous dossiers nommés « Complets » et « Incomplets » :

pi@raspberrypi:/mnt/DDexterne$ mkdir Torrent Torrent/Complets Torrent/Incomplets

Transmission

J’en avais déjà fait mention dans un précédent article, ce n’est pas exactement Transmission que nous allons utiliser, mais sa version daemon, c’est-à-dire un service qui tourne en arrière plan (si tant est qu’il existe un arrière plan sur une machine dépourvue d’écran…) :

pi@raspberrypi$ sudo apt-get install transmission-daemon

Avant de commencer à utiliser Transmission, il faudra bien entendu paramétrer certains trucs, notamment son fichier de configuration. Commencez donc par vous assurer que Transmission est arrêté :

pi@raspberrypi$ sudo service transmission-daemon stop

Maintenant, éditez le fichier de configuration :

pi@raspberrypi$ sudo nano /var/lib/transmission-daemon/info/settings.json

Ce fichier est constitué de pléthores de paramètres que je laisse au lecteur le choix de modifier selon sa convenance (ce dernier trouvera la description complète des paramètre ici). Nous nous intéresserons ici au paramétrage des dossiers de destinations sus-nommés ; ce sont donc les options download-dir et incomplete-dir que nous allons modifier comme suit :

"download-dir" : "/mnt/DDexterne/Torrent/Complets",
"incomplete-dir" : "/mnt/DDexterne/Torrent/Incomplets",

Et activer la séparation des fichiers complets/incomplets :

"incomplete-dir-enabled" : true,

L’objectif étant de pouvoir se connecter au Raspberry pour lui demander de télécharger des torrents, cette connexion se fera avec un identifiant/mot de passe unique (« transmission »/ « transmission » par défaut). Ces valeurs peuvent être changées avec les lignes suivantes :

"rpc-password" : "mot-de-passe",
"rpc-username" : "identifiant

Enfin, on va vérifier que l’interface Web est activée :

"rpc-enabled" : true,

et que tout le monde sur le réseau peut y accéder :

"rpc-whitelist" : "192.168.1.*",

Cette dernière ligne est bien sûr à adapter selon les adresses IP de votre réseau domestique. Si tout est OK, vous pouvez relancer Transmission :

pi@raspberrypi$ sudo service transmission-daemon start

Si vous retournez voir le fichier de configuration, vous verrez alors que le mot de passe a été chiffré. D’où l’intérêt d’arrêter Transmission avant de modifier ce fichier…

Vous pouvez essayer de vous connecter au serveur Web à l’adresse suivante : http ://ip-du-raspberry :9091/transmission/web/. Vous pouvez donc utiliser cette interface pour gérer vos téléchargements. Sous Linux, sachez que l’utilitaire transmission-remote sert à manager à distance (en ligne de commande) ce type de configuration, tandis que transmission-remote-gtk offre une interface graphique au précédent.

Connexion VPN

Il existe plusieurs types de serveur VPN, et les moyens de s’y connecter sont propres à chaque type. Je ne détaillerai ici que le cas d’une connexion sur un serveur OpenVPN.

Pour authentifier votre connection OpenVPN, il vous faut 4 fichiers, qui sont (les noms donnés entre parenthèses sont donnés à titre d’exemple) :

  • Le certificat, émis par l’autorité de certification (ca.crt)
  • Le fichier client (client.crt)
  • La clé client (client.key)
  • Le fichier de configuration OpenVPN (MonVPN.conf)

Si vous avez téléchargé ces fichiers sous forme d’une archive ZIP, il faut donc commencer par les envoyer sur le Raspberry, ce qui peut se faire simplement dans un terminal avec scp :

moi@monPC$ scp Téléchargements/config_openvpn.zip pi@raspberrypi :

Une fois (re)connecté en SSH au Raspberry, il faut alors extraire l’archive :

pi@raspberrypi$ unzip config_openvpn.zip

Puis déplacer les fameux fichiers de configuration dans le dossier OpenVPN :

pi@raspberrypi$ sudo mv -t /etc/openvpn/ ca.crt client.crt client.key MonVPN.conf

Vérifiez que openssl et openresolv sont bien installés :

pi@raspberrypi$ sudo apt-get install openresolv openssl

Comme on souhaite que le Rapsberry soit toujours connecté au VPN (même après un reboot), il faut nécessairement rentrer en dur les identifiant et mot de passe utilisateur de votre fournisseur VPN. Pour ce faire, on va créer un fichier utilisateur :

pi@raspberrypi$ cd /etc/openvpn

pi@raspberrypi:/etc/openvpn$ sudo nano user.txt

et y ajouter l’identifiant et le mot de passe (un sur chaque ligne) propres à cette connexion (ils sont probablement différents de vos identifiants utilisés pour vous connecter à votre compte chez votre fournisseur VPN). Il reste alors à éditer le fichier de configuration d’OpenVPN pour qu’il pointe vers ce fichier utilisateur :

pi@raspberrypi:/etc/openvpn$ sudo nano MonVPN.conf

et modifier la ligne « auth-user-pass » ainsi :

auth-user-pass /etc/openvpn/user.txt

A la fin du fichier (juste après comp-lzo), ajoutez les lignes suivantes :

up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Enfin, il faut préciser qu’on souhaite automatiser la connexion d’OpenVPN selon la configuration donnée dans MonVPN.conf :

pi@raspberrypi$ sudo nano /etc/default/openvpn

Dans ce fichier, il faut alors ajouter l’option suivante :

AUTOSTART="monVPN"

Le nom correspond au nom du fichier .conf (sans l’extension). Mettez à jour les liens vers les scripts d’initialisation :

pi@raspberrypi$ sudo update-rc.d openvpn enable

Reste à lancer OpenVPN et croiser les doigts :

pi@raspberrypi$ sudo service openvpn start

Vérifier que la connexion VPN est active

Pour s’assurer que la connexion VPN est fonctionnelle :

pi@raspberrypi$ sudo less /var/run/openvpn/monVPN.status

Si le fichier est manquant, c’est qu’il y a une couille dans le potage des corrections à faire.

Vérifier que les téléchargements passent par le VPN

Plus encore que la simple connexion, c’est bien le fait que les téléchargements passent par le VPN qui nous intéresse. Pour vérifier cela, il suffit se rendre sur à l’adresse suivante : https ://torguard.net/checkmytorrentipaddress.php

Ajoutez le lien de téléchargement affiché à la liste des téléchargements de Transmission. Une fois ce fichier ajouté, la page va se mettre à jour et afficher l’adresse IP vers laquelle ledit torrent est téléchargé. Si celle-ci est différente l’adresse fournie par votre FAI, c’est que vous êtes tranquille !